#!/bin/bash # πŸ”§ SCRIPT AUTOMATICO: MIGRAZIONE SISTEMA CONTABILE NETGESCON # File: scripts/setup-contabilita-condominiale.sh set -e # Exit on any error # 🎨 Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # πŸ“‹ Configuration LARAVEL_PATH="/var/www/netgescon" BACKUP_PATH="/home/michele/netgescon/backup/database" DATE=$(date +"%Y%m%d_%H%M%S") echo -e "${BLUE}🏒 ===== SETUP SISTEMA CONTABILE CONDOMINIALE NETGESCON =====${NC}" echo "" # βœ… 1. VERIFICA PREREQUISITI echo -e "${YELLOW}πŸ“‹ 1. Verifica prerequisiti...${NC}" if [ ! -d "$LARAVEL_PATH" ]; then echo -e "${RED}❌ Directory Laravel non trovata: $LARAVEL_PATH${NC}" exit 1 fi cd $LARAVEL_PATH if [ ! -f ".env" ]; then echo -e "${RED}❌ File .env non trovato${NC}" exit 1 fi if ! php artisan --version > /dev/null 2>&1; then echo -e "${RED}❌ Laravel Artisan non disponibile${NC}" exit 1 fi echo -e "${GREEN}βœ… Prerequisiti verificati${NC}" # βœ… 2. BACKUP DATABASE echo -e "${YELLOW}πŸ’Ύ 2. Backup database corrente...${NC}" mkdir -p $BACKUP_PATH DB_NAME=$(php artisan tinker --execute="echo config('database.connections.mysql.database');" 2>/dev/null | tail -1) DB_USER=$(php artisan tinker --execute="echo config('database.connections.mysql.username');" 2>/dev/null | tail -1) DB_PASS=$(php artisan tinker --execute="echo config('database.connections.mysql.password');" 2>/dev/null | tail -1) if [ -n "$DB_NAME" ] && [ -n "$DB_USER" ]; then mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "${BACKUP_PATH}/netgescon_pre_contabilita_${DATE}.sql" echo -e "${GREEN}βœ… Backup creato: netgescon_pre_contabilita_${DATE}.sql${NC}" else echo -e "${YELLOW}⚠️ Impossibile creare backup automatico - verifica configurazione DB${NC}" fi # βœ… 3. CREA MIGRATIONS SISTEMA CONTABILE echo -e "${YELLOW}πŸ—ƒοΈ 3. Creazione migrations sistema contabile...${NC}" # Gestioni Contabili php artisan make:migration create_gestioni_contabili_table --quiet # Piano Conti php artisan make:migration create_piano_conti_mastri_table --quiet php artisan make:migration create_piano_conti_conti_table --quiet php artisan make:migration create_piano_conti_sottoconti_table --quiet # Registrazioni Contabili php artisan make:migration create_registrazioni_contabili_table --quiet php artisan make:migration create_movimenti_contabili_partita_doppia_table --quiet php artisan make:migration create_ripartizioni_condomini_table --quiet echo -e "${GREEN}βœ… Migrations create${NC}" # βœ… 4. CREA MODELS echo -e "${YELLOW}πŸ—οΈ 4. Creazione Models...${NC}" php artisan make:model GestioneContabile --quiet php artisan make:model PianoContiMastro --quiet php artisan make:model PianoContiConto --quiet php artisan make:model PianoContiSottoconto --quiet php artisan make:model RegistrazioneContabile --quiet php artisan make:model MovimentoContabilePartitaDoppia --quiet php artisan make:model RipartizioneCondomino --quiet echo -e "${GREEN}βœ… Models creati${NC}" # βœ… 5. CREA SEEDER PIANO CONTI echo -e "${YELLOW}🌱 5. Creazione Seeder Piano Conti...${NC}" php artisan make:seeder PianoContiCondominaleSeeder --quiet echo -e "${GREEN}βœ… Seeder creato${NC}" # βœ… 6. CREA COMMANDS AUTOMAZIONE echo -e "${YELLOW}βš™οΈ 6. Creazione Commands automazione...${NC}" php artisan make:command SetupSistemaContabile --quiet php artisan make:command VerificaPartitaDoppia --quiet php artisan make:command ChiudiGestioneContabile --quiet php artisan make:command RicalcolaTotaliGestione --quiet echo -e "${GREEN}βœ… Commands creati${NC}" # βœ… 7. CREA CONTROLLERS echo -e "${YELLOW}πŸŽ›οΈ 7. Creazione Controllers...${NC}" php artisan make:controller Admin/GestioniContabiliController --resource --quiet php artisan make:controller Admin/RegistrazioniContabiliController --resource --quiet php artisan make:controller Admin/PianoContiController --resource --quiet php artisan make:controller Api/ContabilitaController --api --quiet echo -e "${GREEN}βœ… Controllers creati${NC}" # βœ… 8. VERIFICA MIGRAZIONI ESISTENTI echo -e "${YELLOW}πŸ” 8. Verifica stato migrazioni esistenti...${NC}" php artisan migrate:status echo "" echo -e "${YELLOW}⚠️ ATTENZIONE: Verificare e risolvere eventuali migrazioni duplicate prima di continuare${NC}" echo "" # βœ… 9. RICHIESTA CONFERMA ESECUZIONE MIGRAZIONI read -p "πŸ€” Eseguire le nuove migrazioni sistema contabile? (y/N): " confirm if [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]]; then echo -e "${YELLOW}πŸ“Š 9. Esecuzione migrazioni...${NC}" if php artisan migrate --force; then echo -e "${GREEN}βœ… Migrazioni eseguite con successo${NC}" else echo -e "${RED}❌ Errore durante l'esecuzione delle migrazioni${NC}" echo -e "${YELLOW}πŸ”„ Tentativo di ripristino backup...${NC}" if [ -f "${BACKUP_PATH}/netgescon_pre_contabilita_${DATE}.sql" ]; then mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" < "${BACKUP_PATH}/netgescon_pre_contabilita_${DATE}.sql" echo -e "${GREEN}βœ… Database ripristinato da backup${NC}" fi exit 1 fi else echo -e "${YELLOW}⏸️ Migrazioni saltate - sistema configurato ma non attivato${NC}" fi # βœ… 10. POPOLA PIANO CONTI STANDARD read -p "🌱 Popolare il piano conti standard condominiale? (y/N): " confirm_seed if [[ $confirm_seed == [yY] || $confirm_seed == [yY][eE][sS] ]]; then echo -e "${YELLOW}🌱 10. Popolamento piano conti standard...${NC}" if php artisan db:seed --class=PianoContiCondominaleSeeder --force; then echo -e "${GREEN}βœ… Piano conti popolato${NC}" else echo -e "${RED}❌ Errore durante il popolamento piano conti${NC}" fi else echo -e "${YELLOW}⏸️ Piano conti non popolato${NC}" fi # βœ… 11. CONFIGURAZIONE CONDOMINI echo -e "${YELLOW}🏒 11. Configurazione gestioni per condomini esistenti...${NC}" php artisan tinker --execute=" \$condominii = App\Models\Stabile::all(); echo 'πŸ“Š Condomini trovati: ' . \$condominii->count() . PHP_EOL; foreach (\$condominii as \$condominio) { echo ' - ' . \$condominio->id . ': ' . \$condominio->denominazione . PHP_EOL; } " 2>/dev/null echo "" echo -e "${BLUE}πŸ€” Per configurare le gestioni contabili per ciascun condominio:${NC}" echo -e "${BLUE} php artisan contabilita:setup {condominio_id} {anno}${NC}" # βœ… 12. VERIFICA FINALE echo -e "${YELLOW}βœ… 12. Verifica finale installazione...${NC}" # Conta tabelle create TABELLE_CONTABILI=$(mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "SHOW TABLES LIKE '%contabil%'" | wc -l 2>/dev/null || echo "0") TABELLE_PIANO=$(mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "SHOW TABLES LIKE '%piano_conti%'" | wc -l 2>/dev/null || echo "0") TABELLE_GESTIONI=$(mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "SHOW TABLES LIKE '%gestioni%'" | wc -l 2>/dev/null || echo "0") echo -e "${BLUE}πŸ“Š Riepilogo installazione:${NC}" echo -e "${GREEN} βœ… Tabelle contabili: $TABELLE_CONTABILI${NC}" echo -e "${GREEN} βœ… Tabelle piano conti: $TABELLE_PIANO${NC}" echo -e "${GREEN} βœ… Tabelle gestioni: $TABELLE_GESTIONI${NC}" # βœ… 13. ISTRUZIONI FINALI echo "" echo -e "${BLUE}πŸŽ‰ ===== INSTALLAZIONE COMPLETATA =====${NC}" echo "" echo -e "${GREEN}πŸ“‹ PROSSIMI PASSI:${NC}" echo "" echo -e "${YELLOW}1️⃣ Configurare gestioni per ogni condominio:${NC}" echo -e " ${BLUE}php artisan contabilita:setup 1 2024${NC}" echo "" echo -e "${YELLOW}2️⃣ Verificare partita doppia periodicamente:${NC}" echo -e " ${BLUE}php artisan contabilita:verifica${NC}" echo "" echo -e "${YELLOW}3️⃣ Accedere al portale per iniziare registrazioni:${NC}" echo -e " ${BLUE}http://192.168.0.200:8000/admin/gestioni-contabili${NC}" echo "" echo -e "${YELLOW}4️⃣ Consultare i manuali:${NC}" echo -e " ${BLUE}docs/07-SISTEMA-CONTABILE-CONDOMINIALE.md${NC}" echo -e " ${BLUE}docs/08-IMPLEMENTAZIONE-SISTEMA-CONTABILE-PRATICO.md${NC}" echo "" echo -e "${GREEN}🎯 Il sistema contabile condominiale Γ¨ ora pronto per l'uso!${NC}" echo -e "${GREEN}πŸ’Ž Controllo totale di ogni centesimo garantito dalla partita doppia.${NC}" echo "" echo -e "${YELLOW}πŸ“ž Per supporto: consultare i manuali tecnici nella directory docs/${NC}"