# Consultation du temps de travail

L'API met à disposition trois opérations de consultation :

* pour une mission
* pour un travailleur mobile
* pour une entreprise

## Consultation des données d'une mission <a href="#consultation-des-donnees-dune-mission" id="consultation-des-donnees-dune-mission"></a>

{% hint style="info" %}
L'accès aux données de temps de travail d'une mission n'est autorisée que pour les membres de l'entreprise concernée par la mission.
{% endhint %}

```graphql
query {
    mission(id: Int!) {
        name
        activities {
            id
            type
            startTime
            endTime
            userId
        }
        expenditures {
            id
            type
            userId
        }
    }
}
```

La requête retourne la liste des activités associées à la mission (concernant éventuellement plusieurs utilisateurs).

## Consultation des données pour un travailleur mobile <a href="#consultation-des-donnees-pour-un-travailleur-mobile" id="consultation-des-donnees-pour-un-travailleur-mobile"></a>

{% hint style="info" %}
L'accès complet aux données de temps de travail n'est autorisé que pour les gestionnaires de l'entreprise ou pour l'utilisateur lui-même.
{% endhint %}

```graphql
query {
    user(id: Int!) {
        firstName
        lastName
        missions {
            edges {
                node {
                    name
                    activities {
                        id
                        type
                        startTime
                        endTime
                        userId
                    }
                    expenditures {
                        id
                        type
                        userId
                    }
                }
            }
        }
    }
}
```

Dans l'exemple ci-dessus, sous réserve d'un niveau d'autorisation adapté, l'API retournera la liste des missions sur lesquelles le travailleur a enregistré du temps de travail.

Si l'on souhaite uniquement récupérer les activités sans avoir un regroupement par missions, il est possible de requêter directement le champ `activities` :

```graphql
query {
    user(id: Int!) {
        firstName
        lastName
        activities {
            edges {
                node {
                    id
                    type
                    startTime
                    endTime
                    userId
                    missionId
                }
            }
        }
    }
}
```

Il est également possible de récupérer le temps de travail déjà calculé par journée.

```graphql
query {
    user(id: Int!) {
        firstName
        lastName
        workDays {
            edges {
                node {
                    startTime
                    endTime
                    activityDurations
                }
            }
        }
    }
}
```

## Consultation des données entreprise <a href="#consultation-des-donnees-entreprise" id="consultation-des-donnees-entreprise"></a>

Cette opération permet d'accéder à toutes les données de temps de travail propres à l'entreprise, c'est-à-dire toutes les missions qui ont été réalisées par des salariés de l'entreprise.

{% hint style="info" %}
L'accès complet à toutes les missions nécessite d'être rattaché en tant que gestionnaire à l'entreprise.
{% endhint %}

```graphql
query {
    company(id: Int!) {
        name
        missions {
            edges {
                node {
                    id
                    name
                    activities {
                        id
                        type
                        startTime
                        endTime
                        userId
                    }
                    expenditures {
                        id
                        type
                        userId
                    }
                }
            }
        }
    }
}
```

Il est également possible de récupérer la liste des membres actuels de l'entreprise.

```graphql
query {
    company(id: Int!) {
        name
        users {
            id
            firstName
            lastName
        }
    }
}
```

A l'instar de la consultation des données d'un travailleur mobile il est possible de récupérer le temps de travail déjà agrégé par journée.

```graphql
query {
    company(id: Int!) {
        name
        workDays {
            edges {
                node {
                    userId
                    startTime
                    endTime
                    activityDurations
                }
            }
        }
    }
}
```

### Cas d'une gestion multi-sociétés <a href="#cas-dune-gestion-multi-societes" id="cas-dune-gestion-multi-societes"></a>

Il est possible de récupérer en une seule requête la liste de toutes les entreprises sur lesquelles l'utilisateur a un droit de gestion, via le champ `adminedCompanies`.

```graphql
query {
  me {
    adminedCompanies {
      name
      workDays {
        edges {
          node {
            userId
            startTime
            endTime
            activityDurations
          }
        }
      }
    }
  }
}
```

## Choix de la période d'historique récupérée <a href="#choix-de-la-periode-dhistorique-recuperee" id="choix-de-la-periode-dhistorique-recuperee"></a>

Les trois champs permettant de récupérer des données de temps de travail prennent des arguments optionnels pour restreindre la période d'historique :

* le champ `activities(fromTime: TimeStamp, untilTime: TimeStamp)` au niveau d'un travailleur mobile
* le champ `missions(fromTime: TimeStamp, untilTime: TimeStamp)` au niveau d'un travailleur mobile ou d'une entreprise
* le champ `workDays(fromDate: Date, untilDate: Date)` au niveau d'un travailleur mobile ou d'une entreprise

```graphql
query {
    user(id: Int!) {
        firstName
        lastName
        activities(fromTime: 1577869200, untilTime: 1578081600) {
            edges {
                node {
                    # toutes les activités qui ont eu lien (au moins en partie) entre le 01/01/2020 9h et le 03/01/2020 20h
                    id
                    type
                    startTime
                    endTime
                    userId
                    missionId
                }
            }
        }
    }
}
```

```graphql
query {
    user(id: Int!) {
        firstName
        lastName
        missions(fromTime: 1577869200) {
            # toutes les missions pour lesquelles le travailleur mobile a du temps de travail après le 01/01/2020 9h
            edges {
                node {
                    name
                    activities {
                        id
                        type
                        startTime
                        endTime
                        userId
                    }
                    expenditures {
                        id
                        type
                        userId
                    }
                }
            }
        }
    }
}
```

```graphql
query {
  me {
    adminedCompanies {
      name
      workDays(fromDate: "2020-01-01") {
        edges {
          node {
            # toutes les journées de travail des entreprises concernées à partir du 01/01/2020
            userId
            startTime
            endTime
            activityDurations
          }
        }
      }
    }
  }
}
```

Sur les champs de l'entreprise il existe également un paramètre `limit` qui définit un nombre maximal de missions retournées, en plus du filtre sur les dates. Les missions les plus récentes (dans la période sélectionnée) seront renvoyées.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.mobilic.beta.gouv.fr/guides/consultation-du-temps-de-travail.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
