ORYS TECHNOLOGIES

TimeTracker Pro

Suivi d'Activité & Unités d'Œuvre

Utilisateur connecté

{{ activeConsultant.name }}

Mon Profil

Autres modules

Matching CV > MatchEngine
Connexion / Déconnexion
{{ activeConsultant.name }} | Saisie des temps & Unités d'Œuvre
{{ activeConsultant.initials }}
{{ activeConsultant.title }}

Équipe : {{ activeConsultant.department }}

Semaine du calendrier {{ formattedCurrentWeek }}
Filtres d'affichage :

Déclaration des heures d'activité

Détails de l'Activité (Mission, UO, Tâche) {{ day.shortName }} {{ day.dateLabel }} Total

Aucune ligne d'activité déclarée ou correspondant aux filtres.

{{ getRowTotal(row) }} h
Totaux Quotidiens : {{ total }} h {{ grandTotal }} h
Les heures supplémentaires ou le travail du week-end nécessitent une validation de projet préalable. Objectif de la semaine : 37.5 h (Saisi : {{ grandTotal }} h)

Live TimeTracker

En cours
{{ formattedTrackerTime }}

Diagnostic d'activité

Saisie hebdomadaire {{ weeklyProgressPercent }}%
Heures Facturables (TJM) {{ billableHours }} h
Heures Internes / R&D {{ nonBillableHours }} h
Total déclaré {{ grandTotal }} h

Analyse du CRA

{{ diagnosticMessage.text }}

Missions Affectées

{{ m.id }} {{ m.client }}

{{ m.title }}

{{ m.bu }} • {{ m.location }} • PM: {{ m.pm }}

Configuration des Structures de Projet

Définissez vos Projets, vos Unités d'Œuvre (UO) avec temps cibles, et sous-tâches associées.

Créer un nouveau Projet / Mission

Unités d'Œuvre (UO) associées

{{ deliv.title }} Temps cible : {{ deliv.targetTime || 'Non défini' }} h | Temps consommé : {{ getUOTotalSaisi(deliv.id) }} h
Efficience / Cible {{ getUOEfficiencyRatio(deliv) }}
Sous-tâches d'exécution :
{{ st.title }}
Aucune sous-tâche pour le moment.
Aucune UO définie pour ce projet. Veuillez cliquer sur "Ajouter une UO".

Fichier de Facturation

Filtrez le périmètre d'extraction pour générer l'état pré-facturation de vos unités d'œuvre (UO) au format réglementaire.

Aperçu de la liasse comptable :
Semaine : {{ currentWeekId }}
Consultant : {{ activeConsultant.name }}

Profil Consultant

{{ activeConsultant.initials }}
{{ activeConsultant.name }}

{{ activeConsultant.title }}

ID Interne : {{ activeConsultant.id }}
Département : {{ activeConsultant.department }}
Rôle Système : Consultant Ingénierie Standard

Connecteur Google Sheets & Apps Script

Automatisez l'envoi et la sauvegarde de vos feuilles de temps directement dans le tableur d'activité.

1. Rendez-vous sur Google Apps Script et créez un nouveau script.

2. Créez un fichier backend Code.gs et intégrez le code d'API sécurisé ci-dessous :

/**
 * CONTROLLERS ET REQUETAGE GOOGLE APPS SCRIPT
 * SYNC TIMETRACKER PRO - ORYS TECHNOLOGIES
 */

function doGet() {
  return HtmlService.createTemplateFromFile('index')
    .evaluate()
    .setTitle('TimeTracker Pro — ORYS')
    .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
    .addMetaTag('viewport', 'width=device-width, initial-scale=1.0');
}

/**
 * Sauvegarde les lignes d'activité d'une semaine donnée
 * @param {Array} rows - Lignes saisies par le consultant
 * @param {String} weekId - ID de la semaine (format YYYY-Www)
 * @param {String} consultantId - ID du consultant
 */
function saveWeekEntries(rows, weekId, consultantId) {
  try {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheetName = "Timesheet_Entries";
    var sheet = ss.getSheetByName(sheetName);
    
    if (!sheet) {
      sheet = ss.insertSheet(sheetName);
      sheet.appendRow(["Consultant ID", "Semaine ID", "Mission ID", "Livrable ID", "Sous-tache ID", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche", "Derniere_Mise_A_Jour"]);
    }
    
    var data = sheet.getDataRange().getValues();
    for (var i = data.length - 1; i >= 1; i--) {
      if (data[i][0] === consultantId && data[i][1] === weekId) {
        sheet.deleteRow(i + 1);
      }
    }
    
    var timestamp = new Date();
    rows.forEach(function(row) {
      sheet.appendRow([
        consultantId,
        weekId,
        row.missionId,
        row.deliverableId,
        row.subTaskId,
        row.hours[0],
        row.hours[1],
        row.hours[2],
        row.hours[3],
        row.hours[4],
        row.hours[5],
        row.hours[6],
        timestamp
      ]);
    });
    
    return { status: "success", message: rows.length + " lignes de temps enregistrées." };
  } catch(e) {
    throw new Error("Erreur Sheets : " + e.message);
  }
}

3. Remplacez le code d'index.html dans votre projet d'application web par tout le code de cette page courante.

4. Déployez l'application en tant qu'Application Web et configurez l'accès pour votre organisation.