import os from django.core.management.base import BaseCommand from django.contrib.auth import get_user_model from django.core.files import File from documents.models import ManagedDocument, DocumentVersion, DocumentShare, DocumentFolder User = get_user_model() class Command(BaseCommand): help = "Crée automatiquement un document IFC d'exemple dans la gestion documentaire et l'attache à un dossier partagé." def handle(self, *args, **options): users = User.objects.filter(is_active=True) if not users.exists(): self.stderr.write(self.style.ERROR("Aucun utilisateur actif disponible.")) return creator = users.filter(is_superuser=True).first() or users.first() samples_dir = os.path.join(os.path.dirname(__file__), "..", "..", "samples") sample_file_path = os.path.join(samples_dir, "Duplex_Architecture.ifc") if not os.path.exists(sample_file_path): self.stderr.write(self.style.ERROR(f"Fichier d'exemple non trouvé à l'emplacement : {sample_file_path}")) return # Ensure a root folder "Maquettes 3D (BIM)" exists so the document is visible in folder navigation folder, _ = DocumentFolder.objects.get_or_create( slug="maquettes-3d-bim", defaults={ "name": "Maquettes 3D (BIM)", "created_by": creator, } ) # Share folder with all active users for user in users: DocumentFolder.objects.filter(pk=folder.pk).update() folder.shares.get_or_create( user=user, defaults={"permission": ManagedDocument.PERMISSION_VIEW} ) title = "Duplex_Architecture" doc, created = ManagedDocument.objects.get_or_create( title=title, defaults={ "description": "Exemple de maquette 3D au format IFC pour tests du viewer BIM (openBIM Duplex).", "created_by": creator, } ) # Attach folder to document doc.folders.add(folder) if not doc.current_version: with open(sample_file_path, "rb") as f: version = DocumentVersion.objects.create( document=doc, version_number=1, file=File(f, name="Duplex_Architecture.ifc"), uploaded_by=creator, description="Version initiale d'exemple IFC" ) doc.current_version = version doc.save(update_fields=["current_version"]) # Share document with all active users so everyone can find it in Document Management for user in users: DocumentShare.objects.get_or_create( document=doc, user=user, defaults={"permission": ManagedDocument.PERMISSION_VIEW} ) self.stdout.write( self.style.SUCCESS( f"Document d'exemple IFC disponible dans le dossier 'Maquettes 3D (BIM)' (UUID: {doc.uuid}) - Partagé avec {users.count()} utilisateurs." ) )