Hola a todos,
Este será el primero de varios post que tendrán como fin la creación de aplicación en Power Apps para gestionar vacaciones. Para el ejemplo de hoy vamos a crear la estructura de la aplicación y las siguiente funcionalidades:
- Mostrar en una galería la base de datos con todas las personas de nuestro equipo, empresa, etc.
- Crear una serie de campos para seleccionar a la persona, indicar las fechas de inicio y fin de las vacaciones, el periodo y el estado.
- Crear una tercera galería para mostrar las personas que han sido seleccionadas y una botones para que permitan modificar los datos guardado y para autorizar o denegar esas vacaciones.
Así es como se mostrará la aplicación en su primera fase:

La primera galería que muestra a las personas de nuestra base de datos, contiene un checkbox que relaciona sus propiedades con los campos de ID y Nombre de la derecha.
En la propiedad OnCheck, incluimos el siguiente código: un set que vamos a llamar _emple y que buscará en la lista de sharepoint de Personas y que nos ayudará a crear dos variables, vIdent y vNombre con el nombre y el ID de la persona seleccionada en la galería.

En cuanto a cuando desmarcamos el checkbox, lo que hará es reestablecer todos los controles de la derecha y dejarlos vacíos:

Y ahora vamos a los elementos de la derecha:
Tanto en ID como en Nombre, en la propiedad Default incluiremos las dos variables que hemos generado en la primera galería:

De esta forma cuando seleccionemos en la galería, por defecto aparecerá el ID y el Nombre que hemos seleccionado en los campos de la derecha.
En el resto de botones, de momento no incluimos nada en Default, lo haremos más adelante.
En periodo en la propiedad Ítems incluimos 3 periodos:
["";"1";"2";"3"]
En las fechas usamos dos selectores de fecha y luego el campo de los comentarios un textbox.
En cuanto al botón guardar, añadiremos todo este código:
//Si no hay identificador no se puede guardar
If(IsBlank(txtIdentificador.Text) ;
Notify("DEBES SELECCIONAR UNA PERSONA EN LA GALERÍA1");
//Si no hay fecha inicio o fecha fin o periodo no se puede guardar
If(IsBlank(DateFechaInicio.SelectedDate) Or IsBlank(DateFechaFin.SelectedDate) Or ddPeriodo.SelectedText.Value="";
Notify("DEBES SELECCIONAR UNA FECHA DE INICIO Y FIN E INDICAR EL PERIODO VACACIONAL");
//si ya existe un ID con el mismo periodo, simplemento reescribimos, en caso contrario grabamos nuevos datos.
Set(Control;LookUp(
'LISTA VACACIONES';
IDENTIFICADOR = _vacaciones.IDENTIFICADOR And PERIODO=ddPeriodo.SelectedText.Value
));;
If(!IsBlank(Control.IDENTIFICADOR);
Patch(
'LISTA VACACIONES';
LookUp(
'LISTA VACACIONES';
IDENTIFICADOR = _vacaciones.IDENTIFICADOR And PERIODO=ddPeriodo.SelectedText.Value
);
{
NOMBRE:txtNombre.Text;
IDENTIFICADOR: txtIdentificador.Text;
'FECHA INICIO': DateFechaInicio.SelectedDate;
'FECHA FIN': DateFechaFin.SelectedDate;
PERIODO:ddPeriodo.SelectedText.Value;
ESTADO: "PENDIENTE RESOLUCIÓN";
COMENTARIOS: txtComentarios.Text
}
);;
;
Patch(
'LISTA VACACIONES';
{
NOMBRE:txtNombre.Text;
IDENTIFICADOR: txtIdentificador.Text;
'FECHA INICIO': DateFechaInicio.SelectedDate;
'FECHA FIN': DateFechaFin.SelectedDate;
PERIODO:ddPeriodo.SelectedText.Value;
ESTADO: "PENDIENTE RESOLUCIÓN";
COMENTARIOS: txtComentarios.Text
}
)
)
;;
//desmarcamos los checkbox de la galeria 1
Set(
Resetear;
false
);;
Set(
Resetear;
true
);;
//Vaciamos variables y datos de los campos de la derecha
Reset(txtIdentificador);;
Reset(txtNombre);;
Reset(DateFechaInicio);;
Reset(DateFechaFin);;
Reset(txtComentarios);;
Set(vIdent;Blank());;
Set(vNombre;Blank());;
Set(vPeriodo;Blank());;
Set(vFIni;Blank());;
Set(vFFin;Blank());;
Set(vComentarios;Blank());;
Reset(ddPeriodo);;
)
)
Y una vez que guardamos, pasamos los datos a la segunda galería que nos va a permitir modificar los datos y también aprobar o denegar la solicitud.
En el botón modificar;

Set(nIdentificador;ThisItem.IDENTIFICADOR);;
Set(nPeriodo;ThisItem.PERIODO);;
Set(
_emple;
LookUp(
PERSONAS;
INDICE = ThisItem.IDENTIFICADOR*1
)
);;
Set(vIdent;_emple.INDICE);;
Set(vNombre;_emple.'{Name}');;
Set(
_vacaciones;
LookUp(
'LISTA VACACIONES';
IDENTIFICADOR =nIdentificador And PERIODO=nPeriodo
)
);;
Set(vPeriodo;_vacaciones.PERIODO);;
Set(vFIni;_vacaciones.'FECHA INICIO');;
Set(vFFin;_vacaciones.'FECHA FIN');;
Set(vEstado;_vacaciones.ESTADO);;
Set(vComentarios;_vacaciones.COMENTARIOS);;
Creamos volvemos a crear las mismas variables para el nombre y el ID y poder así pasar la persona que queremos modificar a los campos de la derecha y además crear el resto de variables para pasar la información que tenemos en nuestra otra lista (LISTA VACACIONES), y que ahora ya podemos colocar en la propiedad Default de Fecha Inicio, Fecha Fin y Comentarios.
Y para finalizar, he incluido un PopUp para modificar el estado de la solicitud:

En el botón probar:
Patch(
'LISTA VACACIONES';
LookUp(
'LISTA VACACIONES';
IDENTIFICADOR =nIdentificador And PERIODO=nPeriodo
);
{ESTADO: "APROBADA"}
);;
UpdateContext({PopUp:false})
En el botón Denegar:
Patch(
'LISTA VACACIONES';
LookUp(
'LISTA VACACIONES';
IDENTIFICADOR =nIdentificador And PERIODO=nPeriodo
);
{ESTADO: "DENEGADA"}
);;
UpdateContext({PopUp:false})
En el botón Cambiar a pendiente de resolver:
Patch(
'LISTA VACACIONES';
LookUp(
'LISTA VACACIONES';
IDENTIFICADOR =nIdentificador And PERIODO=nPeriodo
);
{ESTADO: "PENDIENTE RESOLUCIÓN"}
);;
UpdateContext({PopUp:false})
Os recuerdo el post para crear los PopUp: Enlace
Y esto es todo por hoy. Iré publicando otras funcionalidades en futuras publicaciones, espero que sea de utilidad.
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies