Ayuda sobre productos BOLD:
Configuración avanzada
Configuración Marcajes
ATENCIÓN: El siguiente contenido es de uso avanzado y su utilización puede ocasionar daños irreparables en la configuración del sistema
Para activar el marcaje en la app hay que añadir lo siguiente en el query, es una función que se ejecuta en el contexto del empleado conectado, por lo que permite decidir que personas tienen activada esta funcionalidad y cuales no.
<Function Group="BoldGT" Name="IsMobileClockingEnabled" Type="bool" Description="Indica si al usuario logado se le permite el marcaje desde el móvil"> <Expression><![CDATA[ true ]]></Expression> </Function>
Envío de mail al responsable
<Script Class="BOLDForm" Name="NoExiste.wsf" Event="OnCreateObject" Wait="-1" Enabled="1" UserAccess="u_Administrador,u_Planificador" ValidateOutput=""> <Expression> <![CDATA[ IfElse(RightStr(Obj2.Name, 3)!="APP" OR Obj2.ID_VERSION!=1, false, IfElse(Obj2.SubClassType!=5 ,false, IfElse(Obj2.CustomProps.M32DatosEmpleado.IdWorker.SystemProps.IdRespVac==0, false, IfElse(Object(Obj2.CustomProps.M32DatosEmpleado.IdWorker.SystemProps.IdRespVac, "Worker").SystemProps.Mail=="", false, IfElse(Mail("notificaciones.pssjd@pssjd.org", Object(Obj2.CustomProps.M32DatosEmpleado.IdWorker.SystemProps.IdRespVac, "Worker").SystemProps.Mail + ";jsala@gps-plan.com", "Peticion de permiso", "Tiene una nueva peticion de permiso del tipo " + Obj2.CustomProps.M32DatosPermiso.NombreIncidencia +" del empleado " + Obj2.CustomProps.M32DatosEmpleado.NombreyApellidos + " para el dia " + ISODateAsString(Obj2.CustomProps.IniDirect) +" .Por favor consulte el portal", false, "mail.gps-plan.com", 587, "noreply@gps-plan.com", "noresponder"), false, false) ) ) ) ) ]]> </Expression> </Script>
Defaults necesarios para funcionamiento correcto APP
<DefaultValue EventName="OnUpdateObject" Class="BOLDForm" Attribute="CustomProps.BySchedule"> <![CDATA[ If(RightStr(Name, 3)=="APP", If( SubClassType=5, If( CustomProps.StatusForm == 1 AND CustomProps.SubType==0 AND CustomProps.M32DatosPermiso.Tipo != "Días", If((CustomProps.M32DatosPermiso.Fin - CustomProps.M32DatosPermiso.Inicio)>12.0/24.0, true) ) )) ]]> </DefaultValue> <DefaultValue EventName="OnUpdateObject" Class="BOLDForm" Attribute="CustomProps.M32DatosPermiso.Fin"> <![CDATA[ If(RightStr(Name, 3)=="APP", If( SubClassType=5, If( CustomProps.StatusForm == 1 AND CustomProps.SubType==0 AND CustomProps.M32DatosPermiso.Tipo != "Días", If((CustomProps.M32DatosPermiso.Fin - CustomProps.M32DatosPermiso.Inicio)>12.0/24.0, DateOf(CustomProps.M32DatosPermiso.Fin)+0.9999) ) )) ]]> </DefaultValue> <!-- Se regraba este campo para que los formularios que vienen de la App tengan bien rellenado el campo motivo --> <DefaultValue EventName="OnCreateObject" Class="BOLDForm" Attribute="CustomProps.M32DatosPermiso.Motivo"> <![CDATA[ If( SubClassType==5 AND RightStr(Name, 3)=="APP", If(CustomProps.M32DatosPermiso.Motivo=="Otros", "OtrosSeleccion")) ]]> </DefaultValue> <DefaultValue EventName="OnUpdateObject" Class="BOLDForm" Attribute="CustomProps.M32DatosPermiso.DiasTrabajo"> <![CDATA[ If( SubClassType=5, If( CustomProps.SubType==0, If(CustomProps.M32DatosPermiso.DiasTrabajo==0.0 OR RightStr(Name, 3)=="APP" ,IfElse(CustomProps.DaysOnPlan!=0, SimpleRoundTo(CustomProps.DaysOnPlan,-2), IfElse(CustomProps.HoursOnPlan !=0.0, 1.0, 0.0))) ) ) ]]> </DefaultValue> <DefaultValue EventName="OnUpdateObject" Class="BOLDForm" Attribute="CustomProps.M32DatosPermiso.DiasDetalle"> <![CDATA[ If( SubClassType=5, If( CustomProps.StatusForm == 1 && CustomProps.SubType==0 AND RightStr(Name, 3)=="APP" , PL_CounterDef( PL_DiscreetIntersection( GetDiscreetPlanAsPL(CustomProps.CaseID,CustomProps.M32DatosEmpleado.IdWorker.ID, CustomProps.M32DatosPermiso.Inicio, CustomProps.M32DatosPermiso.Fin) , PL_Substract(PL_Interval(PL_Substract(GetPlanAsPL(CustomProps.CaseID,CustomProps.M32DatosEmpleado.IdWorker.ID, CustomProps.M32DatosPermiso.Inicio-1, CustomProps.M32DatosPermiso.Fin), PL_Interval(CustomProps.M32DatosEmpleado.IdWorker.IncidenceList, CustomProps.M32DatosPermiso.Inicio, CustomProps.M32DatosPermiso.Fin,true,true) ), CustomProps.IniDirect, CustomProps.EndDirect+1, true, true), W_GetCalendarPLBetweenDates(CustomProps.M32DatosEmpleado.IdWorker.ID, CustomProps.M32DatosPermiso.Inicio-1, CustomProps.M32DatosPermiso.Fin+1, true, true, false)) ) , "ToString(Day(StartTime))+ \",\" ", "...") ) ) ]]> </DefaultValue>
Defaults para rellenar datos de responsable en los formularios
<DefaultValue EventName="OnUpdateObject" Class="BOLDForm" Attribute="CustomProps.IdResp"> <![CDATA[ If(RightStr(Name, 3)=="APP" AND SubClassType==5, If( CustomProps.IdResp==0, CustomProps.M32DatosEmpleado.IdWorker.SystemProps.IdRespVac) ) ]]> </DefaultValue> <DefaultValue EventName="OnUpdateObject" Class="BOLDForm" Attribute="CustomProps.NameResp"> <![CDATA[ If(RightStr(Name, 3)=="APP" AND SubClassType==5, If( CustomProps.NameResp=="" AND CustomProps.M32DatosEmpleado.IdWorker.SystemProps.IdRespVac!=0, Object(CustomProps.M32DatosEmpleado.IdWorker.SystemProps.IdRespVac, "Worker").FullName) ) ]]> </DefaultValue> <DefaultValue EventName="OnUpdateObject" Class="BOLDForm" Attribute="CustomProps.CodeResp"> <![CDATA[ If(RightStr(Name, 3)=="APP" AND SubClassType==5, If( CustomProps.CodeResp=="" AND CustomProps.M32DatosEmpleado.IdWorker.SystemProps.IdRespVac!=0, Object(CustomProps.M32DatosEmpleado.IdWorker.SystemProps.IdRespVac, "Worker").ExtCode) ) ]]> </DefaultValue>
Email de la persona empleada (correos a la persona empleada)
<DefaultValue EventName="OnCreateObject" Class="BOLDForm" Attribute="CustomProps.M32DatosEmpleado.Mail"> <![CDATA[ If( SubClassType==5 AND RightStr(Name, 3)=="APP", CustomProps.M32DatosEmpleado.IdWorker.SystemProps.Mail) ]]> </DefaultValue>
Solo si el portal está configurado en modo OnlyOneArea
<!-- Si este campo esta en el BoldWeb.cfg hay que activar este default <OnlyOneArea>Yes</OnlyOneArea> --> <DefaultValue EventName="OnCreateObject" Class="BOLDForm" Attribute="CustomProps.M32DatosEmpleado.IdArea1"> <![CDATA[ If( SubClassType==5 AND RightStr(Name, 3)=="APP", CustomProps.M32DatosEmpleado.IdArea2.ID) ]]> </DefaultValue> <DefaultValue EventName="OnCreateObject" Class="BOLDForm" Attribute="CustomProps.M32DatosEmpleado.IdNombreArea1"> <![CDATA[ If( SubClassType==5 AND RightStr(Name, 3)=="APP", CustomProps.M32DatosEmpleado.IdNombreArea2) ]]> </DefaultValue>
Configuracion de los MustShow del BoldWeb.Cfg en la App
En la versión del flavour BOLDWP, existe un atributo en las incidencias llamado: Expr. filtro portal / App que sirve para configurar la expresión de filtro del permiso, sin tener que modificar el boldwebconfig.xml a mano. Un ejemplo de expresión que podría tener una incidencia en su atributo Expr. filtro portal / App, podría ser: In(GetIDConvenio(ID),»7,9″) para indicar que se trata de una incidencia que sólo pueden ver los contratos del convenio 7 y 9.
En caso de no disponer de ese flavour, o de querer hacerlo manualmente:
Esta configuración se hace en la query AppPublicPermissionList, hay que añadir los atributos necesarios y el nodo ExpressionFilter replicando las condiciones del BoldWeb.cfg. Se adjunta una configuración a modo de ejemplo
<ExtAttributes> <ExtAttribute ShowName="idWorker" Name="idWorker" Description="idWorker" Type="int" Visible="false"> <Expression> <![CDATA[ GetIDWorkerSession() ]]> </Expression> </ExtAttribute> <ExtAttribute ShowName="Contrato" Name="Contrato" Description="Contrato" Type="int" Visible="false"> <Expression> <![CDATA[ W_ContractWorkerForDate(idWorker,Today()) ]]> </Expression> </ExtAttribute> <ExtAttribute ShowName="PlanArea" Name="PlanArea" Description="PlanArea" Type="int" Visible="false"> <Expression> <![CDATA[ IfElse( Contrato==0, 0, Object( Contrato, "ContractWorker").PlanArea.ID ) ]]> </Expression> </ExtAttribute> </ExtAttributes> <Return>1</Return> <ExpressionFilter> <![CDATA[ IfElse(In(ID, "502,804"), IfElse(IsDescendantOf(38,3435250,PlanArea) OR IsDescendantOf(38,19145,PlanArea) OR IsDescendantOf(38,19518,PlanArea)OR IsDescendantOf(38,899601,PlanArea)OR IsDescendantOf(38,3435290,PlanArea), true, false), true) AND IfElse(In(ID, "504,505,506,8018,820,822"), IfElse(IsDescendantOf(38,3435250,PlanArea) OR IsDescendantOf(38,19145,PlanArea) OR IsDescendantOf(38,19518,PlanArea)OR IsDescendantOf(38,899601,PlanArea)OR IsDescendantOf(38,3435290,PlanArea), true, false), true) ]]> </ExpressionFilter>
Configuración de los datos mostrados en los permisos (listado y detalle)
Se realiza a través de la query llamada AppFormPermissionList (ver query o QueryCustom
Configurar enlace para recuperación de contraseña
- Para configurarlo en la app es necesario añadir al fichero de configuración json del cliente la siguiente variable con la url que el cliente quiera redirigir para recuprar contraseñas:
"recoverypasswordURL": "https://urldeprueba/recuperar_password"
- Para configurarlo en el portal y fullweb se hace desde la pantalla de Información de configuración, accediendo desde:
Rellenando el formulario configuración recuperación de contraseñas y clicando Guardar: