05/24 Enhance functionalities
This commit is contained in:
+29
-1
@@ -2,9 +2,11 @@
|
||||
routes/bid_tracker.py — Bid / Opportunity tracker routes.
|
||||
"""
|
||||
|
||||
import csv
|
||||
import io
|
||||
import logging
|
||||
from flask import (Blueprint, render_template, request, redirect, url_for,
|
||||
flash, session, jsonify)
|
||||
flash, session, jsonify, Response)
|
||||
from models import (
|
||||
get_all_bids, get_bid, create_bid, update_bid, delete_bid,
|
||||
get_bid_updates, add_bid_update, delete_bid_update, BID_STATUSES,
|
||||
@@ -276,3 +278,29 @@ def send_reminders():
|
||||
flash(f"Failed to send email: {e}", "danger")
|
||||
|
||||
return redirect(url_for("bid_tracker.bids_list"))
|
||||
|
||||
|
||||
@bid_tracker_bp.route("/export.csv")
|
||||
@login_required
|
||||
def export_csv():
|
||||
status = request.args.get("status", "")
|
||||
bids = get_all_bids(status_filter=status, limit=10000, offset=0)
|
||||
buf = io.StringIO()
|
||||
writer = csv.writer(buf)
|
||||
writer.writerow([
|
||||
"ID", "Title", "Source", "Solicitation #", "Status",
|
||||
"Due Date", "URL", "Notes", "Added By", "Created At",
|
||||
])
|
||||
for b in bids:
|
||||
writer.writerow([
|
||||
b["id"], b.get("title", ""), b.get("source", ""),
|
||||
b.get("solicitation_number", ""), b.get("status", ""),
|
||||
str(b.get("due_date") or ""), b.get("url", ""),
|
||||
b.get("notes", ""), b.get("added_by_username", ""),
|
||||
str(b.get("created_at") or ""),
|
||||
])
|
||||
return Response(
|
||||
buf.getvalue(),
|
||||
mimetype="text/csv",
|
||||
headers={"Content-Disposition": "attachment; filename=bids_export.csv"},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user