82 lines
3.1 KiB
Python
82 lines
3.1 KiB
Python
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."
|
|
)
|
|
)
|