diff --git a/app/routes/issues.py b/app/routes/issues.py index e4f76db..66fb777 100644 --- a/app/routes/issues.py +++ b/app/routes/issues.py @@ -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) diff --git a/app/templates/issues/list.html b/app/templates/issues/list.html index de91c66..cfef68a 100644 --- a/app/templates/issues/list.html +++ b/app/templates/issues/list.html @@ -40,9 +40,18 @@ +