기능 추가 — 재조치 요청 (조치 기록 유지 재출동)
정비사 조치 완료 후 동일 문제 재발 시 관리자가 기존 기록을 보존한 채
재조치를 요청할 수 있는 기능 추가.
- DB: repairs.re_dispatch_requested/at, reports.re_dispatch_count 컬럼 추가
- 재조치 요청 엔드포인트 (POST /repairs/{id}/re-dispatch): 기존 repair에 플래그,
연결 신고를 pending으로 복원, re_dispatch_count 증가
- pending 상태 신고는 새 조치 생성으로 분기 (in_progress만 기존 수정 모드)
- report-detail: 조치승인·취소 사이에 "🔁 재조치 요청" 버튼, 이전 조치 이력 카드
- 정비사 대시보드: 재조치 건에 🔁 뱃지 및 강조 버튼색 표시
- 엑셀 export: 재조치횟수 컬럼 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -203,11 +203,11 @@ def get_report(report_id: int, db: Session = Depends(get_db),
|
||||
r = db.query(models.Report).filter_by(id=report_id).first()
|
||||
if not r: raise HTTPException(404)
|
||||
result = _fmt_report(r, db)
|
||||
# 수리 정보 포함
|
||||
if r.repair_links:
|
||||
repair = r.repair_links[0].repair
|
||||
result["re_dispatch_count"] = r.re_dispatch_count or 0
|
||||
# 수리 정보 포함 — repair_links를 id 내림차순(최신 우선)으로 정렬
|
||||
def _fmt_one_repair(repair, include_cost=True):
|
||||
cost = repair.cost
|
||||
result["repair"] = {
|
||||
return {
|
||||
"id": repair.id,
|
||||
"mechanic_name": repair.mechanic.name if repair.mechanic else None,
|
||||
"mechanic_company": repair.mechanic.company if repair.mechanic else None,
|
||||
@@ -222,6 +222,8 @@ def get_report(report_id: int, db: Session = Depends(get_db),
|
||||
"charger_lng": r.charger.gps_lng if r.charger else None,
|
||||
"approved_at": repair.approved_at.isoformat() if repair.approved_at else None,
|
||||
"approved_by_name": repair.approver.name if repair.approved_by and repair.approver else None,
|
||||
"re_dispatch_requested": repair.re_dispatch_requested or False,
|
||||
"re_dispatch_requested_at": repair.re_dispatch_requested_at.isoformat() if repair.re_dispatch_requested_at else None,
|
||||
"photos_before": [p.file_path for p in repair.photos if p.photo_type == "before"],
|
||||
"photos_after": [p.file_path for p in repair.photos if p.photo_type == "after"],
|
||||
"cost": {
|
||||
@@ -232,9 +234,19 @@ def get_report(report_id: int, db: Session = Depends(get_db),
|
||||
"cost_amount": cost.cost_amount,
|
||||
"cost_status": cost.cost_status,
|
||||
"manufacturer_name": cost.manufacturer.name if cost.manufacturer else None,
|
||||
} if cost else None,
|
||||
"linked_improvements": _get_linked_improvements(repair, db),
|
||||
} if (cost and include_cost) else None,
|
||||
"linked_improvements": _get_linked_improvements(repair, db) if include_cost else [],
|
||||
}
|
||||
|
||||
if r.repair_links:
|
||||
sorted_links = sorted(r.repair_links, key=lambda l: l.repair_id, reverse=True)
|
||||
result["repair"] = _fmt_one_repair(sorted_links[0].repair)
|
||||
# 재조치로 인한 이전 조치 이력 (최신 제외, re_dispatch_requested=True인 것)
|
||||
result["prev_repairs"] = [
|
||||
_fmt_one_repair(link.repair, include_cost=False)
|
||||
for link in sorted_links[1:]
|
||||
if link.repair
|
||||
]
|
||||
return result
|
||||
|
||||
def _get_linked_improvements(repair, db):
|
||||
|
||||
Reference in New Issue
Block a user