fix: Récupérer l'opération active depuis la table operations

- Corrige l'erreur SQL 'Unknown column fk_operation in users'
- L'opération active est récupérée depuis operations.chk_active = 1
- Jointure avec users pour filtrer par entité de l'admin créateur
- Query: SELECT o.id FROM operations o INNER JOIN users u ON u.fk_entite = o.fk_entite WHERE u.id = ? AND o.chk_active = 1
This commit is contained in:
2026-01-26 16:57:08 +01:00
parent c24a3afe6a
commit 0687900564
3040 changed files with 77204 additions and 1578 deletions

View File

@@ -39,25 +39,19 @@ handle_error() {
# Trap pour capturer les erreurs
trap 'handle_error $LINENO' ERR
# Vérifier que nous sommes dans le bon dossier
if [ ! -f "pubspec.yaml" ]; then
print_error "Ce script doit être exécuté depuis le dossier racine de l'application Flutter"
print_error "Fichier pubspec.yaml introuvable"
exit 1
fi
# Variables pour IN1 (compilation distante)
IN1_HOST="IN1"
IN1_PROJECT_PATH="/home/pierre/dev/geosector/app"
print_message "🖥️ Compilation distante sur IN1:${IN1_PROJECT_PATH}"
echo
print_message "========================================="
print_message " GEOSECTOR - Génération Bundle Android"
print_message "========================================="
echo
# Vérifier que Flutter est installé
if ! command -v flutter &> /dev/null; then
print_error "Flutter n'est pas installé ou n'est pas dans le PATH"
exit 1
fi
# Étape 0 : Synchroniser la version depuis ../VERSION
# Étape 0 : Synchroniser la version depuis ../VERSION (lecture locale via SSHFS)
print_message "Étape 0/5 : Synchronisation de la version..."
echo
@@ -230,88 +224,89 @@ if [ "$USE_R8" = true ]; then
echo
fi
# Étape 1 : Nettoyer le projet
print_message "Étape 1/5 : Nettoyage du projet..."
flutter clean
if [ $? -eq 0 ]; then
print_success "Projet nettoyé"
else
print_error "Échec du nettoyage du projet"
exit 1
fi
echo
# Étape 2 : Récupérer les dépendances
print_message "Étape 2/5 : Récupération des dépendances..."
flutter pub get
if [ $? -eq 0 ]; then
print_success "Dépendances récupérées"
else
print_error "Échec de la récupération des dépendances"
exit 1
fi
echo
# Étape 2.5 : Patcher nfc_manager pour AGP 8+
print_message "Étape 2.5/5 : Patch nfc_manager pour Android Gradle Plugin 8+..."
NFC_PATCH_SCRIPT="./fastlane/scripts/commun/fix-nfc-manager.sh"
if [ -f "$NFC_PATCH_SCRIPT" ]; then
bash "$NFC_PATCH_SCRIPT"
if [ $? -eq 0 ]; then
print_success "Patch nfc_manager appliqué"
else
print_warning "Le patch nfc_manager a échoué (peut être déjà appliqué)"
fi
else
print_warning "Script de patch nfc_manager introuvable : $NFC_PATCH_SCRIPT"
fi
echo
# Étape 3 : Analyser le code (optionnel mais recommandé)
print_message "Étape 3/5 : Analyse du code Dart..."
flutter analyze --no-fatal-infos --no-fatal-warnings || {
print_warning "Des avertissements ont été détectés dans le code"
read -p "Voulez-vous continuer malgré les avertissements ? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
print_message "Génération annulée par l'utilisateur"
exit 0
fi
}
print_success "Analyse du code terminée"
echo
# Étape 4 : Générer le bundle
print_message "Étape 4/5 : Génération du bundle Android..."
# Lancer le build sur IN1 via SSH
print_message "🚀 Lancement du build Android sur IN1..."
print_message "Cette opération peut prendre plusieurs minutes..."
flutter build appbundle $BUILD_MODE_FLAG
if [ $? -eq 0 ]; then
print_success "Bundle généré avec succès"
else
print_error "Échec de la génération du bundle"
exit 1
fi
echo
# Restaurer le build.gradle.kts original si modifié
if [ "$USE_R8" = true ] && [ -f "$GRADLE_BACKUP" ]; then
print_message "Restauration du build.gradle.kts original..."
mv "$GRADLE_BACKUP" "$GRADLE_FILE"
print_success "Fichier restauré"
echo
ssh ${IN1_HOST} "bash -l -s" <<REMOTE_SCRIPT || { print_error "Remote build failed on IN1"; exit 1; }
set -euo pipefail
# Charger le profil utilisateur pour avoir Flutter dans le PATH
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
if [ -f ~/.profile ]; then
source ~/.profile
fi
# Vérifier que le bundle a été créé
cd ${IN1_PROJECT_PATH}
echo "[IN1] Starting Android build process..."
# Variables transmises
VERSION_NUMBER="${VERSION_NUMBER}"
VERSION_CODE="${VERSION_CODE}"
BUILD_MODE_FLAG="${BUILD_MODE_FLAG}"
MODE_SUFFIX="${MODE_SUFFIX}"
USE_R8="${USE_R8}"
GRADLE_FILE="android/app/build.gradle.kts"
GRADLE_BACKUP="android/app/build.gradle.kts.backup"
# Mise à jour de pubspec.yaml
echo "[IN1] Updating pubspec.yaml to version \${VERSION_NUMBER}+\${VERSION_CODE}..."
sed -i.bak "s/^version:.*/version: \${VERSION_NUMBER}+\${VERSION_CODE}/" pubspec.yaml
# Activer R8 si demandé
if [ "\$USE_R8" = "true" ]; then
echo "[IN1] Enabling R8/ProGuard..."
cp "\$GRADLE_FILE" "\$GRADLE_BACKUP"
sed -i.tmp 's/isMinifyEnabled = false/isMinifyEnabled = true/' "\$GRADLE_FILE"
sed -i.tmp 's/isShrinkResources = false/isShrinkResources = true/' "\$GRADLE_FILE"
rm -f "\${GRADLE_FILE}.tmp"
fi
# Étape 1 : Nettoyer
echo "[IN1] Step 1/5: Cleaning project..."
flutter clean
# Étape 2 : Dépendances
echo "[IN1] Step 2/5: Getting dependencies..."
flutter pub get
# Étape 2.5 : Patch nfc_manager
echo "[IN1] Step 2.5/5: Patching nfc_manager..."
./fastlane/scripts/commun/fix-nfc-manager.sh || echo "[IN1] Warning: nfc_manager patch failed"
# Étape 3 : Analyse (optionnel)
echo "[IN1] Step 3/5: Analyzing code..."
flutter analyze --no-fatal-infos --no-fatal-warnings || echo "[IN1] Warning: Code analysis had warnings"
# Étape 4 : Build bundle
echo "[IN1] Step 4/5: Building Android App Bundle..."
flutter build appbundle \$BUILD_MODE_FLAG
# Restaurer gradle si modifié
if [ "\$USE_R8" = "true" ] && [ -f "\$GRADLE_BACKUP" ]; then
echo "[IN1] Restoring original build.gradle.kts..."
mv "\$GRADLE_BACKUP" "\$GRADLE_FILE"
fi
echo "[IN1] Build completed successfully!"
REMOTE_SCRIPT
print_success "Build Android terminé sur IN1"
echo
# Télécharger le bundle depuis IN1
BUNDLE_PATH="build/app/outputs/bundle/$MODE_SUFFIX/app-$MODE_SUFFIX.aab"
if [ ! -f "$BUNDLE_PATH" ]; then
print_error "Bundle introuvable à l'emplacement attendu : $BUNDLE_PATH"
exit 1
fi
# Copier le bundle à la racine avec le nouveau nom
FINAL_NAME="geosector-$VERSION_CODE-$MODE_SUFFIX.aab"
print_message "Copie du bundle vers : $FINAL_NAME"
cp "$BUNDLE_PATH" "$FINAL_NAME"
print_message "📥 Téléchargement du bundle depuis IN1..."
scp ${IN1_HOST}:${IN1_PROJECT_PATH}/${BUNDLE_PATH} "$FINAL_NAME" || {
print_error "Failed to download bundle from IN1"
exit 1
}
if [ -f "$FINAL_NAME" ]; then
print_success "Bundle copié avec succès"
@@ -324,10 +319,10 @@ else
exit 1
fi
# Copier les fichiers de débogage si Option A sélectionnée
# Télécharger les fichiers de débogage si Option A sélectionnée
if [ "$COPY_DEBUG_FILES" = true ]; then
echo
print_message "Copie des fichiers de débogage pour Google Play Console..."
print_message "📥 Téléchargement des fichiers de débogage depuis IN1..."
# Créer un dossier de release
RELEASE_DIR="release-$VERSION_CODE"
@@ -336,28 +331,31 @@ if [ "$COPY_DEBUG_FILES" = true ]; then
# Copier le bundle
cp "$FINAL_NAME" "$RELEASE_DIR/"
# Copier le fichier mapping.txt (R8/ProGuard)
# Télécharger le fichier mapping.txt (R8/ProGuard)
MAPPING_FILE="build/app/outputs/mapping/release/mapping.txt"
if [ -f "$MAPPING_FILE" ]; then
cp "$MAPPING_FILE" "$RELEASE_DIR/mapping.txt"
print_success "Fichier mapping.txt copié"
else
print_warning "Fichier mapping.txt introuvable (peut être normal)"
fi
print_message "Downloading mapping.txt..."
scp ${IN1_HOST}:${IN1_PROJECT_PATH}/${MAPPING_FILE} "$RELEASE_DIR/mapping.txt" 2>/dev/null && {
print_success "Fichier mapping.txt téléchargé"
} || {
print_warning "Fichier mapping.txt introuvable sur IN1 (peut être normal)"
}
# Copier les symboles natifs
SYMBOLS_ZIP="build/app/intermediates/merged_native_libs/release/out/lib"
if [ -d "$SYMBOLS_ZIP" ]; then
# Créer une archive des symboles
cd build/app/intermediates/merged_native_libs/release/out
zip -r "../../../../../../$RELEASE_DIR/native-symbols.zip" lib/
cd - > /dev/null
print_success "Symboles natifs archivés"
else
# Cer l'archive des symboles natifs sur IN1 et la télécharger
print_message "Creating and downloading native symbols..."
ssh ${IN1_HOST} "bash -l -c '
cd ${IN1_PROJECT_PATH}/build/app/intermediates/merged_native_libs/release/out 2>/dev/null &&
zip -r /tmp/native-symbols-$VERSION_CODE.zip lib/ &&
echo \"Symbols archived\"
'" 2>/dev/null && {
scp ${IN1_HOST}:/tmp/native-symbols-$VERSION_CODE.zip "$RELEASE_DIR/native-symbols.zip" && {
print_success "Symboles natifs téléchargés"
ssh ${IN1_HOST} "rm -f /tmp/native-symbols-$VERSION_CODE.zip"
}
} || {
print_warning "Symboles natifs introuvables (peut être normal)"
fi
}
print_success "Fichiers de débogage copiés dans : $RELEASE_DIR/"
print_success "Fichiers de débogage dans : $RELEASE_DIR/"
echo
print_message "Pour uploader sur Google Play Console :"
print_message "1. Bundle : $RELEASE_DIR/$FINAL_NAME"
@@ -410,48 +408,80 @@ echo
read -p "Voulez-vous aussi générer l'APK pour des tests ? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
print_message "Génération de l'APK..."
flutter build apk $BUILD_MODE_FLAG
print_message "Génération de l'APK sur IN1..."
ssh ${IN1_HOST} "bash -l -s" <<REMOTE_APK_SCRIPT || { print_error "Remote APK build failed"; }
set -euo pipefail
if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
if [ -f ~/.profile ]; then source ~/.profile; fi
cd ${IN1_PROJECT_PATH}
echo "[IN1] Building APK..."
flutter build apk ${BUILD_MODE_FLAG}
REMOTE_APK_SCRIPT
if [ $? -eq 0 ]; then
APK_PATH="build/app/outputs/flutter-apk/app-$MODE_SUFFIX.apk"
if [ -f "$APK_PATH" ]; then
APK_NAME="geosector-$VERSION_CODE-$MODE_SUFFIX.apk"
cp "$APK_PATH" "$APK_NAME"
print_success "APK généré : $APK_NAME"
APK_NAME="geosector-$VERSION_CODE-$MODE_SUFFIX.apk"
print_message "📥 Téléchargement de l'APK depuis IN1..."
scp ${IN1_HOST}:${IN1_PROJECT_PATH}/${APK_PATH} "$APK_NAME" || {
print_error "Failed to download APK from IN1"
}
if [ -f "$APK_NAME" ]; then
print_success "APK téléchargé : $APK_NAME"
# Afficher la taille de l'APK
APK_SIZE=$(du -h "$APK_NAME" | cut -f1)
print_message "Taille de l'APK : $APK_SIZE"
# Si mode Debug, proposer installation automatique
# Si mode Debug, proposer installation automatique (sur machine locale)
if [ "$BUILD_MODE_FLAG" = "--debug" ]; then
echo
read -p "Installer l'APK debug sur l'appareil connecté ? (y/n) " -n 1 -r
print_message "💡 L'APK est maintenant disponible localement : $APK_NAME"
read -p "Installer l'APK debug sur l'appareil connecté à CE poste ? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
print_message "Désinstallation de l'ancienne version..."
adb uninstall fr.geosector.app3 2>/dev/null || print_warning "Aucune version précédente trouvée"
print_message "Installation sur l'appareil..."
adb install "$APK_NAME"
# Vérifier qu'ADB est disponible localement
if ! command -v adb &> /dev/null; then
print_error "ADB n'est pas installé sur ce poste"
print_message "Installez Android SDK Platform Tools"
else
# Vérifier qu'un appareil est connecté
print_message "Vérification des appareils connectés..."
DEVICES=$(adb devices | grep -v "List" | grep "device$" | wc -l)
if [ $? -eq 0 ]; then
print_success "APK installé avec succès"
if [ "$DEVICES" -eq 0 ]; then
print_error "Aucun appareil Android détecté en USB sur ce poste"
print_message "Vérifiez la connexion USB et activez le débogage USB"
print_message "Commande : adb devices"
else
print_success "$DEVICES appareil(s) détecté(s)"
print_message "Désinstallation de l'ancienne version..."
adb uninstall fr.geosector.app3 2>/dev/null || print_warning "Aucune version précédente trouvée"
print_message "Installation sur l'appareil..."
adb install "$APK_NAME"
# Proposer de lancer l'app
read -p "Lancer l'application ? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
adb shell am start -n fr.geosector.app3/.MainActivity
if [ $? -eq 0 ]; then
print_success "Application lancée"
print_success "APK installé avec succès sur l'appareil connecté"
# Proposer de lancer l'app
read -p "Lancer l'application ? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
adb shell am start -n fr.geosector.app3/.MainActivity
if [ $? -eq 0 ]; then
print_success "Application lancée"
else
print_warning "Impossible de lancer l'application"
fi
fi
else
print_warning "Impossible de lancer l'application"
print_error "Échec de l'installation"
print_message "Commande : adb install $APK_NAME"
fi
fi
else
print_error "Échec de l'installation"
print_message "Vérifiez qu'un appareil est bien connecté : adb devices"
fi
fi
fi