05/26 Add Contract filter in Issues page

This commit is contained in:
2026-05-26 11:47:58 -04:00
parent 175f514033
commit c944b3a0b3
2 changed files with 71 additions and 11 deletions
+24 -8
View File
@@ -108,11 +108,20 @@ def index():
status_filter = request.args.get('status', '')
sla_filter = request.args.get('sla', '')
facility_filter = request.args.get('facility_id', '')
contract_filter = request.args.get('contract_id', '')
if severity_filter:
q = q.filter(Issue.severity == severity_filter)
if status_filter:
q = q.filter(Issue.status == status_filter)
if contract_filter.isdigit():
_contract_fids = [
f.id for f in Facility.query.filter_by(project_id=int(contract_filter)).all()
]
q = q.filter(db.or_(
Issue.facility_id.in_(_contract_fids),
Area.facility_id.in_(_contract_fids),
)) if _contract_fids else q.filter(False)
if facility_filter:
fid = int(facility_filter)
q = q.filter(
@@ -144,19 +153,24 @@ def index():
for f in IssueFollower.query.filter_by(user_id=current_user.id).all()
}
# Facilities for the filter dropdown — scoped for inspectors/customers
# Facilities for the filter dropdown — scoped for inspectors/customers,
# then narrowed to the selected contract when contract_filter is active.
if current_user.role == 'inspector':
fids = get_inspector_scope(current_user) or []
facilities = Facility.query.filter(
Facility.id.in_(fids), Facility.active == True
).order_by(Facility.name).all()
_fq = Facility.query.filter(Facility.id.in_(fids), Facility.active == True)
elif current_user.role == 'customer':
facility_ids = get_customer_scope(current_user) or []
facilities = Facility.query.filter(
Facility.id.in_(facility_ids), Facility.active == True
).order_by(Facility.name).all()
_fq = Facility.query.filter(Facility.id.in_(facility_ids), Facility.active == True)
else:
facilities = Facility.query.filter_by(active=True).order_by(Facility.name).all()
_fq = Facility.query.filter_by(active=True)
if contract_filter.isdigit():
_fq = _fq.filter(Facility.project_id == int(contract_filter))
facilities = _fq.order_by(Facility.name).all()
from app.models.project import Project
projects = Project.query.filter_by(active=True).order_by(Project.name).all()
# Staff for quick-assign dropdown — same roles as the full issue form
staff = User.query.filter(
@@ -169,7 +183,9 @@ def index():
status_filter=status_filter,
sla_filter=sla_filter,
facility_filter=facility_filter,
contract_filter=contract_filter,
facilities=facilities,
projects=projects,
staff=staff,
followed_ids=followed_ids)