Pour les organisations qui utilisent les feuilles de temps et les budgets d’Asana, des rapports périodiques sont essentiels pour une comptabilité et une paie précises. Bien qu’Asana fournisse des vues robustes dans l’application, vous pouvez parfois avoir besoin d’une exportation CSV complète de toutes les entrées de temps dans l’ensemble de votre domaine pour un audit externe ou un traitement personnalisé à la fin d’un mois ou d’un trimestre.
Cet article explique comment utiliser l’API Asana pour regrouper les entrées de temps de l’ensemble de votre espace de travail et les mettre en forme dans un fichier CSV propre et prêt pour la comptabilité qui correspond à vos exigences internes.
Note
Bien que ce guide soit conçu pour les utilisateurs de l’extension Feuilles de temps et budgets, cette méthode d’exportation basée sur l’API est également disponible pour les utilisateurs qui n’utilisent pas d’extensions et qui enregistrent le temps via les champs de tâches Asana standard.
Pourquoi exporter via l’API ?
Bien que l’interface utilisateur d’Asana propose des tableaux de bord puissants, l’exportation via l’API vous permet de :
- Automatiser les rapports : planifiez des exportations mensuelles ou trimestrielles pour votre équipe financière sans clics manuels.
- Auditer la granularité : accédez à des métadonnées spécifiques, telles que le statut des tâches, la priorité et les GID d’entrée, qui sont essentielles à la tenue des dossiers.
- Intégration de systèmes : transférez facilement vos données de temps Asana dans un logiciel ERP ou de paie.
Pour assurer la compatibilité avec les pratiques comptables standard, votre script d’exportation doit produire un fichier CSV contenant les champs suivants, comme indiqué dans les exportations de votre vue de réviseur :
Colonne | Description |
Nom de la tâche | Le titre de la tâche pour laquelle le temps a été enregistré. |
Durée (heures) | Durée totale convertie de minutes en heures décimales. |
Date | Le jour spécifique où le travail a été effectué. |
Personne à l’origine de l’envoi | Le nom du membre de l’équipe qui a enregistré le temps. |
GID des tâches | L’identifiant unique de la tâche Asana. |
GID du projet | Identifiant unique du projet parent. |
Statut des tâches | Indique si la tâche est actuellement « En cours » ou « Terminée ». |
GID d’entrée | Identifiant unique pour le journal de temps spécifique. |
Implémentation : exportation via Python
Pour exporter « tout » le temps, votre script doit parcourir vos projets pour trouver des tâches, puis récupérer les entrées de temps pour ces tâches à l’aide du point de terminaison Obtenir des entrées de suivi du temps pour une tâche.
Conditions préalables
Le script d’exportation
Python
import Asana
import pandas as pd
# Initialiser le
client client = asana.Client.access_token('YOUR_PERSONAL_ACCESS_TOKEN')
workspace_gid = 'VOTRE_GID_ESPACE_DE_TRAVAIL'
def export_domain_time() :
all_time_data = []
# 1. Parcourir tous les projets de l’espace de travail
projects = client.projects.get_projects({'espace de travail': workspace_gid})
pour le projet dans les projets :
# 2. Obtenir toutes les tâches du projet
tasks = client.tasks.get_tasks_for_project(project['gid'], opt_fields=[
'name', 'gid', 'terminé', 'terminé_à', 'priorité'
])
for tâche in tâches:
# 3. Récupérer les entrées de temps pour chaque tâche
time_entries = client.time_tracking_entries.get_time_tracking_entries_for_task(
task['gid'],
opt_fields=['created_by.name', 'duration_minutes', 'entered_on', 'gid']
)
pour l'entrée dans time_entries :
# Calculer les heures au format décimal
hours = round(entry['duration_minutes'] / 60, 2)
# Construire la ligne pour qu'elle corresponde au modèle CSV
all_time_data.append({
"Nom de la tâche" : tâche["nom"],
"Time (hours)" : hours,
"Date" : entry['entered_on'],
"Submitter" : entry['created_by']['name'],
"GID de la tâche" : tâche["gid"],
"GID du projet" : project['gid'],
"Task Status": "Terminé" if task['completed'] else "Ouvert",
"Task Completion Date" : task.get('completed_at', ''),
"Priorité des tâches" : tâche.get('priorité', ''),
"GID d'entrée" : entrée['gid']
})
# 4. Enregistrer au format CSV
df = pd.DataFrame(all_time_data)
df.to_csv('asana_time_export_accounting.csv', index=False)
print("Export terminé : asana_time_export_accounting.csv")
export_domain_time()
Considérations critiques pour les grands domaines
Lorsque vous exécutez cet export pour l’ensemble d’une organisation, gardez à l’esprit les bonnes pratiques suivantes :
- Limites de débit de l’API : Asana limite le nombre de demandes que vous pouvez effectuer par minute. Pour les domaines volumineux, envisagez d’ajouter time.sleep() ou d’utiliser la logique de nouvelle tentative intégrée à la bibliothèque Asana.
- Filtrage de la date : pour la comptabilité mensuelle, utilisez le champ entered_on dans votre script pour filtrer uniquement pour la période concernée (par exemple, le mois précédent).
- Autorisations : assurez-vous que le jeton d’accès Personal appartient à un compte de service ou à un administrateur qui a accès à tous les projets pertinents, afin qu’aucune entrée ne soit ignorée.