> For the complete documentation index, see [llms.txt](https://elguerre.gitbook.io/de0an/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elguerre.gitbook.io/de0an/capitulo-8-la-construccion-proyectos-tareas-y-pomodoros/uso-del-calendario-citas.md).

# Uso del Calendario. Citas

Otra de las capacidades con la que dotaremos a una tarea es con la de ser agendada en el calendario propio de la aplicación a modo de recordatorio, lo que aportará al usuario de las siguientes ventajas:

* Localización de la tarea en el calendario de manera que sea fácilmente revisada la ocupación junto a otras tareas o citas ya existentes pertenecientes a esta y otras aplicaciones. Así pues,

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-d3196ed67bbc38968b6adf40b00c2e93e81d4c9f%2Fimage31.png?alt=media)

**Figura 21.- Tarea agendada como cita en el calendario del dispositivo**

* Ahorro en el consumo de batería

Además, como programadores, nos ahorrará un coste de desarrollo, al no tener que implementar un agente para ello. Será por tanto el sistema quien se encargue de la gestión de la misma una vez ésta haya sido creada o modificada.

La gestión de una tarea la realizaremos tanto en el detalle de una tarea como en su edición.

La gestión de eventos o citas a partir de una tarea presenta varias peculiaridades tanto para la pantalla de detalle como para la de edición:

* Mostraremos el botón de creación sólo cuando se trate de una tarea activa y tenga una fecha de inicio, siempre y cuando el evento no haya sido creado ya con anterioridad.
* Mostraremos el botón de borrado del evento, si el evento existe en el calendario.
* Al modificar la fecha de inicio de una tarea actualizaremos el evento en el calendario. Si deja de establecerse una fecha para la tarea, eliminamos el evento.
* Al eliminar una tarea, eliminaremos el evento del calendario.

Un aspecto importante a tener en cuenta para mostrar o no el botón es la manera de asignar valor a la propiedad “AppointmentAlreadyExists”. Ya hablamos de la clase “NotifyTaskCompletion”, pero una vez más debemos hacer mención a la misma, puesto que nos facilitará la labor al comprobar la existencia de un evento en el calendario.

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-7f796575dc73878587922dcd540f59200f60fe91%2Fimage32.png?alt=media)

**Figura 22.- Uso de NotifyTaskCompletion para verificar la existencia de citas en el calendario**

Para evitar este error, que de igual forma podremos obtener en más de alguna ocasión, simplemente tendremos que hacer uso de nuestra clase “NotifyTaskCompletion” tal y como podemos ver a continuación:

```xml
AppointmentAlreadyExists = new NotifyTaskCompletion<bool>(appointmentService.AppointmentExists(this.CurrentTask)).Result;
```
