#!/usr/bin/env python3 from flask import Flask, request, jsonify, send_file from flask_cors import CORS import tempfile import os from processors import parse_laufzettel, fill_pdf, analyze_pdf, generate_vorbericht app = Flask(__name__) CORS(app) TEMPLATES_DIR = '/opt/stacks/spa-hosting/html/schadenprotokoll/templates' @app.route('/health', methods=['GET']) def health(): return jsonify({'status': 'ok'}) @app.route('/generate', methods=['POST']) def generate(): # Akzeptiert template (PDF) und laufzettel (DOCX) if 'template' not in request.files or 'laufzettel' not in request.files: return jsonify({'error': 'template und laufzettel erforderlich'}), 400 template_file = request.files['template'] laufzettel_file = request.files['laufzettel'] if not template_file.filename.endswith('.pdf'): return jsonify({'error': 'Template muss PDF sein'}), 400 if not laufzettel_file.filename.endswith('.docx'): return jsonify({'error': 'Laufzettel muss DOCX sein'}), 400 with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp_tpl: template_file.save(tmp_tpl.name) with tempfile.NamedTemporaryFile(suffix='.docx', delete=False) as tmp_lz: laufzettel_file.save(tmp_lz.name) try: data = parse_laufzettel(tmp_lz.name) with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp_out: fill_pdf(tmp_tpl.name, tmp_out.name, data) os.unlink(tmp_tpl.name) os.unlink(tmp_lz.name) return send_file(tmp_out.name, mimetype='application/pdf', as_attachment=True, download_name='Schadenprotokoll_vorbefuellt.pdf') except Exception as e: os.unlink(tmp_tpl.name) os.unlink(tmp_lz.name) return jsonify({'error': str(e)}), 500 @app.route('/analyze', methods=['POST']) def analyze(): if 'file' not in request.files: return jsonify({'error': 'Keine Datei'}), 400 file = request.files['file'] with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp: file.save(tmp.name) try: result = analyze_pdf(tmp.name) os.unlink(tmp.name) return jsonify({'success': True, 'data': result}) except Exception as e: os.unlink(tmp.name) return jsonify({'error': str(e)}), 500 @app.route('/vorbericht', methods=['POST']) def vorbericht(): if 'file' not in request.files: return jsonify({'error': 'Keine Datei'}), 400 file = request.files['file'] template_docx = os.path.join(TEMPLATES_DIR, 'vorbericht.docx') with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp_in: file.save(tmp_in.name) try: pdf_data = analyze_pdf(tmp_in.name) with tempfile.NamedTemporaryFile(suffix='.docx', delete=False) as tmp_out: generate_vorbericht(pdf_data, template_docx, tmp_out.name) os.unlink(tmp_in.name) return send_file(tmp_out.name, mimetype='application/vnd.openxmlformats-officedocument.wordprocessingml.document', as_attachment=True, download_name='Vorbericht.docx') except Exception as e: os.unlink(tmp_in.name) return jsonify({'error': str(e)}), 500 @app.route('/templates', methods=['GET']) def list_templates(): templates = [] for f in os.listdir(TEMPLATES_DIR): if not f.endswith('.bak'): path = os.path.join(TEMPLATES_DIR, f) templates.append({'name': f, 'size': os.path.getsize(path)}) return jsonify({'templates': templates}) if __name__ == '__main__': app.run(host='0.0.0.0', port=5050, debug=False)