Refresco Kanban cuando cambia de estado una tarjeta

Publicado 12 meses hace por Flexygo Team

Publicar un tema
Sin responder
Flexygo Team
Flexygo Team

Buenas tardes, 

Quería consultaros si hay forma de mejorar la funcionalidad del Módulo de Kanban para que cuando un usuario mueva una tarjeta de un estado a otro se les refresque el tablero al resto de usuarios  y puedan ver que esa tarjeta se ha movido. 


Se puede dar una situación donde un usuario está trabajando sobre una tarjeta y la mueve de estado y luego otro usuario en su pantalla piense que esa tarjeta no ha cambiado de estado si no llega a refrescar. 

Muchas gracias de antemano. 

Saludos. 
Santiago Bermúdez. 

0 Votos


1 Comentarios

Flexygo Team

Flexygo Team publicado 12 meses hace

Hola Freshtrategy IT,


A continuación describimos el protocolo a seguir para lanzar un push via SignalR hacia usuario/s que están conectados a la aplicación, con el fin de realizar cualquier operación (Actualizar el wc de notificaciones de la campanita, o de la bandeja de entrada del mail, lanzar un proceso de actualización en un módulo o cualquier tipo de proceso).

La idea principal es detectar en qué situaciones o procesos queremos lanzar el push signalr, casos típicos son la creación de un objeto, su actualización, la ejecución de un proceso etc.
Para esos casos y via proceso en dll, tendremos que añadir el código que genere los eventos signalr que recibirá la aplicación. el siguiente paso será via js suscribir el módulo o wc a esos eventos para lanzar las acciones posteriores requeridas.

Adjuntamos ejemplo de codigo en proceso Dll y 2 ejemplos de codigo js que se pueden vincular a módulos, en donde se suscriben a los eventos ( flexygo.events.on(... ) ) lanzados desde Dll (EventHelper ...).  :

Public Shared Function refreshCajas(ByVal Entity As EntityObject, ByVal IdCliente As String, ByVal IdSesion As Integer, ByVal IdLinea As Integer, ByVal Cajas As Integer, ByVal user As String, ByRef Ret As ProcessHelper) As Boolean

 

        Dim UserCnn As UserConnection = Ret.ConfToken.UserSecurity.ConnectionStrings("DataConnectionString")

        Dim DataManager As New DataManager(UserCnn)

 

        Try

 

            Dim aParams As New BaseCollection

            Dim result As New DataTable

 

            aParams.Add("IdCliente", IdCliente)

            aParams.Add("idSesion", IdSesion)

            aParams.Add("idLinea", IdLinea)

            aParams.Add("cajas", Cajas)

 

 

            If DataManager.ExecuteStoredResult("pPers_FGO_VentasFresco_setCajas", aParams, result) Then

 

                Dim dv As New DataView(result)

 

                For Each usuario As OnlineUser In FLEXYGO.SignalR.genericHub.ConnectedUsers.Values 'Recoge todos los usuarios conectados

 

                    dv.RowFilter = "IdEmpleado=" & usuario.Reference

 

                    If dv.Count > 0 Then

 

                        'Crea un diccionario para pasarle datos al evento

                        Dim sender As New Dictionary(Of String, Object) From {

                            {"IdCliente", IdCliente},

                            {"IdLinea", IdLinea},

                            {"Usuario", usuario.Username},

                            {"Data", FLEXYGO.Utilities.SQL.SQLUtilities.DataTableToList(dv.ToTable, Ret.ConfToken)}

                        }

                        'Genera un evento de clase push y tipo updated'

                        Dim evento As EventHelper = New EventHelper(eEventClass.Push, eEventType.Updated) With {.sender = sender}

                        evento.masterIdentity = "Prueba"

                        FireGenericAllUserEvent()

                        FireGenericUserIDEvent()

                        FireGenericUserEvent(evento, usuario.Username)

                    End If

 

                Next

 

                Ret.Success = True

 

            ElseIf Not IsBlank(DataManager.LastException) And DataManager.LastException.InnerException.Message.Contains("Se está reservando una cantidad mayor a la disponible") Then

                Ret.WarningMessage = "Se está reservando una cantidad mayor a la disponible"

                Ret.Success = True

            Else

                Ret.LastException = DataManager.LastException

                Ret.Success = False

            End If

 

            Return Ret.Success

 

        Catch ex As Exception

 

            Ret.Success = False

            Ret.LastException = ex

            Return False

 

        Finally

            DataManager.Close()

        End Try

    End Function

 

 

function JAPO_VF_inistSesionesClientes(e) {

 

    if (e.sender.moduleName == "JAPO_Ventas_Clientes") {

        flexygo.events.off(e.context, 'module', 'loaded');

 

        JAPO_VF_activarClienteFirst();

        let modList = $($('flx-module[modulename="JAPO_Ventas_Articulos"]'));

        /*Se registra al evento*/

        flexygo.events.off(modList, 'push', 'updated');

        flexygo.events.on(modList, 'push', 'updated', JAPO_VF_StockPush);

        /**JAPO_VF_Generar_Pedido y JAPO_VF_setObservacionesLinea**/

        flexygo.events.on(modList, 'process', 'executed', JAPO_VF_CallbacksPantallaParametros);

 

    }

}

 

 

/**Función que recibe el evento Push que se envía desde la función JAPO_VF_setCajas y desde el cron JAPO_VF_resetCajas

para actualizar el stock y las cajas de aquellas líneas que haya cambiado el stock o el stock disponible **/

function JAPO_VF_StockPush(e) {

    var error = e.sender.Error;

    if (error) {

        var IdCliente = e.sender.IdCliente;

        var IdLinea = e.sender.IdLinea;

        var Id = '.cli' + IdCliente + 'li' + IdLinea;

        $(Id).find('.cajas').find('input').removeClass('cajasEditado').addClass('cajasSuperado').addClass('font-bold');

    } else {

        //Stored y dll modificada para enviar a cada usuario su UnidadesStockDisponibles

        $(e.sender.Data).each(function (index) {

 

            var IdDoc = e.sender.Data[index].IdDoc;

            var stock = e.sender.Data[index].UnidadesStockDisponibles;

            var IdArticulo = e.sender.Data[index].Producto;

            var IdFormato = e.sender.Data[index].IdFormato;

            var EstadoLinea = e.sender.Data[index].EstadoLinea;

            var Id = '#' + IdDoc;

 

            if (e.sender.Data[index].UnidadesStock != undefined) {

                var cajas = e.sender.Data[index].UnidadesStock;

                $(Id).find('.cajas').find('input').val(cajas);

            }

 

            $(Id).find('.stock').html(stock);

 

            $(Id).find('.sintratar').removeClass('sintratar').addClass(EstadoLinea);

            $(Id).find('.reservada').removeClass('reservada').addClass(EstadoLinea);

            $(Id).find('.ofertada').removeClass('ofertada').addClass(EstadoLinea);

            $(Id).find('.pedida').removeClass('pedida').addClass(EstadoLinea);

        });

 

    }

 

    $('#mod-JAPO_VF_Sesion_Clientes_ResumenReserva')[0].refresh();

    $('#mod-JAPO_VF_Sesion_Lineas_ResumenReserva')[0].refresh();

 

}



Un saludo,

Jose Vicente Bernad






0 Votos

Iniciar sesión o Registrarse para publicar un comentario