DocX-export added - not perfect yet.
This commit is contained in:
55
dokumente/management/commands/export_docx.py
Normal file
55
dokumente/management/commands/export_docx.py
Normal file
@@ -0,0 +1,55 @@
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
from dokumente.models import Dokument
|
||||
from dokumente.docx_utils import build_standard_docx
|
||||
import os
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Export a Dokument (or all active Dokumente) as Word (.docx) files'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'--nummer',
|
||||
type=str,
|
||||
help='Document number to export (e.g. R0129). Omit to export all active documents.',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--output',
|
||||
type=str,
|
||||
default='.',
|
||||
help='Output directory (default: current directory)',
|
||||
)
|
||||
|
||||
def handle(self, *args, **options):
|
||||
output_dir = options['output']
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
|
||||
if options['nummer']:
|
||||
try:
|
||||
dokumente = [Dokument.objects.prefetch_related(
|
||||
'autoren', 'pruefende', 'vorgaben__thema',
|
||||
'vorgaben__referenzen', 'vorgaben__checklistenfragen',
|
||||
'vorgaben__vorgabekurztext_set__abschnitttyp',
|
||||
'vorgaben__vorgabelangtext_set__abschnitttyp',
|
||||
'geltungsbereich_set__abschnitttyp',
|
||||
'einleitung_set__abschnitttyp',
|
||||
'changelog__autoren',
|
||||
).get(nummer=options['nummer'])]
|
||||
except Dokument.DoesNotExist:
|
||||
raise CommandError(f"Dokument with nummer '{options['nummer']}' not found.")
|
||||
else:
|
||||
dokumente = Dokument.objects.filter(aktiv=True).prefetch_related(
|
||||
'autoren', 'pruefende', 'vorgaben__thema',
|
||||
'vorgaben__referenzen', 'vorgaben__checklistenfragen',
|
||||
'vorgaben__vorgabekurztext_set__abschnitttyp',
|
||||
'vorgaben__vorgabelangtext_set__abschnitttyp',
|
||||
'geltungsbereich_set__abschnitttyp',
|
||||
'einleitung_set__abschnitttyp',
|
||||
'changelog__autoren',
|
||||
).order_by('nummer')
|
||||
|
||||
for dokument in dokumente:
|
||||
doc = build_standard_docx(dokument)
|
||||
filename = os.path.join(output_dir, f'{dokument.nummer}.docx')
|
||||
doc.save(filename)
|
||||
self.stdout.write(self.style.SUCCESS(f'Exported {dokument.nummer} → {filename}'))
|
||||
Reference in New Issue
Block a user