Changelog
Ada kabar baru.
Setiap perbaikan pada platform, sebagai kapal.
· kamo-shared-library
Domain penyedia gaji di belakang mesin timecard
Tambahkan tulang belakang ketekunan untuk menghubungkan timecards organisasi ke sistem ketiga-pihak gaji: koneksi dan konfigurasi terenkripsi per- org, hibah OAuth, anggota - ke-provider link karyawan, earning-peta kode, dan dua tambahan - hanya catatan (pengiriman upaya dan masalah sync) yang membuat Sebuah sinkronisasi menjelaskan setelah itu. Disimpan di dalam com.kamo.z.shared.hr.timecard daripada paket baru di tujuan: sebuah paket shared-lib baru harus ditambahkan ke tiga eksplisit terpisah @ EnableJpaRepositories daftar, dan mengabaikan satu abtorts sebuah layanan konteks - atau, di KamoInisializer, membatalkan menjalankan sementara masih melaporkan BUILD SUCCESS. Catatan pada bentuk: - PayrollProviderType memakai kembali kosakata token yang telah didokumentasikan pada * * * * * * * * * * * * * * * (ADP _ WFN, PAYCHEX, GUSTO,...). Sebentar. ejaan untuk vendor yang sama akan membagi riwayat ekspor tanpa error di mana saja. ADP _ RUN dan QUICKBOOKS disimpan karena layar ekspor gaji telah menawarkan mereka karena dikirim, sehingga baris hidup dapat membawa mereka. - Link Karyawan dikekang oleh penyedia, bukan oleh koneksi, jadi beralih penyedia dan beralih kembali tidak membuang pekerjaan pemetaan. DUA kendala unik: satu berhenti anggota memegang dua link, yang lain berhenti dua anggota mengklaim satu penyedia karyawan - yang satu mencegah gajian ganda. - PayrollDispatch dan PayrollSyncIssue adalah WORM. Sebuah transmisi gaji mencoba adalah acara uang; "kami mengirimnya, maka kami mengirimkannya lagi" adalah fakta Rekonsiliasi kebutuhan. - Kredensial hidup dalam One dienkripsi config _ json blob daripada kolom per field, jadi menambahkan vendor bukanlah skema yang mengubah setiap layanan. RoleRightType memperoleh manvage _ PAYROLL _ PROVIDER (199) - sengaja NOT legacy manvage _ PAYROLL (40), dimana tidak ada gerbang hari ini dan sudah dipegang oleh jumlah anggota yang tidak diketahui; menggunakannya kembali akan memberikan gaji pihak ketiga Kredensial untuk setiap rate- melihat hak pemegang pada boot yang dikirim itu. PlatformOauthority ProviderType memperoleh tujuh vendor gaji di mana Kamo memegang satu pendaftaran mitra (ID 11-17). UKG per pelanggan dan sengaja tidak mendapatkan konstanta: layar platform merender sebuah kartu untuk setiap konstanta, sehingga satu untuk mereka akan bentuk tidak ada operator bisa Isi. Juga perbaikan assertion basi dalam Gerakan Pencairan BillingDelegationModeTest: commit 9276487 sengaja membuat REQUIRES _ APPROVAL memungkinkan grup (pengecualian yang dibuat jalur persetujuan tidak dapat dicapai) tetapi meninggalkan tes menegaskan perilaku lama, jadi suite telah merah pada utama sejak. Skema diterapkan dan diverifikasi dalam Yugabyte sebelum dorongan ini.
· kamo-internal
Sebuah dinding di "sekarang", dan kartu yang menjelaskan pukulan dibatalkan
Tidak ada yang bisa merekam waktu mereka belum bekerja. Dragging tepi, geser seluruh span, beringsut dengan tombol panah, magnet, hak blok klik dan dialog menambahkan manual semua berhenti pada menit saat ini pada baris hari ini, dan masa depan tidak menerima apa-apa. Bagian dari hari ini yang belum terjadi adalah menetas, karena "kau tidak bisa menyeret pil di sini" harus terlihat sebelum seseorang kontrol, bukan sebagai aturan. Server sudah menolak sebuah pukulan yang dimasukkan atau dikoreksi melewati sekarang, yaitu persis mengapa klien membutuhkan ini: tanpa dinding drag berhasil, Pil duduk di sana mencari dipentaskan, dan seluruh menyimpan gagal di akhir dengan pesan tentang pukulan anggota tidak bisa menemukan. Magnet mendapat dinding yang sama. Sebuah pukulan yang tersisa di masa depan oleh perangkat yang salah Jam adalah target yang sah, sehingga tepi dapat ditarik maju ke atasnya dan tanah di suatu tempat menyimpan akan menolak. Dan kartu konfirmasi sekarang tetap terbuka ketika pukulan CANCELS keluar yang sebelumnya, yang TimecardService mulai melakukan pagi ini untuk setiap pembalikan dalam menit. Tanpa itu anggota menekan tombol, menonton negara snap kembali persis di mana itu dimulai, dan cukup menyimpulkan tombol rusak. Masuk bahwa keadaan kartu menjatuhkan pemetik dan salinan aksi, menunjukkan satu kalimat dan satu tombol, dan berhenti dismissing pada backdrop - klik nyasar yang begitu sering mengikuti konfirmasi jangan menutup satu-satunya penjelasan dari apa yang terjadi.
· kamo-internal
Berikan dukungan dan jendela sosial komposer anggota obrolan
Sebuah tiket dukungan dan DM sosial adalah hal yang sama sebagai anggota chat - a sesi media dengan pesan di atasnya - tetapi mereka menjawab melalui telanjang lapangan teks. Seorang agen bisa dikirim screenshot oleh pelanggan dan tidak punya cara untuk mengirim satu kembali: tidak ada tombol melampirkan, tidak ada drag-drop, tidak ada paste, tidak ada emoji, dan masukan yang tidak akan tumbuh melewati satu baris. Keduanya sekarang membuat anggota chat 's Composer, sehingga mesin upload, nampan lampiran, panel transfer, emoji picker dan Enterta- to- send adalah satu implementasi di semua tiga. Menerima dan mengirim render lampiran gelembung melalui yang sama AttachmentChip. Dua hal yang dipaksa oleh jendela pendukung di meja: - Draf yang diparkir per percakapan (use DraftParking). Satu komposer melayani beberapa tiket dan posting pengiriman kepada siapa pun yang ada di layar, sehingga draft kiri dalam kotak adalah kata-kata satu pelanggan ditujukan pada yang lain. Memisahkan setelah mengirim mengambil kunci saat pengiriman dimulai, atau mengganti tab pertengahan penerbangan akan menghapus balasan sedang diketikkan ke orang lain. - Staged lampiran diadakan per sesi juga. Daftar datar menempatkan satu pelanggan berkas dalam nampan lain dan diunggah di sana; uploadAll sekarang alamat sesi berkas yang dipentaskan untuk, tab apa pun yang terlihat ketika ia mendarat. Balasan sosial ditutup di satu berkas dari 10 MB: sebuah pesan membawa satu tunggal MediaObjSocialRef, sehingga lampiran kedua dapat disimpan dan tidak pernah disampaikan, dan 10 MB adalah langit-langit penyedia paling ketat yang kami kirim. Menolak dalam komposer mengalahkan kehilangan itu diam-diam. Pengiriman gagal kini dilaporkan secara terpisah dari unggah yang gagal - berkas tersebut up, pesan tidak, dan draft masih ada untuk mencoba lagi.
· kamo-internal
Daftar panggilan cepat departemen org ekstensi
Tab dikirim enam entri ditemukan - Tim Penjualan pada 1001, Ruang Konferensi dering permanen - sehingga panggilan satu mencapai apa pun yang terjadi untuk menjawab bahwa ekstensi, dan lencana BLF melaporkan keberadaan tidak ada yang berlangganan. Sekarang membaca / api / keamanan / departemen dan daftar setiap departemen org memiliki diberikan sebuah ekstensi, diurutkan oleh judul, dengan angka di luar di bawah ketika satu sudah ditetapkan. Memuat, kosong dan retryable- error menyatakan mengganti ubin yang tidak pernah bisa kosong. GET adalah org- scoped dan membutuhkan hak tidak, dan kebakaran Hanya sekali tab pertama dibuka.
· kamo-internal
Obrolan lebar, sosial, ai- chat dan menggubah jendela dengan ukuran dukungan
Jendela dukungan tiket dibuka di 460px sementara anggota chatting, sosial chat, Al chat dan komposer email semua duduk di 360- 420. Dermaga yang sama, jenis konten yang sama - mereka kini bagi standar dukungan jendela 460px (dan lantai 420px untuk dapat diubah ukurannya satu), sehingga deretan jendela yang terbuka garis atas bukan tangga-melangkah.
· kamo-internal
Tampilkan pesan tak terlihat pada setiap baris antrian, tidak hanya bergabung dengan yang
Lencana dan warna baris sudah ada di sini - mereka hanya tidak pernah dihuni untuk sebagian besar daftar. getUnreadFor hanya membaca peta hidup per- sesi yang belum dibaca, yang berasal dari daftar keanggotaan sendiri, jadi tiket yang tidak mereka miliki bergabung tidak pernah bisa menyala. Pada antrian ini yang sebagian besar, dan tiket tidak ditugaskan ada yang mengambil baik mayoritas dan baris yang paling perlu bendera. Ini sekarang lebih suka peta hidup, yang berwenang untuk percakapan penampil adalah dalam dan pembaruan atas StoMP saat mereka membaca atau tanah balasan, dan jatuh kembali ke server 's per- tiket menghitung untuk segala sesuatu yang lain. Kedua tidak bisa gabung secara membabi buta: peta langsung hanya pernah membawa sesi yang masih belum dibaca pesan, jadi "membaca beberapa detik yang lalu" dan "tidak pernah dihitung" tidak dapat dibedakan dalam Itu - maka set kecil percakapan dibuka selama kunjungan ini, yang terus baris anggota saat ini membaca dari tetap menyala sampai reload berikutnya. Daftar juga membaca sendiri ketika jumlah dukungan yang tertunda bergerak. Untuk percakapan penampil belum bergabung tidak ada saluran hidup yang akan pernah memperbaiki snapshot - topik yang belum dibaca hanya mencapai orang dalam sesi, yang pada antrian adalah tidak ada - dan pendingcount adalah salah satu sinyal yang tidak mencapai setiap support- mampu anggota org.
· MediaService
Stamp jumlah tak terlihat pada daftar tiket, dan menjaga antrian hidup
gettickets now bulk- loads an unseen- message count per row for the caller, beside pengunjung baris itu sudah beban seperti itu, dan getTicketDetail menghitung sendiri sebelum pembaca tanah markAsRead - sehingga jendela dapat menunjukkan apa yang tiba sementara mereka jauh daripada sejumlah tindakan membuka itu sudah memusatkan perhatian. Juga menutup jarak sinyal yang meninggalkan antrian basi. Sebuah pesan dalam dukungan percakapan memindahkan antrian untuk setiap support- anggota mampu dari org, bukan hanya orang-orang dalam sesi itu - yang persis siapa sesi per- belum dibaca topik TIDAK dicapai. Siaran pending- hitungan sudah dipecat ketika pengunjung public- chat dikirim dan ketika agen ditandai membaca; anggota menjawab dari di dalam aplikasi adalah lubang, sehingga percakapan dukungan in- app bisa mendapatkan pesan dengan apa-apa memberitahu setiap agen layar untuk melihat lagi. Dukungan UnseenCountSqlTest pin bentuk permintaan. Setiap klausul di dalamnya adalah load- bearing dan tidak satupun dari mereka terlihat dalam sebuah membangun lewat: mendapatkan satu salah dan antrian masih dirender, hanya dengan jumlah yang diam-diam salah.
· kamo-shared-library
Menghitung pesan yang tak terlihat bagi penampil yang tidak dalam percakapan
Belum dibaca selalu diturunkan dari kolom MediaSesi sendiri, jadi percakapan mereka tidak bergabung diproduksi tidak ada hitungan sama sekali. Pada antrian dukungan yang sebagian besar - 27 dari 37 tiket hidup yang tidak ditugaskan, dan 26 dari mereka memiliki tepat satu anggota sesi, orang yang meminta bantuan. Mereka adalah Tepatnya baris yang paling perlu ditandai, dan mereka adalah orang-orang yang struktural tidak bisa membawa bendera: tidak ada yang bergabung dengan mereka, sehingga tidak ada (Dan demi rombongan yang menggiring dengan sebenar-benarnya) demi para malaikat yang menggiring atau mengarak awan. CountUnseenBySessionForViewer menjawab pertanyaan yang ditanyakan sebagai gantinya. The KIRI JOIN ke keanggotaan adalah seluruh trik: tanpa baris keanggotaan tidak ada baca penunjuk, jadi setiap jumlah pesan inbound, yang adalah kebenaran - penampil tidak melihat satupun dari mereka. Satu query per halaman, cocok dengan baris pengunjung di samping Ini sudah terisi. Kejadian sistem tidak termasuk. Perubahan status atau penugasan ulang adalah pembukuan tentang percakapan, dan menghitung itu menyala baris di mana tidak ada yang benar-benar mengatakan apa-apa - lebih buruk daripada tidak ada lencana sama sekali pada layar yang pekerjaannya sedang memutuskan apa yang perlu jawaban. SupportTicketDTO.unseenCount berpopulasi pada daftar dan detail membaca dan meninggalkan kosong di tempat lain, karena "tak terlihat" adalah fakta tentang pemutaran dan angka (Yang demikian itu) kecelakaan dan penyesatan itu (adalah karena sesungguhnya peringatan itu) amal perbuatan yang dilakukan oleh orang-orang kafir (adalah salah seorang di antara kalian) hai orang-orang mukmin (yang mengada-ada saja.).
· kamo-internal
Hapus, magnet, menu klik kanan, dan jam yang menanyakan yang mana
Enam tambahan ke grafik periode dan jam navigasi. DELETE menghilangkan pil fokus. Backspace juga, karena pada Mac kunci berlabel "delete" IS Backspace dan menawarkan hanya Hapus berarti jalan pintas tidak tidak ada di laptop. Ini voids kedua pukulan span, sehingga menghapus makan meninggalkan pekerjaan kedua sisi itu terus menerus - yang adalah apa artinya bagi makan bukan untuk terjadi. Staged like every other edit; nothing is written sampai diselamatkan. Sebuah GUIDELINE mengikuti pointer di setiap baris, dengan menit itu adalah dalam Chip di bagian atas. Tugasnya adalah mengatakan di mana klik akan mendarat, dan itu adalah menit yang sama pada setiap hari dalam periode. Diukur dari suatu elemen trek agak daripada wadah, yang kotak termasuk nama hari dan kolom total - menggunakan itu akan melaporkan satu menit keluar oleh lebar mereka, yang anggota tidak dapat melihat RIGHT-KLIK di mana saja pada hari membuka menu yang menjatuhkan blok 15 menit Bekerja waktu, makan atau istirahat di mana pointer itu. Dua pukulan, bukan satu: span adalah sepasang, dan pembuka tunggal menarik pil berjalan ke tengah malam. Perhatikan bahwa makan block OPENS dengan MEAL _ OUT - makan dicatat sebagai clocking keluar dari pekerjaan dan kembali dalam, dan mendapatkan bahwa pasangan terbalik hari. MEGNETS: tepi diseret dalam waktu lima menit dari pukulan lain terkunci ke nya Tepat menit, sengaja melewati satu menit celah penjepit terus. Itu gap berhenti tepi melintasi tetangganya, di sini seluruh niat adalah untuk dua untuk memenuhi, dan tepi yang hanya dapat mendarat pendek satu menit tidak pernah dapat menutup celah. Lima menit di zoom dua minggu adalah beberapa piksel, jadi tanpa magnet "Membuat istirahat ini berakhir ketika yang berikutnya dimulai adalah tugas yang tak seorang pun dapat menyelesaikan dengan pointer. Dan ketika magnet mendarat dua spans jenis SAME ke tepi, mereka MERGE dalam gerakan yang sama: clock-out dan clock-in yang sekarang berbagi berhenti menit Menjadi benar, dan keduanya dibatalkan. Jenis berbeda tidak pernah bergabung - sebuah pergeseran berakhir persis ketika makan dimulai bukan satu rentang, itu adalah dua hal yang benar-benar terjadi. Hal ini membutuhkan semacam untuk GraphPunches untuk menunda istirahat pada asli menit: dua sudut insiden harus menjaga urutan atau pasangan kronologis mereka swap mereka, menghasilkan rentang zero-width dan pembuka nyasar, dan pil menghilang pada saat kedua bertemu. Tiga PILL COLOURS, dan berbeda oleh lebih dari hue - bekerja keras dalam merek primer, makanan banded dalam amber HRS, istirahat halus bergaris-garis ungu. Warna sendirian gagal ~ 8% dari laki-laki dengan defisiensi merah-hijau dan gagal semua orang pada proyektor; seseorang harus dapat memberitahu makan yang belum dibayar dari istirahat dibayar dalam Hitam dan putih cetakan. The NAV CLOCK ASKS WHICH PUNCH. "Jam keluar" adalah tiga tindakan yang berbeda, dan apa adalah pada penawaran tergantung pada di mana anggota berdiri: bekerja, mereka mungkin berakhir shift, pergi ke makan atau istirahat; pada makan atau istirahat, datang kembali adalah default dan mengakhiri pergeseran masih ada karena orang tidak meninggalkan lurus dari makan siang. Menggulung yang menjadi satu tombol adalah bagaimana seseorang mengakhiri hari mereka ketika mereka bermaksud untuk pergi makan siang - jam yang belum dibayar mereka tidak mendapatkan kembali dan kehilangan pengecualian pukulan dalam perjalanan. Kartu resks ke aksi yang dipilih dalam tiga warna yang sama menggunakan grafik, mengatakan berapa lama mereka telah di mereka negara bagian saat ini, dan titik navigasi sekarang melaporkan yang dari tiga negara bagian itu. Sebuah 'keadaan' absen dari server dibaca sebagai "boolean adalah semua yang kita miliki", bukan sebagai OFF: membacanya sebagai OFF akan menawarkan "clock in" untuk seseorang mid- shift untuk panjang jendela terbuka.
· SecurityService
Relay the punch void
Passough untuk POST / punch / {id} / void, kunci penghapusan penyunting dan Mesin-mesin di belakang menggabungkan dua bentangan bersebelahan. Otoritas yang sama sebagai / benar, dan untuk alasan yang sama: sebuah EMPLOYEE mungkin membatalkan mereka punch sendiri, karena anggota yang tidak bisa mengatakan "bahwa keran ganda tidak pernah terjadi" telah Tidak ada cara untuk memperbaiki catatan mereka adalah satu-satunya saksi. Apa yang mereka tidak bisa lakukan adalah membuatnya menghitung - tanah kekosongan pada timecard yang masih bergerak melalui Rantai persetujuan, dan alasan wajib pada setiap jalan. Aktor dicap dari SESI, tidak pernah dari tubuh, tubuh-aktor yang disediakan adalah body-diberikan tanda tangan pada catatan upah orang lain. Dua tes, menarik arah yang berlawanan, karena layanan ini berjalan anyrequest () .permitAll () dengan self-rolling per-handler auth: ini harus menolak pukulan rekan tanpa pernah mencapai relay, dan harus mengakui subjek sendiri memegang hak sama sekali.
· kamo-shared-library
Sebuah pukulan dapat dibatalkan tanpa akan dihapus
Empat kolom bernull dan tulisan kedua - sekali transisi di TimecardPunch. A void mengatakan pukulan seharusnya tidak pernah ada - tekan ganda pada jam, sebuah rusak ditinggalkan, atau jahitan antara dua spans editor timecard baru saja bergabung menjadi satu. Itu bukan koreksi ("ini terjadi, di lain waktu, "yang meninggalkan baris pengganti) atau menghapus: supersededByPunchId berarti "membaca baris lain ini sebagai gantinya", dan di sini tidak ada baris lain. Baris bertahan, voided, dengan penulis dan alasannya di sampingnya. Sebuah upah catatan yang dapat dibuat untuk melupakan pukulan adalah persis kekurangan yang pergeseran beban kepada majikan di bawah Anderson v. Gunung Clemens Pottery, jadi satu-satunya hal yang menghapus kekosongan adalah efek pukulan pada perhitungan. alleceWorm () permission voidedat on the same terms as supersededByPunchId - null untuk nilai, sekali - dan menolak kekosongan tanpa alasan. Un- voiding di tempat adalah Dengan sengaja tidak mungkin: mengembalikan pukulan berarti menyisipkan satu, yang daun (Dan orang-orang yang terhadap kesaksiannya) menurut suatu qiraat dibaca dalam bentuk jamak, sehingga bacaannya menjadi syahaadaatihim (mereka menunaikannya) mereka menegakkannya dan tidak menyembunyikannya. * * * * * * * * * * * * * kenyamanan. Varian tidak disaring salah untuk menentukan keadaan jam: a baris overseded terus nya ORIGINAL instan, sehingga clock-out dikoreksi mundur meninggalkan baris mati terbaru oleh exacredAtUtc, dan baris voided tetap terbaru sampai sesuatu yang baru dipukul. Entah satu jawaban "kau pada jam?" dari catatan yang tidak ada lagi. Sequenced per hak-perubahan aturan: shared-lib terpasang secara lokal, KI migrasi ditulis dan RUN terhadap 192.168.4.22: 5433 dengan keempat ALTERs Terapan, dan hanya kemudian ini didorong - sehingga tidak ada layanan dapat membangun terhadap skema tidak bermigrasi.
· InitializerService
Kolom void di hr _ timecard _ punch
Mirror empat kolom baru yang dapat dibicarakan pada entitas TimecardPunch. Sebuah kekosongan adalah baik menghapus atau koreksi: ia mengatakan pukulan seharusnya tidak pernah ada - Sebuah ketukan ganda pada jam, istirahat ditinggalkan, atau jahitan antara dua Spanyol editor telah bergabung menjadi satu. SUPERSEDED _ BY _ PUNCH _ ID tidak bisa mengungkapkannya, karena kolom yang berarti "membaca baris ini lain" dan tidak ada yang lain baris. Keempat adalah NULLABLE, yang adalah apa yang membuat ini aman di atas meja penduduk: CockroachDB menolak ADD COLUMN... TIDAK NULL pada meja kosong dan gulungan seluruh pernyataan kembali, sehingga NULL penanda void akan dicatat sebagai WARN, Melewatkan, dan diam-diam absen. Mereka pergi pertama di pelari ini, depan indeks dan REVOKEs sudah membawa, karena alasan @ Order (0) ada: saat berbagi -lib peta sebuah kolom, setiap pelari yang memuat entitas pukulan memancarkan dalam SELECT nya, dan kolumn-add perintah akhir tidak pernah berjalan sama sekali - pembaca sebelumnya meninggal pada kolom " tidak ada "dan mengambil penginisialisasi turun dengan itu. Jalankan melawan 192.168.4.22: 5433, keempat diterapkan.
· kamo-internal
Tampilkan panel pada pasar ketika tidak ada pasar CRM ada
/ leads dirender grid lead dengan kosong, cacat bar tab pasar untuk org yang tidak pernah dikonfigurasi pasar CRM. Sekarang menunjukkan panel onboarding yang sama / Pertunjukkan perdagangan yang hilang - diekstraksi ke MarketOnboardingEmptyState sehingga dua tetap identik - didorong oleh memimpin CRM Pasar dari Pengaturan > Manajer Hubungan Klien, bukan pasar perdagangan, dan menunjuk CRM Markets & Fields tab. Langkah-langkah dan pengaturan CTA hanya ditampilkan kepada anggota yang dapat mengelola CRM konfigurasi; semua orang mendapat yang ada check-back- kemudian salin.
· kamo-internal
Ayat grafik, dan timecard yang Anda sunting sebagai draft
Mengganti satu-hari timeline pada * * * * * * * * * * * * dengan seluruh periode gaji, dan perubahan apa yang mengedit seseorang merasa seperti. Pil tidak membawa teks. Mereka digunakan untuk membawa mereka sendiri kali, dan label adalah 60px lebar namun panjang hal yang digambarkan adalah - jadi istirahat sepuluh menit dan shift empat jam menggambar pil yang sama, dan satu properti garis waktu memiliki bahwa tabel tidak (lebar berarti durasi) adalah properti yang dibuang. Keduanya kali sekarang hidup dalam tooltip yang nama awal, akhir dan rentang antara mereka, dan mengikuti tepi diseret dengan bacaan yang update karena Bergerak. Corners adalah 2.5px: cukup untuk mengambil hardness mekanis off, tidak cukup untuk mengumpulkan lima menit pil ke dalam permen. Label header jam setiap jam, masing-masing berbalik seperempat putaran berlawanan-jarum jam jadi semua dua- empat cocok. Empat label enam jam terpisah tidak dapat memberitahu siapa pun apakah pil dimulai pada 9 atau pada 10, yang merupakan satu-satunya pertanyaan header ada untuk Jawab sekarang pilnya tidak ada label. Setiap hari dalam periode mendapat berturut-turut, hari INCLUDING yang belum terjadi. Sebuah grafik yang hanya menggambar hari dengan data tidak dapat menunjukkan pukulan yang hilang, dan hilang pukulan adalah hal yang paling umum salah dengan sebuah timecard: kesenjangan adalah menemukan, dan menemukan kebutuhan baris untuk muncul di. Masa depan adalah menetas agak daripada hanya redup - "belum" dan "tidak ada yang merekam apa pun" berbeda fakta. Drags snap to the MINUTE. Lima menit snapping tidak bisa mengekspresikan 9: 02, jadi jam yang dua menit keluar tidak dapat diperbaiki dan setiap kali dikoreksi diperoleh sebuah keanehan yang dibaca sebagai perkiraan. Perputaran adalah kebijakan gaji mesin diterapkan dengan netralitas pelaporan di belakangnya; slider tidak boleh menerapkan kedua, tak terlihat. Tombol panah nudge oleh satu menit, Shift oleh lima belas, Alt mengambil satu ujung sendiri - penunjuk tidak dapat mengekspresikan satu menit di trek mana menit berada di bawah pixel. Dan editing sekarang draft. Menggambar digunakan untuk membuka dialog mandatory- alasan pada setiap rilis: memperbaiki hari dengan tiga pukulan yang salah berarti menulis tiga Penjelasan, setiap varian "jam itu salah", dan perlindungan nyata Di bawah Anderson v Mt Clemens Pottery berubah menjadi kotak orang diketik "koreksi" menjadi untuk membuatnya pergi. Sebuah perlindungan semua orang belajar untuk mengalahkan melindungi siapa-siapa. Edits now stage freely and one explanation is collected on save - masih wajib, masih dicatat pada setiap pukulan sentuhan menyimpan, tapi bertanya sekali, ketika seseorang benar-benar tahu apa yang mereka lakukan. Tidak ada yang tertulis sampai saat itu. Mendukung perubahan: - app / lib / timecardGraph.ts memegang setiap keputusan grafik membuat - pasangan, clammping, snapping, DST-safe instan pergeseran - sebagai fungsi murni, karena keputusan tentang catatan upah yang hanya dapat diperiksa dengan menyeret sesuatu dengan mouse adalah keputusan tidak ada yang memeriksa. 34 tes. - fetchRange jatuh kembali ke per-day membaca pada 404 sehingga tab tidak rusak untuk siapa pun yang beban itu antara SecurityService menyebarkan dan yang satu ini. - Add- a- time field round - perjalanan melalui wall- clock lokal. Ini menghasilkan UTC slice ke sebuah datetime- lokal masukan dan parsed hasil kembali sebagai lokal, jadi setiap kunjungan ke lapangan memindahkan waktu oleh ofset zona dalam keheningan.
· SecurityService
Relay jangkauan perioda
Passough untuk GET / anggota / {id} / range, grafik periode dibaca. dari / ke adalah diteruskan hanya ketika hadir sehingga Layanan TimecardService dapat menyelesaikan anggota sendiri membayar jangka - meneruskan "? dari = & to =" akan mengikat ke string kosong hilir dan diam-diam mengalahkan bahwa baku untuk setiap org dengan kalender membayar. Identitas diperiksa dengan resolveRole dan tidak ada hak, persis seperti / hari sudah tidak. Kedua persyaratan menarik di arah yang berlawanan dan gerbang bermarkas kanan mendapat hanya satu dari mereka: itu tidak harus menjadi cara untuk membaca jam rekan, dan harus mengakui subjek sendiri memegang NOTHING, karena anggota di Peringkat RESTRICTED tidak memiliki hak sama sekali dan masih memiliki hak hukum untuk mereka catatan sendiri. TimecardRangeAuttest mencakup kedua arah ditambah gedung permintaan, karena layanan ini berjalan anyRequest () .permitAll () dengan handler per-rolling per - pemetaan yang melupakan ceknya dapat dicapai dari internet publik melalui wildcard APIService ke depan.
· kamo-internal
Angkat percakapan dukungan ketika seseorang membalas di dalamnya
Menutup jendela dukungan tidak meninggalkan percakapan, tetapi diperlakukan sebagai Jika itu benar. Pendengar Chatnotificationkembali awal pada setiap SUPPORT _ TIKET pemberitahuan - benar, karena tiket tidak boleh membuka jendela obrolan biasa, tapi itu meninggalkan dukungan tanpa hidup re-open sama sekali. Siapapun yang menutup panel mereka, sering orang yang meminta bantuan sekali mereka telah meminta, hanya tidak pernah melihat Jawab. Ini sekarang membuka jendela dukungan sebagai gantinya, ditujukan oleh id tiket pemberitahuan membawa; perangkat store dedupes pada ticketId, jadi sebuah jendela sudah naik lebih fokus daripada duplikat. AutoOpenUnreadreadSportChats adalah setengah yang dapat dipertahankan, untuk jawaban yang tiba saat Mereka keluar - dorongan langsung adalah inti NATS tanpa replay. Disengaja terpisah dari AssignedTicketOpener: satu jawaban "pekerjaan ini sekarang milikmu", yang satu ini menjawab "seseorang mengatakan sesuatu kepada Anda", dan untuk permintaan pertama tidak pernah terjadi sama sekali. Keduanya mengakui melalui auto- yang sama membuka catatan Path percakapan dipakai, sehingga perangkat kedua tidak memutar ulang apa yang telah ditampilkan pertama kali. ChatsList sekarang mengambil ticketId langsung dari bingkai aktivitas. Menyelaraskan baris dukungan tanpa satu dihasilkan baris yang tidak dapat dibuka, sehingga daftar memiliki untuk membuang bingkai dan kembali membaca seluruh halaman untuk mendapatkannya.
· MediaService
Satu percakapan, banyak tangan - bergabung pada terbuka, nama setiap pesan, re- buka pada jawaban
Tiket dukungan bekerja oleh siapa pun yang membantu, tidak hanya oleh siapa pun itu saat ini dicap dengan. Penugasan memutuskan kepada siapa pekerjaan ditawarkan dan yang daftar itu muncul di; itu tidak pernah dimaksudkan untuk menjadi kunci pada percakapan. Membuka tiket sekarang bergabung dengan sesi media. Sebelumnya, seorang agen yang membuka tiket dari antrian yang tidak ditugaskan kepada mereka bisa mengetik ke dalamnya - apa-apa menolak pesan - tapi mereka bukan anggota sesi, jadi percakapan tidak pernah muncul dalam Chats mereka - > Dukungan, tak ada balasan yang pernah dicapai mereka, dan permintaan itu "adalah agen saya di sini" tidak menghitung mereka. Mereka Berbicara ke sebuah ruangan mereka tidak masuk Yang mungkin bergabung adalah populasi yang sama yang dapat melihat tiket dalam antrian: orang-orang sudah dalam percakapan, plus ACCEPT _ SUPORT _ TIKETS atau Manage _ SUPORT dalam ditugaskan org. Semua orang sekarang ditolak - titik akhir ini sebelumnya melayani tiket apapun di platform untuk setiap anggota dikonfirmasi yang bisa menebak UUID, di organisasi, dan bergabung dengan gerbang akan lebih lebar dari membaca percakapan orang asing ke sedang ditulis ke dalamnya. Setiap pesan sekarang membawa nama. Nama pengirim dibaca langsung Anggota. Nama pengguna Alias, nama panggilan opsional yang tidak diatur pada hampir setiap anggota, sehingga serialisasi sebagai null dan percakapan pesan yang diberikan dengan tidak ada atrisit Semuanya. Yang terburuk dalam tiket dukungan, mana lebih dari satu agen mungkin Menjawab dan pelanggan tidak punya cara lain untuk memberitahu siapa yang berbicara dengan mereka. Nama Anggota Displalay- sudah digunakan di tempat lain dalam pengontrol ini - jatuh kembali ke nama aslinya. Pembacaan mentah yang sama adalah pengosongan nama agen, tiket aktor sejarah, system-event aktor, berita yang tersedia dan pelaporan meja. Jendela tertutup tidak lagi berarti jawaban yang hilang. Notifikasi pesan yang akan datang membawa ID tiket, sehingga klien dapat meningkatkan percakapan itu memberitahu Anda tentang, dan / sesi / dukungan / otomatis terbuka adalah setengah tahan lama untuk jawaban yang tiba sementara Anda ditandatangani keluar - sisi pesan dari assignned- unopened, which only ever cover work changing hands and so never dipecat untuk orang yang meminta bantuan. Tes: Tempelkan kutipan dari kolom kueri alias, yang tidak ada lagi dapat menangkap - mode kegagalan adalah null diam, bukan tipe error atau pengecualian. Mendukung AutoOpenHqlTest memisahkan permintaan baru terhadap model entitas nyata, karena Data Spring hanya memvalidasi sebuah @ Query di boot dan Yang satu ini tinggal di perpustakaan bersama, di mana salah ketik mencatat setiap layanan.
· kamo-internal
Tab yang dapat terhubung, lema Kerja Tambah Anggota, dan tab riwayat lengkap
Setiap tab pada / account / view / {id} adalah rute nyata sekarang - / anggota, / sejarah dan sisanya adalah link seseorang dapat mengirim, bookmark, atau tanah di. Lama? tab = link mengarahkan dengan yang cocok. Setiap tab memuat data sendiri, jadi membuka akun tidak lagi menunggu setiap tab data sebelum menunjukkan semua itu. Tambahkan Anggota membuka "segera datang" roti panggang. Sekarang membuka yang sama pemetik Manajer bidang menggunakan, mencari setiap anggota organisasi bukan hanya staf - orang yang membayar untuk account sering tidak pada gaji. Orang-orang sudah pada akun tetap terlihat tetapi tidak dapat diambil dengan alasan, karena nama yang hanya hilang dari pencarian membaca sebagai pemetik patah. Set- as- primer dan hapus bekerja juga, hapus di belakang konfirmasi yang mengatakan apa yang dilakukannya dan tidak menghapus. Kedua meja dan tanda picker yang jenis orang setiap baris adalah. Without it a anggota dan anggota tim membaca identik dan daftar diam-diam menyiratkan semua orang di itu bekerja di sini. Baris anggota juga mengubah semua sekarang: jenis kunci yang diklaim titik akhir tidak pernah dikirim, sehingga setiap nama menunjukkan "---" dan tidak ada yang bisa dihapus - id baris kebutuhan menghapus panggilan adalah salah satu bidang ditemukan. Panel sejarah yang memimpin menjadi EntityHistories Panel, berbagi dengan yang baru tab riwayat akun: penyaring yang sama, paging yang sama, status kosong yang sama. Apa yang tetap dengan Setiap penelepon hanya di mana pakan berasal dari dan apa ids berarti.
· InitializerService
Buat ACCOUNT _ HISTORI
Cermin entitas AccountHistory dalam kamo- shared-library. Ditulis secara eksplisit daripada ditinggal ke ddl-auto karena materi baku: ID dan DATE _ CREAPTED membawa basis data baku sehingga sebuah masukan SQL biasa bekerja tanpa nama mereka, yang Hibernasi dihasilkan DDL tidak melakukan. Tidak ada kunci asing, sengaja - log outlives apa yang dijelaskan. Sebuah akun dapat digabung dan anggota dapat meninggalkan org tanpa menghapus gagal atau catatan apa yang mereka menghilang dengan mereka.
· SecurityService
Titik akhir riwayat akun, baris anggota asli, direktori semua anggota
Pandangan rekening sekarang dapat mengatakan apa yang telah terjadi pada rekening dan siapa yang ada di atasnya. - Setiap mutasi pada catatan rekening permukaan sejarah: menciptakan, lapangan edits, hapus, gabungkan (yang menggerakkan garis waktu pecundang ke korban bukan daripada menjatuhkannya), alamat, catatan, dan anggota menambahkan / menghapus / jalur primer. Dapatkan pelanggan / {uid} / history dan / history / filter cermin titik akhir memimpin permintaan permintaan, karena satu komponen di situs internal membaca keduanya. - mendapatkan anggota pelanggan mengembalikan apa yang dibutuhkan anggota baris: tampilan nama, avatar, gelar kerja, dan adalah Anggota Tim. Kedua jenis orang milik pada akun - yang membayar sering tidak pada gaji - dan tanpa bendera keduanya dibaca secara identik. - updateCustomer Fingers acceids as string (a unique _ rowid () past MAX _ SAFE _ INTEGER tiba bulat sebaliknya), membersihkan anggota utama ketika baris yang dihapus adalah milik mereka, dan tidak lagi bermutasi yang emoval-mapped koleksi di samping repositori menulis. - Pencarian direktori mengambil scope = semua, lebih dari setiap anggota org daripada daftar staf, dan setiap baris mengatakan yang jenis itu. Titik akhir ratchet belajar denyUnless: ia memuat sesi dan kembali 401 tanpa satu, atau 403 tanpa hak, sehingga penangan yang membuka dengan itu telah dilakukan Lebih ketat dari menjawab panggilan. Dua puluh masukan baseline hanya terdaftar karena scan tidak bisa melihat penjaga yang sudah ada.
· kamo-shared-library
Jejak audit untuk akun, dan direktori yang termasuk bukan staf
ACCOUNT _ HISTORI mencatat apa yang terjadi pada akun cara catatan LeAD _ HISTORY apa yang terjadi dengan memimpin - sengaja kolom yang sama, karena internal situs sekarang merender baik melalui satu komponen dan bentuk kedua akan dipaksa yang kedua. - AccountHistory + repositori + AccountHistoryService: snapshot / diff melalui sebuah field registry, plus one- off event for the things that are not field edits (sebuah anggota bergabung, memimpin atau urutan tiba, penggabungan). Rekaman tidak pernah melempar: audit menulis yang gagal tidak boleh mencatat operasi itu audit. - AccountHistory FieldRegistry adalah tempat tunggal lapangan dilacak dinyatakan. Menjalankan total sengaja tidak hadir - mereka bergerak sebagai efek samping dari perintah, yang sudah mendapatkan peristiwa mereka sendiri. - LeadService sekarang menulis account apos; s setengah link memimpin. Mencantol memimpin ke account adalah salah satu tindakan dalam dua jadwal, dan rekaman hanya satu berarti mana halaman yang Anda lihat adalah salah satu yang tidak menyebutkan itu. Sebuah memimpin bergerak antara Akun menulis untuk keduanya. - Catatan Layanan Komersial ORDER _ DIMAINKAN / _ BERUBAH Terhadap rekening pembelian. Diam ketika perintah tidak memiliki pembeli. - * * * * * * * * * * * * * * pencarian direktori saja lebar ke setiap anggota org, untuk pemetik yang tidak memilih rekan. Disimpan dalam langkah dengan TeamAnggota Repo.searchDirectory untuk istilah, termasuk Anggota Tim JOIN KIRI yang menjaga jabatan dan departemen dicari untuk staf dalam hasil. Hanya aktif dapat berbicara untuk baris yang memiliki status pekerjaan, jadi anggota tanpa satu lewat bukannya dibaca sebagai "tidak dipekerjakan". - Anggota. getFoneExtension: getPhone () flat ke nomor, meninggalkan ekstensi tidak bisa dihubungi dari luar kelas.
· kamo-internal
Konfirmasi sebuah jam masuk / keluar sebelum menulis pukulan
Jam navigasi meninju langsung dari klik. Setiap kontrol lain di bar itu adalah idempoten atau trivially undoable; sebuah pukulan adalah catatan upah yang sesudahnya hanya sebuah admin HR dengan alasan tertulis wajib yang dapat benar - dan tombol duduk satu piksel dari Logout. Ini sekarang meningkatkan TimecardPunchConfirmamDialog, dibangun dengan standar NewSupportRequestPopup dan sengaja bukan salinan itu: kartu itu adalah peringatan yang mengganggu, sehingga bernapas, menolak latar belakangnya dan lengan tombol terlambat. Yang satu ini diminta oleh klik, sehingga senjata sekaligus dan menutup Escape dan di latar belakang. Hijau untuk masuk, amber untuk keluar, karena dua hasil harus Disampaikan terpisah sebelum kata dibaca. Sentrepiece nya adalah jam berdetak ke KEDUA, dan salinan mengatakan langsung bahwa waktu dicatat adalah saat konfirmasi daripada saat di layar ketika memutuskan - titik yang bahwa ragu-ragu bebas dan tidak ada yang ditulis sampai kau bilang begitu. centang pertama selaras ke batas kedua, jadi pembacaan setuju dengan setiap jam lainnya pada layar anggota bukan mendarat dimanapun klik lakukan. Perilaku yang berubah dengan itu: - Kunci idempotensi dimainkan ketika dialog dibuka dan digunakan kembali untuk mencoba. Kunci per- percobaan adalah bug yang mencegah: permintaan yang kehabisan waktu mungkin juga telah mendarat, dan mencoba lagi di bawah kunci segar adalah pukulan kedua pada catatan upah. - Tindakan ini dibekukan pada waktu terbuka, sehingga jajak pendapat 60 membalik jam di bawahnya kartu (pukulan dari telepon mereka) tidak dapat mengubah pertanyaan mid- jawaban. - Flip optimis hilang. Itu ada karena pukulan dipecat dari klik; anggota sekarang menonton kartu yang tetap sampai server menjawab, jadi menduga negara hanya akan menjadi kesempatan untuk menunjukkan yang salah. - sebuah pukulan gagal memegang kartu terbuka dan mengatakan begitu. Diam-diam mengembalikan ikon adalah tidak ada cara untuk belajar tentang pukulan yang tidak terjadi - bahwa permukaan hari kemudian sebagai pengecualian kehilangan pukulan pada timecard. - switching identity (god- mode sudo, session switch) drops an open confirmation, yang jika tidak akan menulis pukulan anggota sebelumnya terhadap yang baru.
· kamo-internal
Penyaring status yang disebarluaskan di tempat yang dipilih
Tunda / Lengkap / Semua adalah tiga peer pendek yang cocok pada satu baris, jadi dropdown menyembunyikan dua dari mereka di belakang klik dan menghabiskan label dan 170px baik untuk mengatakan apa-apa. Pilihan tertutup juga tidak bisa menjawab "am I looking at semuanya? "tanpa membukanya. Segmentasi Filter dibagi: eksklusif ToggleButtonGroup, aksen diambil sebagai CSS var sehingga setiap permukaan menyimpan identitasnya, dan null yang eksklusif mode tangan kembali ketika segmen dipilih diklik ulang dibuang - sebuah filter selalu memiliki nilai. Tugas Pelatihan juga dapat. --training- brand: dua panel berbagi satu strip tab, dan salah satunya menjaga dropdown akan dibaca sebagai dua produk yang berbeda.
· kamo-internal
Geser navigasi ramai bukan menghancurkan pilihan
Menintip lebih banyak pilihan daripada nav dapat menunjukkan diperas ubin keluar dari bentuk: kedua strip adalah mentah overflow kotak dan ubin adalah anak-anak fleks dengan tidak renggang - menyusut mereka sendiri, sehingga bar atas didistorsi mereka (dan menyembunyikan nya scrollbar langsung, menelan pilihan tanpa tanda mereka ada) sedangkan rel menarik scrollbar 12px atas gradien sendiri. Kedua nav sekarang membuat pilihan bergerak mereka melalui NavOverflowScroller: ubin menjaga jejak mereka, berakhir panah dan tepi lembut memudar hanya pada sisi yang masih memiliki sesuatu untuk dicapai, dan strip dapat paged, diadakan, berputar, dilemparkan dengan momentum, atau diseret. Opsi halaman saat ini adalah scrolled kembali ke tampilan pada kedatangan, dan atas bar tetap krom tidak lagi berbagi kekurangan dengan satu anak yang dapat menyerapnya. Menarik pilihan dan geser strip adalah gerakan yang sama pada ramai nav, sehingga nav ramai menempatkan menata ulang belakang memegang pendek. Tahan itu menahan mousedown dari dnd-kit daripada menggunakan 'delay' batasan: batasan penundaan aktif pada timer saja dan dnd- kit menekan klik dari setiap tekan yang mencapai aktivasi, yang akan memiliki menghentikan setiap klik kecil-lambat pada opsi navigasi dari navigasi.
· kamo-marketing
Indeks halaman detail koleksi dalam 19 bahasa lebih
Sinkronisasi selesai, sehingga halaman ~ 2.400 detail yang noindeks untuk memiliki Salinan tubuh Inggris sekarang memiliki terjemahan nyata dan dapat diindeks. Diukur di seluruh 21 locales: setiap satu tanah antara 0.0% dan 8,8% dari koleksi nilai identik dengan bahasa Inggris, kecuali sw dan ta tepat 100.0% - mereka berdua tidak memiliki penyedia, sehingga Layanan Penerjemah mengembalikan teks sumber dan menjalankan menulis bahasa Inggris kembali di bawah penampilan sukses. COLLECTION _ CONTENT _ LOCALES karenanya diturunkan, tidak terdaftar: setiap iklan lokal minus seperangkat no- penyedia. sw menyimpan nodex pada halaman detail saja - bundel dasarnya asli Swahili, sehingga halaman statis tetap indeks - dan ta tidak ada direktif robot sama sekali, karena sudah canonicals ke Inggris asli dan stacking noindeks di atas akan mengirim dua sinyal bertentangan tentang satu bagian dari konten.
· kamo-shared-library
Anggota perterlambat rollup untuk matriks compliance
The HR Overview 's matrix branches on' row.overdured > 0 ', but the legal and training rollups dikirim dengan bidang tersebut hardcode ke 0 - sebuah cabang yang bisa tidak pernah diambil, sehingga dua domain hanya bisa menunjukkan amber atau hijau dan "terurut lebih buruk -pertama" menurun. (anggota, status) histogram tidak dapat menjawabnya: itu tidak membawa dueAt. Jadi masing-masing repositori memperoleh sebuah jumlah grup yang predikat adalah karakter-for- karakter satu di countOverdueForOrg, ditambah GROUP OLEH TIM Anggota. Berbagi predikat adalah apa yang membuat angka per-anggota sum ke jumlah tingkat org- yang diberikan di atas mereka. Hanya metode Query. Tidak ada perubahan entitas, tidak ada DDL, versi tetap 1.5,0. Penelepon tetap memiliki set terbuka, dan keduanya TIDAK sama: lulus hukum OPEN _ STATES, pelatihan melewati REMINDABLE _ STATES. AWATING _ GRADING terbuka tapi berutang anggota apa-apa, dan menghitung terlambat akan mereproduksi hukum module 's AWAITING _ OTHERS bug yang mengatakan kepada setiap waktu anggota mereka minggu terlambat, selamanya.
· kamo-internal
Bangun tab Overview sebagai laporan atas empat lainnya
Konsol pelaporan lebar penuh: baca-keluar kepala, empat tiang tab, perlu perhatian buku besar, compliance matriks tenaga kerja dan sebuah aktivitas rel. Baca saja - setiap tindakan adalah link mendalam ke dalam tab memiliki.
· kamo-internal
Overview perhatian buku besar, compliance matriks dan rel aktivitas
usuamNama sumber / api / keamanan / anggota / nama daripada menebak singkat ... / org- bentuk konfigurasi: org- config tidak pernah mengembalikan daftar anggota (dikonfirmasi dengan membaca LegalPackageDialog.tsx dan TrainingAssignDiag.tsx, yang mengurai hanya departemen / jobTitles dari itu), sementara / anggota / nama adalah titik akhir telah dibangun untuk resolusi id-to-name dan telah menggunakan cara yang sama dengan hipotek AppsAppsAppi.membernames ().
· kamo-internal
Overview masthead dan empat tiang tab
· kamo-internal
Batasi pengait data dan primitif visual bersama
fetches use HrOverview kehadiran + docs ringkasan dengan alosetled jadi satu degrade layanan mati hanya bagian sendiri; ia melewati fetches sepenuhnya untuk daerah visibleOverviewSections () mengatakan anggota tidak dapat melihat. The Primitif (Countup, ProgressRing, StackedBar, StatePip, Figure, SectionShell) adalah blok bangunan terbagi daerah overview render dengan, semua gerakan yang dijaga oleh Gerakan UselecedMotion dan EASE _ HOUSE.

Alam semestamu menunggu.
Mulai gratis dalam beberapa menit. Tambahkan produk kapanpun Anda siap — tidak ada migrasi, tidak ada login baru.
Gratis selamanya — tidak diperlukan kartu kredit