implementation of the Email add on
Release Inventarsystem / release-docker (push) Successful in 2m24s
Release Inventarsystem / release-docker (push) Successful in 2m24s
This commit is contained in:
+77
-7
@@ -48,7 +48,7 @@ import Web.modules.log.audit_log as al
|
||||
import push_notifications as pn
|
||||
import Web.modules.inventarsystem.pdf_export as pdf_export
|
||||
import Web.modules.inventarsystem.excel_export as excel_export
|
||||
from Web.modules.emailservice.email import send
|
||||
from Web.modules.emailservice.email import send, send_pdf
|
||||
import datetime
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from bson.objectid import ObjectId, InvalidId
|
||||
@@ -4892,7 +4892,8 @@ def student_cards_admin():
|
||||
edit_mode=edit_mode,
|
||||
form_data=form_data,
|
||||
available_classes=available_classes, # Enthält nun die lesbaren Klassen
|
||||
config=cfg.get_school_info()
|
||||
config=cfg.get_school_info(),
|
||||
email_service_enabled=cfg.MODULES.is_enabled('mail')
|
||||
)
|
||||
|
||||
|
||||
@@ -5353,7 +5354,7 @@ def student_card_class_barcode_download():
|
||||
flash('Fehler beim PDF-Download', 'error')
|
||||
return redirect(url_for('student_cards_admin'))
|
||||
|
||||
@app.route('/student_card_single_barcode_download/<card_id>', methods=['GET'])
|
||||
@app.route('/student_card_single_barcode_download/<card_id>', methods=['GET', 'POST'])
|
||||
def student_card_single_barcode_download(card_id):
|
||||
"""
|
||||
Download PDF with single student card barcode.
|
||||
@@ -5533,11 +5534,34 @@ def student_card_single_barcode_download(card_id):
|
||||
c.save()
|
||||
pdf_buffer.seek(0)
|
||||
|
||||
pdf_filename = f'ausweis_{card["AusweisId"]}.pdf'
|
||||
if request.method == 'POST':
|
||||
recipient_email = (request.form.get('recipient_email') or '').strip()
|
||||
if not recipient_email:
|
||||
flash('Bitte eine Empfänger-E-Mail-Adresse eingeben oder nur PDF auswählen.', 'error')
|
||||
return redirect(url_for('student_cards_admin'))
|
||||
if not cfg.MODULES.is_enabled('mail'):
|
||||
flash('Das E-Mail-Add-on ist deaktiviert. Der Ausweis kann weiterhin als PDF heruntergeladen werden.', 'warning')
|
||||
return redirect(url_for('student_cards_admin'))
|
||||
sent = send_pdf(
|
||||
recipient_email,
|
||||
f'Bibliotheksausweis {card["AusweisId"]}',
|
||||
f'Anbei erhalten Sie den Bibliotheksausweis für {card.get("SchülerName", "")} als PDF.',
|
||||
'Bibliotheksverwaltung',
|
||||
pdf_buffer.getvalue(),
|
||||
pdf_filename,
|
||||
)
|
||||
flash(
|
||||
'Bibliotheksausweis wurde per E-Mail versendet.' if sent else 'Bibliotheksausweis konnte nicht per E-Mail versendet werden.',
|
||||
'success' if sent else 'error',
|
||||
)
|
||||
return redirect(url_for('student_cards_admin'))
|
||||
|
||||
return send_file(
|
||||
pdf_buffer,
|
||||
mimetype='application/pdf',
|
||||
as_attachment=True,
|
||||
download_name=f'ausweis_{card["AusweisId"]}.pdf'
|
||||
download_name=pdf_filename
|
||||
)
|
||||
except Exception as e:
|
||||
app.logger.error(f"Error occurred while generating PDF for card {card['AusweisId']}: {e}")
|
||||
@@ -8959,7 +8983,8 @@ def admin_borrowings():
|
||||
entries=entries,
|
||||
library_module_enabled=cfg.MODULES.is_enabled('library'),
|
||||
student_cards_module_enabled=cfg.MODULES.is_enabled('student_cards'),
|
||||
mail_module_enabled=cfg.MODULES.is_enabled('mail')
|
||||
mail_module_enabled=cfg.MODULES.is_enabled('mail'),
|
||||
email_service_enabled=cfg.MODULES.is_enabled('mail')
|
||||
)
|
||||
|
||||
"""-----------------------------------------------------------Audit Routes-------------------------------------------------------"""
|
||||
@@ -9051,7 +9076,7 @@ def admin_audit_dashboard():
|
||||
if client:
|
||||
client.close()
|
||||
|
||||
@app.route('/admin/audit/export/pdf/official', methods=['GET'])
|
||||
@app.route('/admin/audit/export/pdf/official', methods=['GET', 'POST'])
|
||||
def admin_audit_export_pdf_official():
|
||||
"""Export audit report as professional PDF (Official Report - full DIN 5008 compliant)."""
|
||||
if 'username' not in session:
|
||||
@@ -9118,6 +9143,29 @@ def admin_audit_export_pdf_official():
|
||||
export_type='official',
|
||||
school_info=school_info
|
||||
)
|
||||
|
||||
if request.method == 'POST':
|
||||
recipient_email = (request.form.get('recipient_email') or '').strip()
|
||||
if not recipient_email:
|
||||
flash('Bitte eine Empfänger-E-Mail-Adresse eingeben oder nur PDF auswählen.', 'error')
|
||||
return redirect(url_for('admin_audit_dashboard'))
|
||||
if not cfg.MODULES.is_enabled('mail'):
|
||||
flash('Das E-Mail-Add-on ist deaktiviert. Der Auditbericht kann weiterhin als PDF heruntergeladen werden.', 'warning')
|
||||
return redirect(url_for('admin_audit_dashboard'))
|
||||
filename = f'audit-official-report-{datetime.datetime.now(ZoneInfo("Europe/Berlin")).strftime("%Y%m%d-%H%M%S")}.pdf'
|
||||
sent = send_pdf(
|
||||
recipient_email,
|
||||
'Amtlicher Auditbericht',
|
||||
'Anbei erhalten Sie den aktuellen amtlichen Auditbericht des Inventarsystems als PDF.',
|
||||
'Inventarsystem',
|
||||
pdf_content,
|
||||
filename,
|
||||
)
|
||||
flash(
|
||||
'Auditbericht wurde per E-Mail versendet.' if sent else 'Auditbericht konnte nicht per E-Mail versendet werden.',
|
||||
'success' if sent else 'error',
|
||||
)
|
||||
return redirect(url_for('admin_audit_dashboard'))
|
||||
|
||||
response = make_response(pdf_content)
|
||||
response.headers['Content-Type'] = 'application/pdf'
|
||||
@@ -9492,11 +9540,33 @@ def admin_create_invoice(borrow_id):
|
||||
)
|
||||
|
||||
pdf_buffer = pdf_export._build_invoice_pdf(invoice_data)
|
||||
pdf_filename = f'rechnung_{invoice_number}.pdf'
|
||||
if request.form.get('delivery') == 'email':
|
||||
recipient_email = (request.form.get('recipient_email') or '').strip()
|
||||
if not recipient_email:
|
||||
flash('Bitte eine Empfänger-E-Mail-Adresse eingeben oder nur PDF auswählen.', 'error')
|
||||
return redirect(url_for('admin_borrowings'))
|
||||
if not cfg.MODULES.is_enabled('mail'):
|
||||
flash('Das E-Mail-Add-on ist deaktiviert. Die PDF-Rechnung kann weiterhin heruntergeladen werden.', 'warning')
|
||||
return redirect(url_for('admin_borrowings'))
|
||||
sent = send_pdf(
|
||||
recipient_email,
|
||||
f'Rechnung {invoice_number} - {item_name}',
|
||||
f'Anbei erhalten Sie die Rechnung {invoice_number} zum Element {item_name}.',
|
||||
'Bibliotheksverwaltung',
|
||||
pdf_buffer.getvalue(),
|
||||
pdf_filename,
|
||||
)
|
||||
flash(
|
||||
'PDF-Rechnung wurde per E-Mail versendet.' if sent else 'PDF-Rechnung konnte nicht per E-Mail versendet werden.',
|
||||
'success' if sent else 'error',
|
||||
)
|
||||
return redirect(url_for('admin_borrowings'))
|
||||
return send_file(
|
||||
pdf_buffer,
|
||||
mimetype='application/pdf',
|
||||
as_attachment=True,
|
||||
download_name=f'rechnung_{invoice_number}.pdf'
|
||||
download_name=pdf_filename
|
||||
)
|
||||
except Exception as e:
|
||||
app.logger.error(f"Error creating damage invoice for borrow {borrow_id}: {e}")
|
||||
|
||||
Reference in New Issue
Block a user