first commit
This commit is contained in:
commit
e6c52820cd
227 changed files with 16156 additions and 0 deletions
78
modules/crm/web.py
Normal file
78
modules/crm/web.py
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
from flask import Blueprint, request, jsonify, url_for
|
||||
from typing import List
|
||||
from modules.crm.search import filter_prospects
|
||||
|
||||
crm_api_bp = Blueprint("crm_api", __name__, url_prefix="/api/crm")
|
||||
|
||||
|
||||
@crm_api_bp.get("/prospects/search")
|
||||
def prospects_search():
|
||||
"""
|
||||
API de recherche/filtre prospects.
|
||||
Paramètres (query string):
|
||||
- q: recherche globale (nom, email, société, ville)
|
||||
- name, email, company, status, city: filtres spécifiques (contient, sauf status: égal insensible à la casse)
|
||||
- tags: liste séparée par des virgules (tous doivent être présents)
|
||||
- date_from, date_to: période sur created_at (YYYY-MM-DD)
|
||||
"""
|
||||
q = request.args.get("q")
|
||||
name = request.args.get("name")
|
||||
email = request.args.get("email")
|
||||
company = request.args.get("company")
|
||||
status = request.args.get("status")
|
||||
city = request.args.get("city")
|
||||
tags_raw = request.args.get("tags") or ""
|
||||
tags: List[str] = [t.strip() for t in tags_raw.split(",")] if tags_raw else []
|
||||
date_from = request.args.get("date_from") or None
|
||||
date_to = request.args.get("date_to") or None
|
||||
|
||||
results = filter_prospects(
|
||||
q=q,
|
||||
name=name,
|
||||
email=email,
|
||||
company=company,
|
||||
status=status,
|
||||
city=city,
|
||||
tags=tags,
|
||||
date_from=date_from,
|
||||
date_to=date_to,
|
||||
)
|
||||
|
||||
# Enrichit avec des URLs navigables
|
||||
enriched = []
|
||||
for it in results:
|
||||
new_it = dict(it)
|
||||
# URL principale (prospect)
|
||||
try:
|
||||
new_it["url"] = url_for("prospect_details", prospect_id=it.get("id"))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
related = []
|
||||
cid = it.get("client_id")
|
||||
if cid:
|
||||
try:
|
||||
related.append({"type": "client", "url": url_for("client_details", client_id=cid)})
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
pids = it.get("project_ids") or []
|
||||
for pid in pids:
|
||||
try:
|
||||
related.append({"type": "project", "url": url_for("project_details", project_id=pid)})
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if related:
|
||||
new_it["related"] = related
|
||||
|
||||
# S'assure que le type est présent
|
||||
new_it["entity_type"] = new_it.get("entity_type") or "prospect"
|
||||
enriched.append(new_it)
|
||||
|
||||
return jsonify(
|
||||
{
|
||||
"count": len(enriched),
|
||||
"results": enriched,
|
||||
}
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue