Saltar al contenido
KAMOUniverse

Changelog

Qué hay de nuevo.

Cada mejora de la plataforma, a medida que se envía.

  1. · kamo-shared-library

    El dominio de la nómina-proveer detrás del motor de la tarjeta de tiempo

    Añade la columna vertebral persistencia para conectar las tarjetas de tiempo de una organización a sistema de nómina de terceros: la conexión y su configuración cifrada por-org, la subvención OAuth, el enlace miembro-proveedor-empleado, el mapa de código de ganas, y los dos registros solo a apéndice (incupuntes de intentos y sincronización) que hacen una sincronización explicable después. Mantenida dentro com.kamo.z.shared.hr.timecard en lugar de un nuevo paquete en propósito: un nuevo paquete compartido debe añadirse a tres líneas explícitas separadas Habilitar las listas deJpaRepositorios, y omitir que uno aborta un contexto de servicio o, en KamoInitializer, aborta la carrera mientras todavía reporta BUILD SUCCESS. Notas en la forma: - PayrollProviderType reutiliza el vocabulario simbario ya documentado ******************* (ADP-WFN, PAYCHEX, GUSTO, ...). Un segundo Ortografía para el mismo vendedor dividiría el historial de exportaciones sin error A cualquier parte. ADP-RUN y QUICKBOOKS se mantienen porque la pantalla de exportación de nómina los ha ofrecido desde que se envió, por lo que las filas en vivo pueden llevarlos. - Los enlaces de los empleados son clavedos por el proveedor, no por conexión, así que conmutando El proveedor y el cambio de espalda no tiran el trabajo de mapeo. DOS limitaciones únicas: una detiene a un miembro que mantiene dos enlaces, el otro se detiene dos miembros que reclaman un empleado del proveedor que uno impide un doble pago. - PayrollDispatch y PayrollSyncIssue son WORM. Una transmisión de nómina intento es un evento de dinero; "lo enviamos, entonces lo enviamos de nuevo" es el hecho de que a las necesidades de reconciliación. - Credenciales viven en una mancha de configuración encriptada en lugar de una columna por campo, por lo que añadir un vendedor no es un cambio de esquema que vuelva a transportar todos los servicios. RoleRightType gana MANAGE-PAYROLL-PROVIDER (199) . legado MANAGE-PAYROLL (40), que hoy no tiene nada y ya está en manos de Números desconocidos de afiliados; reutilizarlo entregaría nómina de terceros credenciales a cada soporte derecho de revisión de tarifas en la bota que la envió. PlatformOAuthProviderType gana los siete proveedores de nóminas donde Kamo tiene uno registro de socios (ids 11-17). Dayforce, Workday y UKG emiten credenciales por cliente y deliberadamente no consiguen ninguna constante: la pantalla de la plataforma hace un tarjeta para cada constante, por lo que uno para ellos sería un formulario que ningún operador podría Rellena. También corrija una afirmación rancio en BillingDelegationModeTest: commit 9276487 De hecho deliberadamente REQUIRES-APPROVAL permite a los grupos (la exclusión hizo la camino de aprobación inalcanzable) pero dejó la prueba afirmando el viejo comportamiento, así que La suite ha estado roja en general desde entonces. Esquema aplicado y verificado en Yugabyte antes de este empujón.

  2. · kamo-internal

    Una pared en "ahora", y una tarjeta que explica un puñetazo cancelado

    Nadie puede registrar el tiempo que aún no ha trabajado. Arrastrando un borde, deslizándose un todo el lapso, empujando con las teclas de flecha, el imán, el bloque de clic derecho y el manual añadir diálogo de parada en el minuto actual en la fila de hoy, y un El día futuro no acepta nada en absoluto. La parte de hoy que no ha ocurrido es eclosionó, porque "no puedes arrastrar una píldora aquí" tiene que ser visible ANTES de alguien control, no por regla general. El servidor ya rechazó un golpe insertado o corregido pasado ahora, que es exactamente por qué el cliente necesitaba esto: sin la pared el arrastre tuvo éxito, el píldora se sentó allí mirando escenada, y toda la salvada fracasó al final con un Mensaje sobre un puñetazo que el miembro no pudo encontrar. El imán tiene la misma pared. Un puñetazo dejado en el futuro por un dispositivo equivocado El reloj era un blanco legítimo, por lo que se podía tirar de una ventaja hacia adelante sobre él. y tierra en algún lugar la salvada se negaría. Y la tarjeta de confirmación ahora permanece abierta cuando un ponche CANCELS OUT el anterior, que TimecardService comenzó a hacer esta mañana para cualquier inversión dentro de un minuto. Sin eso el miembro presiona un botón, ve cómo el estado se devuelve exactamente a donde empezó, y concluye razonablemente que el botón está roto. En que digan que la tarjeta deja caer a su recolector y su copia de acción, muestra una frase y un botón, y deja de descartar el telón de fondo. A menudo sigue un confirmamiento no debe cerrar la única explicación de lo que sucedió.

  3. · kamo-internal

    Dar el apoyo y las ventanas sociales el compositor de la charla de miembros

    Un boleto de apoyo y un DM social son lo mismo que un chat de miembros sesión con mensajes en él, pero fueron respondidos a través de un desnudo campo de texto. Un agente podría ser enviado una captura de pantalla por un cliente y no tenía forma para enviar uno de vuelta: sin botón de fijación, sin gota de arrastre, sin pasta, sin emoji, y un entradas que no crecerían más allá de una línea. Ambos ahora hacen el Compositor de la charla de miembros, así que la maquinaria de carga, el bandeja de acceso, el panel de transferencia, el picker de emojis y Enter-to-send son una implementación en los tres. Los adjuntos recibidos y enviados se entregan las burbujas a través de la misma AttachmentChip. Dos cosas que la ventana de apoyo de pestañas obligó a salir a la luz: - Los borradores están aparcados por conversación (useDraftParking). Un compositor sirve varias entradas y los mensajes de envío a quien esté en pantalla, así que un borrador se fue en la caja están las palabras de un cliente dirigidas a otra. Descarte después de un envío toma la llave con la que se inició el envío, o cambiar de pestañas en pleno vuelo limpiaría la respuesta se mecanografiada a otra persona. - También se celebran adjuntos por sesión. Una lista plana puso el de un cliente archivo en bandeja de otro y subido allí; subirTodo ahora se dirige a la sesión para los que se escenificaban los archivos, cualquier ficha que se vea cuando aterriza. Las respuestas sociales se limitan a un archivo de 10 MB: un mensaje lleva un solo MediaObjSocialRef, por lo que un segundo accesorio podría almacenarse y nunca transmitirse, y 10 MB es el techo de proveedor más apretado que enviamos a través. Rechazándolo en el Compositor la late perdiéndolo en silencio. Un envío fallido se informa por separado de una carga fallida. los archivos son El mensaje no lo es, y el borrador sigue ahí para intentarlo de nuevo.

  4. · kamo-internal

    La velocidad marca lista las extensiones del departamento de org

    La pestaña envió seis entradas inventadas . Equipo de Ventas en 1001, una Sala de Conferencias zumbido permanente, así que llamar a uno llegó a lo que le pasó a responder que extension, y las insigniques del BLF reportaron presencia a la que nada estaba suscrito. Ahora lee /api/security/departments y enumera cada departamento que tiene la org dado una extensión, ordenada por título, con el número exterior debajo cuando uno está listo. Los estados de carga, vacíos y re-error re-intentables sustituyen las fichas que Nunca podría estar vacío. El GET es org-scoped y no necesita ningún derecho, y se dispara sólo una vez que la pestaña se abre por primera vez.

  5. · kamo-internal

    Chat ancho, social, ai-chat y componer ventanas al tamaño de soporte

    La ventanilla de entrada de apoyo se abre en 460px mientras chat de los miembros, chat social, chat de IA y el compositor de correo electrónico se sentó en 360-420. El mismo muelle, el mismo tipo de contenido. ahora compartir el 460px de la ventana de soporte por defecto (y un piso de 420px para el resizable unos), por lo que una fila de ventanas de herramientas abiertas se alinean en lugar de saltar de escaleras.

  6. · kamo-internal

    Mostrar mensajes invistos en cada fila de colas, no sólo se unió a los

    La insignia y el tinte de la fila ya estaban aquí, simplemente nunca fueron poblados. para la mayoría de la lista. getUnreadPara leer sólo el mapa en vivo por sesión no leído, que se deriva de la propia fila de membresía del espectador, por lo que un boleto no tenía Unido nunca podría encenderse. En esta cola que es la mayor parte de ella, y la Billetes no asignados que nadie ha recogido son la mayoría y las filas que Lo más necesita la bandera. Ahora prefiere el mapa en vivo, que es autorizado para las conversaciones que el espectador está en y actualizaciones sobre STOMP en el momento en que leen o una respuesta aterriza, y cae volver al conteo de entradas por boleto del servidor para todo lo demás. Los dos no pueden ser fusionadas a ciegas: el mapa en vivo solo lleva sesiones que aún no han leído mensajes, así que "leírse hace un segundo" y "nunca contados" son indistinguibles en de ahí el pequeño conjunto de conversaciones abiertas durante esta visita, que se mantiene a la fila que el miembro está leyendo actualmente de permanecer iluminado hasta la próxima recarga. La lista también se reelea cuando se mueve el apoyo pendiente de recuento. Por un conversación que el espectador no se ha unido no hay canal en vivo que nunca Corre, la instantánea. El tema no leído sólo llega a la gente en la sesión, que en una cola no es nadie y pendienteCount es la única señal que sí alcanza todos los miembros con capacidad de apoyo de la zona.

  7. · MediaService

    Stamp invisible cuenta en la lista de entradas, y mantenga la cola en vivo

    getTickets ahora carga a granel un conteo de mensajes no sevisto por fila para el llamante, al lado el visitante rema que ya se carga de esa manera, y getTicketDetail calcula su propio antes de la marca del lectorAsLea las tierras para que la ventana pueda mostrar lo que llegó mientras estaban fuera en lugar de un número que el acto de abrirlo ya se había centrado. También cierra la brecha de señal que dejó la cola rancio. Un mensaje de apoyo conversación mueve la cola para cada miembro con capacidad de apoyo de la organización, no sólo la gente en esa sesión - que es exactamente quien la sesión no leí El tema NO llega. La emisión de cuentas pendiente ya se despidió cuando un enviado al visitante de la charla pública y cuando un agente señió de lectura; un miembro que respondía de Dentro de la aplicación estaba el agujero, por lo que una conversación de apoyo dentro de la aplicación podría ganar mensajes sin nada que digan a la pantalla de ningún agente que vuelva a mirar. SoporteUnseenCountSqlPales pins de la consulta. Cada cláusula en ella es carga y ninguno de ellos es visible en una construcción pasajera: equivocarse y la cola sigue representando, sólo con conteos que son silenciosamente falsos.

  8. · kamo-shared-library

    Cuenta mensajes invistos para un espesor que no está en la conversación

    Unread siempre se ha derivado de la propia fila de MediaSessionMember del espectador, así que una conversación que no se habían unido no produjo ningún recuento en absoluto. En una cola de apoyo que es la mayor parte de 27 de las 37 entradas en vivo no están firmadas, y 26 de ellas tiene exactamente un miembro de la sesión, la persona que pidió ayuda. Esos son precisamente las filas que más necesitan bandera, y ellos fueron los que estructuralmente no podía portar una bandera: nadie se les había unido, así que no había Lector para que no fueran leídos. countUnseenBySessionForViewer responde a la pregunta que una cola hace en su lugar. El LEFT únete a la membresía es todo el truco: sin fila de membresía no hay puntero lector, así que cada mensaje entrante cuenta, que es la verdad - el espectador No ha visto ninguno de ellos. Una consulta por página, que coincide con cómo las filas de visitantes al lado ya está cargada a granel. Se excluyen los eventos del sistema. Un cambio de estado o una reasignación es la contabilidad sobre la conversación, y contarla ilumina filas donde nadie ha nada decía nada peor que ninguna placa en una pantalla cuyo trabajo está decidiendo lo que necesita una respuesta. SupportTicketDTO.unseenCono está poblado en la lista y el detalle se lee y se deja el servicio null en todas partes, porque "no sembrado" es un hecho sobre un espectador y un número inventado para un llamante que no preguntó sobre uno simplemente estaría equivocado.

  9. · kamo-internal

    Borrar, imanes, un menú con el botón derecho, y un reloj que pregunta qué

    Seis adiciones al gráfico de época y el reloj nav. DELETE elimina la píldora enfocada. Backspace también, porque en un Mac la llave etiquetados como "borrar" ES Backspace y ofrecer sólo Eliminar significa el acceso directo lo hace no existir en un portátil. Vacía los dos golpes del lapso, así que borrando una comida deja el trabajo a ambos lados de la misma continua, que es lo que significa para la la comida no había pasado. Escenificado como cualquier otra edición; nada está escrito hasta que ahorre. Una GUIDELINE sigue el puntero a través de cada fila, con el minuto en que está en un chip en la parte superior. Su trabajo es decir dónde aterrizaría un clic, y ese es el el mismo minuto todos los días en el período. Medido fuera de un elemento de pista más bien que el contenedor, cuya caja incluye el nombre diurno y las columnas totales. reportaría un minuto por su anchura, que el miembro no puede ver A la derecha-clicidad en cualquier lugar en un día abre un menú que deja caer un bloque de 15 minutos de tiempo, comida o descanso donde estaba el puntero. Dos golpes, no uno: un lapso es un par, y un solitario abridor dibuja una píldora corrió hasta la medianoche. Tenga en cuenta que una comida bloque OPENS con MEAL-OUT - una comida se registra como reloj de trabajo y vuelta Entrar y conseguir que ese par hacia atrás invierta el día. MAGNETS: un borde arrastrado a los cinco minutos de otro puñetazo se mete en su exacto minuto, sorteando deliberadamente el intervalo de un minuto que mantiene la pinza. Eso brecha detiene a un borde que cruza a su vecino; aquí toda la intención es para los dos para reunirse, y una ventaja que sólo puede aterrizar un minuto corto nunca puede cerrar una brecha. Cinco minutos en el zoom de quince días es un par de píxeles, así que sin un imán "Hacer este descanso cuando empiece el siguiente" es una tarea que nadie puede completar con un puntero. Y cuando el imán aterriza dos tramos del borde amable SAME a borde, ellos MERGE en el mismo gesto: el reloj y el reloj que ahora comparten una parada de minutos ser cierto, y ambos están anulados. Diferentes tipos nunca se fusionan. Exactamente cuando una comida comienza no es un solo espacio, son las dos cosas que en realidad sucedió. Esto necesitaba el tipo de graphPunches para empatar-break en el original minuto: dos bordes coincidentes deben mantener su orden cronológico o emparejamiento los cambia, produce un lapso de ancho cero y un abridor extraviado, y la píldora desaparece Por el momento los dos se encuentran. THREE PILL COLOURS, y distinto por más de tono. primaria, comida con la quebrada en el ámbar de HRS, romperse a rayas en violeta. Color solo falla el 8% de los hombres con una deficiencia rojiverde y falla a todos en un proyector; alguien debería ser capaz de distinguir una comida no pagada de un descanso pagado en un Impresiones en blanco y negro. EL NAV CLOCK ASKS Qué PUNCH. "Reloj" es tres actos diferentes, y lo que está en oferta depende de dónde esté el miembro: trabajando, pueden terminar el cambiar, ir a una comida o tomar un descanso; en una comida o un descanso, volver es el De forma predeterminada y terminando el cambio sigue ahí porque la gente se va directamente de la comida. Derrosión de eso en un botón es cómo alguien termina su día cuando querían ir a almorzar una hora sin pagar que no vuelven y un Falta de excepción en el camino. La carta se vuelve a-skins a la acción seleccionada en Los mismos tres colores que usa el gráfico, dice cuánto tiempo han estado en su estado actual, y el punto de navegación ahora informa cuál de los tres estados es. Un ausente Estado del servidor se lee como "el booleano es todo lo que tenemos", no como OFF: leyéndolo como OFF ofrecería "reloj" a alguien a mitad de turno para el longitud de la ventana de despliegue.

  10. · SecurityService

    Retransmita el vacío de ponche

    Passthrough para POST /punches/-id-/void, la tecla de eliminación del editor y la la maquinaria detrás de la fusión de dos lapsos adyacentes. La misma autoridad que /correcto, y por la misma razón: un EMPLOYEE puede anular su ponche propio, porque un miembro que no puede decir "ese doble grifo nunca pasó" ha No hay manera de corregir un registro al que son los únicos testigos. Lo que no pueden hacer es hacer que cuente - el vacío aterriza en una tarjeta de tiempo que todavía se mueve a través de la cadena de homologación, y la razón es obligatoria en todos los caminos. El actor está estampado de la sesión, nunca del cuerpo; un actor abastecido por el cuerpo es un Firma suministrada por el cuerpo en el historial salarial de otra persona. Dos pruebas, tirando en direcciones opuestas, porque este servicio funciona cualquier...permita todo () con laminado a mano por mano auth: debe rechazar un el puñetazo de colega sin llegar nunca al relevo, y debe admitir el No tienen ningún derecho.

  11. · kamo-shared-library

    Un ponche se puede anular sin ser borrado

    Cuatro columnas nulas y una segunda transición de la unidad de escritura en TimecardPunch. A el ponche nunca debió haber existido un doble golpe en el reloj, un ruptura abandonada, o la costura entre dos lapsos que el editor de la tarjeta de tiempo tiene sólo fusionadas en una. Eso no es una corrección ("esto sucedió, en un tiempo", que deja una fila de reemplazo) ni una eliminación: reemplazadoByunchId significa "leí esta otra fila en su lugar", y aquí no hay otra fila. La fila sobrevive, anulada, con su autor y su razón a su lado. Un salario registro que se puede hacer para olvidar un puñetazo es exactamente la insuficiencia que cambia la carga para el empleador bajo Anderson v. Mt. Clemens Pottery, así que el único Lo que un vacío elimina es el efecto del punch en el cálculo. enforceWorm() permite anularEn los mismos términos que reemplazadoByPunchId a un valor, una vez y rechaza un vacío sin razón. Novoiding en su lugar es deliberadamente imposible: reinstaurar un puñetazo significa insertar uno, que se va su propia fila y su propia explicación. **************** no es un comodidad. La variante sin filtrar es errónea para decidir el estado del reloj: a fila superpuesta mantiene su instante, por lo que un reloj corregido hacia atrás Deja la hilera muerta últimamente por ocurridoAltUtc, y una fila anulada se queda última hasta que algo más nuevo sea golpeado. Cualquiera de las respuestas "estás en el reloj?" de un registro que ya no existe. Secuenciado por la regla de cambio de entidad: compartido instalado localmente, KI migración escrita y RUN contra 192.168.4.22:5433 con los cuatro ALTER aplicado, y sólo entonces esto es empujado - por lo que ningún servicio puede construir contra un esquemas sinmigados.

  12. · InitializerService

    Las columnas vacías en hr.timecard.punch

    Espejos cuatro nuevas columnas nulas en la entidad TimecardPunch. Un vacío es ni un borrado ni una corrección: dice que el puñetazo nunca debió haber existido Un toque doble en el reloj, una rota abandonada, o la costura entre dos tramos el editor se ha fusionado en uno. SUPERSEDED-BY-PUNCH-ID no puede expresarlo, porque esa columna significa "leer esta otra fila en su lugar" y no hay otra fila. Los cuatro son NULLABLE, que es lo que hace esto seguro en una mesa poblada: CockroachDB rechaza ADD COLUMN ... NO NULL en una mesa no vacía y rueda el toda la declaración, por lo que un marcador de cambio de NO NULL sería registrado como una WARN, saltó, y en silencio. Van en este corredor, por delante de los índices y REVOKEs ya lleva, por la razón "Order(0) existe: el momento compartido mapea una columna, cada corredor que carga la entidad puñetazo lo emite en su SELECT, y un la columna-adorden ordenada tarde nunca se ejecuta en absoluto - un lector anterior muere en "columna no existe" y se lleva el inicializado con él. Corre contra 192.168.4.22:5433, los cuatro aplicados.

  13. · kamo-internal

    Mostrar el panel de a bordo del mercado cuando no existen mercados de CRM

    /leads hizo la cuadrícula de plomo con una barra de pestaña de mercado vacía, deshabilitada para un org que nunca había configurado un mercado de CRM. Ahora muestra el mismo panel de a bordo /Comercio muestra para mercados de comercio faltantes - extraídos a MarketOnboardingEmptyState por lo que los dos se quedan idénticos impulsados por el lidere CRM mercados de Configuraciones - Gerente de Relaciones con Clientes, no de los mercados de comercio, y apuntando a la pestaña Mercados y Campos de CRM. Los pasos y la configuración CTA se muestran sólo a los miembros que pueden administrar CRM Ajustes; todos los demás consiguen la copia existente de vuelta-relatada.

  14. · kamo-internal

    El gráfico de época, y una tarjeta de tem horario que edite como borrador

    Reemplaza la línea de tiempo de un día en **************** por un todo el período de pago, y cambia cómo se siente la edición. Las píldoras no llevan texto. Solían llevar sus propios tiempos, y una etiqueta es 60px de ancho por mucho que sea la cosa que describe fue un descanso de diez minutos y un El turno de cuatro horas dibujaba la misma píldora, y la única propiedad una línea de tiempo tiene que un la mesa no (protomo significa duración) fue la propiedad que tiró. Ambos veces ahora en vivo en una punta de herramienta que nombra el comienzo, el final y el lapso entre ellos, y sigue el borde siendo arrastrado con una lectura que se actualiza como él movimientos. Las esquinas son 2.5px: suficiente para quitar la dureza mecánica, no lo suficiente para redondear una píldora de cinco minutos en una pastilla. Las etiquetas de la cabecera de la hora cada hora, cada uno girando un cuarto de vuelta en sentido contrario a las agujas del reloj Así que los veinticuatro encajados. Cuatro etiquetas de seis horas de diferencia no pueden decirle a nadie si una píldora comienza a las 9 o a las 10, que es la única pregunta que la cabecera está ahí Responde ahora que las píldoras no están marcadas. Todos los días en el período se pone fila, INCLUYando días que aún no han sucedido. Un gráfico que sólo dibuja días con datos no puede mostrar un ponche perdido, y el falta de ponche es lo más común malo con una tarjeta de tiempo: la brecha es la encontrar, y un hallazgo necesita una pelea para aparecer. Los días futuros se eclocian más bien que simplemente atenuado "no" y "nadie registró nada" son diferentes hechos. Arrastras al MINUTE. El chasquido de cinco minutos no pudo expresar 9:02, así que un reloj que era de dos minutos fuera no se podía corregir y cada tiempo corregido adquirió una redondez que leía como una estimación. El redondeo es una política de nóminas motor se aplica con la información de neutralidad detrás de él; un control deslizante no debe aplicar una Segundo, invisible. Teclas de flecha empujan un minuto, Cambio por quince, Alt toma un extremo por sí solo, un puntero no puede expresar un minuto en una pista donde un minuto está bajo un píxel. Y la edición es ahora un borrador. Arrastramiento utilizado para abrir el diálogo de la razón obligatoria en cada lanzamiento: fijar un día con tres golpes equivocados significaba escribir tres explicaciones, cada una variante de "el reloj estaba mal", y una verdadera protección en Anderson v. Mt. Clemens Pottery convertido en una caja que la gente mecanografió "corrección" para que desaparezca. Una protección que todo el mundo aprende a derrotar No protege a nadie. Edita ahora escenifica libremente y se recoge una explicación sobre ahorrar - todavía obligatorio, todavía registrado en cada golpe de puto los toques de salvación, pero pregunté una vez, cuando alguien realmente sabe lo que hizo. Nada está escrito. hasta entonces. Cambios de apoyo: - app/lib/timecardGraph.ts tiene cada decisión que el gráfico toma a la pareja, apretar, chasquear, el turno instantáneo seguro DST como funciones puras, porque a decisión sobre un récord salarial que solo se puede comprobar arrastrando algo con un ratón es una decisión que nadie comprueba. 34 pruebas. - tratchRange cae de nuevo a las lecturas diarias en un 404 para que la pestaña no se rompa para quien lo cargue entre el despliegue de SecurityService y éste. - las vueltas de campo a tiempo a través de las paredes locales. Se convirtió en una UTC cortar en una entrada de fecha-local y reparaste el resultado como local, así que cada visita al campo movió el tiempo por la zona compensada en silencio.

  15. · SecurityService

    Retransción el rango de época del editor

    Passthrough para GET /members/-id-/range, el gráfico de época se lee. de/to son enviada sólo cuando esté presente para que TimecardService pueda resolver la propia paga del miembro período de reenvío "?from=&to=" se uniría a las cadenas en blanco aguas abajo y derrota silenciosamente ese default para cada org con un calendario de pago. La identidad se comprueba con resoluciónRole y no tiene derecho, exactamente como /día ya. Los dos requisitos tiran en direcciones opuestas y una puerta derecha se consigue sólo uno de ellos: no debe convertirse en una manera de leer las horas de un colega, y debe admitir el sujeto que no tiene TODO, porque un miembro en el El nivel no tiene todos derechos y aún tiene derecho legal a su propio registro. TimecardRangeAuthTest cubre ambas direcciones más el edificio de la consulta, porque este servicio ejecuta cualquier...permitAll() con laminado a mano por mano auth. un mapeo que olvida su cheque es accesible desde internet público a través de APIService va comodín hacia adelante.

  16. · kamo-internal

    Elete una conversación de apoyo cuando alguien conteste en ella

    Cerrar una ventana de apoyo no está saliendo de la conversación, pero fue tratado como Si lo fuera. ChatNotificationListener regresó temprano en cada APOYO .TICKET notificación correctamente, ya que un billete no debe abrir una ventana de chat, sino dejó apoyo sin reabrir en directo. Quienquiera que cerrara su panel, la mayoría a menudo la persona que pidió ayuda una vez que le había pedido, simplemente nunca vio el respuesta. Ahora abre la ventana de soporte en su lugar, dirigida por el identificador del boleto notificación lleva; la tienda de herramientas dedupes en ticketId, por lo que una ventana ya levantada está enfocado en lugar de duplicado. AutoOpenUnreadSupportChats es la mitad duradera, para una respuesta que llegó mientras ellos fueron firmados. El empuje en vivo es el núcleo NATS sin repetición. Deliberada deliberadamente separado de AssignedTicketOpener: que uno responda "este trabajo es ahora tuyo", este responde "alguien te dijo algo", y para un solicitante el primero Nunca pasa nada. Ambos reconocen a través del mismo disco autoabierto el El chat utiliza el camino, por lo que un segundo dispositivo no repite lo que el primero ha mostrado. ChatsList ahora saca boleto directamente del marco de actividad. Sintetizando un fila de apoyo sin una realizada una fila que no se pudo abrir, por lo que la lista había para tirar el marco y volver a leer toda la página para conseguirlo.

  17. · MediaService

    Una conversación, muchas manos. . . . . . . . . . . . . . . . . . . .

    Un boleto de apoyo es trabajado por quien está ayudando, no sólo por quien sea Actualmente estampado con. Asignación decide a quién se ofrece la obra y En la lista aparece; nunca fue destinado a ser un candado en la conversación. La apertura de un boleto se une a su sesión de los medios de comunicación. Antes, un agente que abrió un El billete de la cola que no estaba asignado a ellos podría escribir en él. rechazó el mensaje, pero no eran miembros de la sesión, así que el la conversación nunca apareció en sus charlas -. Soporte, ninguna respuesta nunca llegó ellos, y el lego "es mi agente aquí" no los contó. Ellos eran Hablando en una habitación en la que no estaban. Quién puede unirse es la misma población que ya puede ver el billete en la cola: la gente que ya está en la conversación, más ACCEPT-SUPPORT-TICKETS o MANAGE-SUPPORT en el org asignado. Todos los demás. ahora se rechaza este punto final previamente servido cualquier boleto en la plataforma a cualquier miembro autenticado que pudiera adivinar un UUID, a través de organizaciones, y unirse a la puerta habría ampliado eso de leer la conversación de un extraño a estar escrito en ella. Cada mensaje ahora lleva un nombre. SenderName se leía directamente Miembro.usernameAlias, un apodo opcional que no se fija en casi todos los miembros, para que serializado como nulo y el chat haya hecho mensajes sin atribución en A todos. Eso es peor en un boleto de apoyo, donde puede estar más de un agente Responder y el cliente no tiene otra manera de decir quién está hablando con ellos. Nombres de visualización de miembros ya utilizados en otras partes de este controlador. el nombre real. La misma lectura cruda estaba en blanco a nombres de agentes asignados, boleto actores de historia, actores de sistemas, el aviso de la disponibilidad de agentes y la tabla de informes. Una ventana cerrada ya no significa una respuesta perdida. La notificación de mensajería entrante lleva el identificador de entrada, para que el cliente pueda levantar la conversación que está diciendo y /esiones/apoyo/auto-abierto es la mitad duradera para una respuesta que Llegó mientras te firmaban la contraparte del lado del mensaje de asignado-desierto, que sólo cubrió el trabajo cambiando de manos y así nunca disparó por la persona que pidió ayuda. Pruebas: ChatListNativeAliasCasePelfile pincha la cita de la columna de las consultas de alimentación alias, que nada más puede atrapar. El modo de fracaso es un nulo silencioso, no un error de tipo o una excepción. SupportAutoOpenHqlTest analiza la nueva consulta en contra el modelo de entidad real, ya que Spring Data sólo valida una "Query at boot" y Este vive en la biblioteca compartida, donde una típa derriba todos los servicios.

  18. · kamo-internal

    pestañas eslabables, un miembro de Agregar en funcionamiento y una pestaña de historia completa

    Cada ficha en /account/view/.id es una ruta real ahora /miembros, /historia y la Los enlaces son enlaces que alguien puede enviar, marcar o aterrizar. Viejo ?tab= enlaces redireccionales a la a juego. Cada pestaña carga sus propios datos, por lo que la apertura de una cuenta ya no espera los datos de cada pestaña antes de mostrar nada de eso. Add Member abrió un brindis "próximamente". Ahora abre el mismo seleccionador el Gerente usos de campo, buscando a cada miembro de la organización en lugar de sólo al personal. la persona que paga por una cuenta con frecuencia no está en la nómina. La gente ya en la cuenta manténganse visibles pero insólitas con la razón, porque un nombre que es Simplemente falta en una búsqueda se lee como un recolector roto. Establecido-tal como-primario y eliminatorio trabajar también, eliminar detrás de un confirmaje que dice lo que hace y no elimina. Tanto la tabla como la marca de picker que tipo de persona es cada fila. Sin ella a miembro y un miembro del equipo leen idénticamente y la lista implica tranquilamente a todos los que están en funciona. Las filas de miembros también rinden en absoluto ahora: el tipo reclamaba las llaves el endpoint nunca ha enviado, así que cada nombre mostraba "--" y nada podía ser removido. la id de la fila que la eliminación de las necesidades de llamadas era uno de los campos inventados. El panel de historia de la visión principal se convierte en EntityHistoryPanel, compartido con el nuevo account H pestaña Historial: mismos filtros, misma paging, los mismos estados vacíos. Qué queda con cada llamante es sólo de donde viene el alimento y lo que significan sus ids.

  19. · InitializerService

    Crear ACCOUNT-HISTORY

    Espejos la entidad de la CuentaHistoria en la biblioteca compartida de kamo. Escrito explícitamente en lugar de dejar a ddl-auto porque los predeterminados importan: ID y FECHA-CREATED llevar la base de datos predeterminada para que un inserto SQL simple funcione sin nombrarlos, que Hibernate ha generado DDL no lo hace. No hay llaves extranjeras, a propósito, el log sobrevive lo que describe. Una cuenta se fusiona y un miembro puede salir de la org sin la falta de eliminación o el registro de lo que desaparecían con ellos.

  20. · SecurityService

    endpoints de la historia de la cuenta, filas de miembros reales, un directorio de todos los miembros

    La opinión de la cuenta puede decir ahora lo que ha pasado con una cuenta y quién está en ella. - Cada mutación en la superficie de la cuenta registra la historia: crear, editas de campo, suave eliminación, fusión (que mueve la línea de tiempo del perdedor en el superviviente más bien que dejarlo), direcciones, notas y el miembro añadir/eliminar/líderes/ruegos. GET clientes/-uid-/history y /historia/filtros reflejan los puntos finales de plomo solicitud de solicitud, porque un componente en el sitio interno lee ambos. - getCustomerMembers devuelva lo que una fila de miembros debe ser renderizado: la pantalla nombre, avatar, título de trabajo, y es miembro del equipo. Ambos tipos de persona pertenecen a un la cuenta de la que paga con frecuencia no está en la nómina y sin la bandera los dos leían de forma idéntica. - actualizaciónCustormerLos miembros aceptan ids como cuerdas (un único-rowid() pasado MAX-SAFE-INTEGER llega redondeado de lo contrario), despeja al miembro principal cuando el hilera siendo removida es suya, y ya no muta al huérfano la recopilación junto con el repositorio escribe. - La búsqueda del directorio toma alcance=todos, sobre cada miembro de la zona en lugar de la lista de personal, y cada fila dice cuál es el tipo. El endpoint ratchet aprende desconataA menos que... carga la sesión y devuelve el 401 sin uno, o 403 sin la derecha, por lo que un manejador que se abre con él ha hecho Estrechamente más que resolver a un llamante. Sólo se enumeraron 20 entradas de referencia porque el escáner no podía ver al guardia que ya estaba allí.

  21. · kamo-shared-library

    Un rastro de auditoría para las cuentas, y un directorio que incluye a los no-personal

    ACCOUNT-HISTORY registra lo que le sucede a una cuenta de la manera en que LEAD-HISTORY registra lo que le sucede a una pista de plomo - deliberadamente las mismas columnas, porque el interno sitio ahora hace que a través de un componente y una segunda forma habría forzado a un segundo. - Historia de la cuenta . Repositorio de la HistoriaServitor: instantánea/difícil sobre un campo registro, más eventos puntuales para las cosas que no son ediciones de campo (un miembro unirse, una pista o orden que llega, una fusión). Grabación nunca lanza: una auditoría Escriba que falla no debe derribar la operación que estaba auditando. - Historia de la ResponsabilidadFieldRegistry es el único lugar donde se declara un campo rastreado. Correr los totales están deliberadamente ausentes. Se mueven como un efecto secundario de las órdenes, que ya tienen sus propios acontecimientos. - LeadService ahora escribe la mitad de un enlace principal de la cuenta. Acoplando una ventaja a un la cuenta es un acto en dos líneas de tiempo, y grabarlo en uno único significa lo que La página que estás viendo es la que no lo menciona. Una pista movido entre Las cuentas escriben a ambos. - Los registros de CommerceService ORDER-PLACED / .LINKED / .UNLINKED / . . . . . . . . . . . . . . . . . . . . . contra la cuenta de compra. Silencio cuando un pedido no tiene comprador. - **************** la búsqueda de directorios de sólo personal ampliado a cada miembro de una organización, para los recolectores que no están eligiendo a un colega. Se mantuvo en el paso con TeamMemberRepo.searchLorido de dirección para el término, incluyendo el LEFT JOIN EquipoMiembro que mantiene el título de trabajo y el departamento que busca al personal en los resultados. activoSólo sólo puede hablar en busca de filas que tengan una situación laboral, Los miembros sin uno pasar en lugar de ser leídos como "no empleados". - Member.getPhoneExtensión: getPhone () se aplana en el número, dejando la extensión Inalcanzable desde fuera de la clase.

  22. · kamo-internal

    Confirme un reloj en el momento/fuerzo antes de escribir el ponche

    El reloj nav golpeó directamente el clic. Todo otro control en ese bar es idempotente o trivialmente indetecable; un puñetazo es un récord salarial que después sólo un administrador de HR con una razón escrita obligatoria puede corregir el botón se encuentra un píxel de Logout. Ahora eleva TimecardPunchConfirmDialog, construido al estándar de NewSupportRequestPopup y deliberadamente no una copia de ella: esa tarjeta es una alerta que interrumpe, por lo que respira, rechaza su telón de fondo y guarda sus botones tarde. Este fue pedido por un clic, por lo que se arma a la vez y se cierra en Escape y en el telón de fondo. Verde para entrar, ámbar por fuera, porque los dos resultados tienen que ser dicho aparte antes de que se lea una palabra. Su pieza central es un reloj corrigiendo al SEGUNDO, y la copia dice directamente que el tiempo registrado es el momento de la confirmación en lugar del momento pantalla mientras se decide el punto de que vacilar es libre y nada es Escrito hasta que lo digas. La primera garra en el segundo límite, así que la lectura está de acuerdo con cualquier otro reloj en la pantalla del miembro en lugar de aterrizar donde sea que el clic lo hiciera. Comportamiento que cambió con él: - la clave de idempotencia se acuña cuando el diálogo OPENS y se reutiliza para un nuevo intento. Las llaves de per-a-a--intt eran el error que esto previene: una petición que cronometró bien puede han aterrizado, y volver a intentar bajo una nueva llave es un segundo golpe en un récord salarial. - la acción se congela en tiempo abierto, por lo que una encuesta de los años 60 volteando el reloj debajo la tarjeta (un golpe de su teléfono) no puede cambiar la pregunta a mitad de respuesta. - la voltereta optimista se ha ido. Existía porque el puñetazo disparó el clic; el miembro ahora mira una tarjeta que se queda despierto hasta que el servidor contesta, así que un El estado adivinado sería sólo una oportunidad para mostrar el equivocado. - un puñetazo fallido mantiene la tarjeta abierta y lo dice. Retrocerseamente un icono es No hay forma de aprender sobre un puñetazo que no sucedió - que sale a la superficie días después como una excepción de golpe perdido en la tarjeta de tiempo. - cambiar la identidad (dios-mode sudo, interruptor de sesión) deja caer una confirmación abierta, que de otra manera escribiría el puñetazo del miembro anterior contra el nuevo.

  23. · kamo-internal

    Filtro de estado segmentado en lugar de la selección

    Pendiente/Completo/Todos son tres pares cortos que caben en una línea, así que a el descenso escondió a dos de ellos detrás de un clic y gastó una etiqueta y un 170px Bueno, para no decir nada. Un selectel cerrado tampoco puede responder "am I mirando todo?" sin abrirlo. SegmentedFilter es compartido: exclusivo ToggleButtonGroup, acento tomado como un CSS var para que cada superficie mantenga su identidad, y el nulo que excluye modo manos atrás cuando el segmento seleccionado se vuelve a hacer clic se descarta. El filtro siempre tiene un valor. El entrenamiento asignado también lo consigue, en --braza-formación: los dos paneles comparten una tira de pestañas, y uno de ellos mantener un menú desplegada se leería como dos productos diferentes.

  24. · kamo-internal

    Deslice un navegado abarrotado en lugar de aplastar sus opciones

    Pinning más opciones que un navegado puede mostrar exprimida las baldosas fuera de forma: ambas tiras eran cajas de desbordamiento cruda y las baldosas son niños flexibles sin flex-jod de los suyos, por lo que la barra superior los distorsionó (y escondió su barra de desplazamiento de plano, tragando opciones sin señales de que existían) mientras que el El carril dibujó una barra de desplazamiento de 12px sobre su propio gradiente. Ambos navegantes ahora hacen sus opciones móviles a través de NavOverflowScroller: Las fichas mantienen su huella, flechas finales y un borde suave se desvanecen sólo en el el lado que todavía tiene algo que alcanzar, y la tira se puede llamar, sostener, ruedas, tiradas con ímpetu o arrastradas. La opción de la página actual es voltean a la vista a la llegada, y el cromo fijo de la barra superior no más largo comparte el déficit con el único niño que puede absorberlo. Arrastrando una opción y deslizar la tira son el mismo gesto en un abarrotado Nav, así que un abarrotado nav pone reordenamiento detrás de una bodega corta. Ese abrazo retiene el ratón desde dnd-kit en vez de usar su retraso. restricción: la restricción de retraso se activa en el temporizador solo y dnd-kit suprime el clic de cualquier prensa que llegue a la activación, que tendría detenerse cada clic ligeramente lento en una opción de navegación.

  25. · kamo-marketing

    Indice de las páginas de detalle de la colección en 19 idiomas más

    La sincronización terminó, por lo que las páginas de detalle de 2.400 .400 que no fueron indexadas para tener La copia del cuerpo en inglés ahora tiene traducciones reales y se puede indexar. Medido en los 21 locales: cada uno aterriza entre el 0,0% y el 8,8% de la recogida valores idénticos al inglés, excepto sw y ta a exactamente 100.0% . esos dos no tener proveedor, por lo que TranslateService devolvió el texto de origen y la ejecución Escribió inglés en la apariencia de éxito. COLECCION-CONTENT-LOCALES se deriva, por lo tanto no se enumeran: cada anuncio locale menos el conjunto de no-proveedor. sw mantiene su noindex en las páginas de detalle solamente su paquete base es swahili genuino, por lo que sus páginas estáticas permanecen indexadas no tiene ninguna directiva de robots, porque ya canónicos a los ingleses original y apilar ningún índice en la parte superior enviaría dos señales contradictorias sobre un pedazo de contenido.

  26. · kamo-shared-library

    Rollup atrasado por miembros para la matriz de cumplimiento

    Las ramas de matriz de la vista de la RRHHO en la matriz de .row.overdue . . . . . . . . . . . . . rollups de entrenamiento enviados con ese campo codificado a 0 . . . . . . . . . . . . . . . . . . nunca ser tomado, por lo que esos dos dominios sólo podrían mostrar ámbar o verde y "en primer lugar" degenerado. El (miembro, estatus) histograma no puede responderlo: no lleva dueAt. Así que cada uno el repositorio gana un conteo agrupado cuyo predicado es el carácter de carácter uno en countOverdueForOrg, más el equipo de GROUP BYMemberId. Compartir el predicado es lo que hace que las cifras por miembros sumen al conteo de nivel de org se hace arriba ellos. Métodos de consulta solamente. Sin cambio de entidad, sin DDL, la versión se mantiene 1.5.0. Las llamadas siguen siendo dueña del conjunto abierto, y los dos NO son los mismos: pases legales OPEN-STATES, entrenamiento pasas REMINDABLE-STATES. AWAITING.GRADING está abierto, pero no le debe nada al miembro, y contarlo atrasado reproduciría lo legal El error del módulo que dijo a los miembros a tiempo que llegaban a semanas tarde, para siempre.

  27. · kamo-internal

    Construir la pestaña Visión general como informe sobre los otros cuatro

    Consola de informes de ancho completo: lectura de masthead, cuatro pilares de pestañas, el Lígera de atención a las necesidades, la matriz de cumplimiento de la fuerza de trabajo y una actividad Rándoo. Lectura de sólo cada acción es un eslabón profundo en la pestaña de propiedad.

  28. · kamo-internal

    Resumen del libro de atención, matriz de cumplimiento y carril de actividad

    useMemberNames sources /api/security/security/members/names en lugar del escrito adivinado .../org-config shape: org-config nunca devuelve una lista de miembros (confirmado por la lectura LegalPackageDialog.tsx y TrainingAssignDialog.tsx, que analizan sólo departamentos/jobTitles de ella), mientras que /miembros/nombres es el endpoint ya construido para resolución de id-to-name y ya utilizada de la misma manera por hipotecaAppsApi.memberNames().

  29. · kamo-internal

    Vista general masthead y los cuatro pilares de pestañas

  30. · kamo-internal

    Resumen gancho de datos y primitivos visuales compartidos

    useHrOverview obtiene asistencia - resúmenes de documentos con todosSettled así que uno El servicio muerto degrada sólo sus propias secciones; se salta la copie por la secciones visibleOverviewSections () dice que el miembro no puede ver. El primitivos (CountUp, ProgressRing, StackedBar, StatePip, Figure, SectionShell) son los componentes compartidos que las secciones de visión general hacen con, todos los movimientos guardados por useReducedMotion y EASE-HOUSE.

Tu universo está esperando.

Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.

Gratis para siempre: no se requiere tarjeta de crédito