feat: 특이(참고)사항 조회/수정 기능 구현

- 사용자 상세 모달에 특이사항 표시 (생일 옆 칸)
- 인라인 수정 UI (수정 버튼 → textarea → 저장/취소)
- PUT /api/members/{cuscode}/cusetc API 추가
- CD_PERSON.CUSETC 직접 UPDATE

Docs: MEMBER_MEMO_SYSTEM.md 문서 추가
- DB 구조, API 명세, 구현 현황 정리
This commit is contained in:
thug0bin
2026-03-04 11:24:13 +09:00
parent acf8e44aa5
commit 50825c597e
3 changed files with 391 additions and 3 deletions

View File

@@ -1550,9 +1550,9 @@ def admin_user_detail(user_id):
base_session = db_manager.get_session('PM_BASE')
pres_session = db_manager.get_session('PM_PRES')
# 전화번호로 CUSCODE 조회
# 전화번호로 CUSCODE 조회 (특이사항 CUSETC 포함)
cuscode_query = text("""
SELECT TOP 1 CUSCODE, PANAME
SELECT TOP 1 CUSCODE, PANAME, CUSETC
FROM CD_PERSON
WHERE REPLACE(REPLACE(PHONE, '-', ''), ' ', '') = :phone
OR REPLACE(REPLACE(TEL_NO, '-', ''), ' ', '') = :phone
@@ -1562,7 +1562,11 @@ def admin_user_detail(user_id):
if cus_row:
cuscode = cus_row.CUSCODE
pos_customer = {'cuscode': cuscode, 'name': cus_row.PANAME}
pos_customer = {
'cuscode': cuscode,
'name': cus_row.PANAME,
'cusetc': cus_row.CUSETC or '' # 특이(참고)사항
}
# 조제 이력 조회
rx_query = text("""
@@ -3889,6 +3893,42 @@ def api_member_detail(cuscode):
return jsonify({'success': False, 'error': str(e)}), 500
@app.route('/api/members/<cuscode>/cusetc', methods=['PUT'])
def api_update_cusetc(cuscode):
"""특이(참고)사항 수정 API"""
try:
data = request.get_json() or {}
new_cusetc = data.get('cusetc', '').strip()
# 길이 제한 (2000자)
if len(new_cusetc) > 2000:
return jsonify({'success': False, 'error': '특이사항은 2000자를 초과할 수 없습니다.'}), 400
base_session = db_manager.get_session('PM_BASE')
# CUSETC 업데이트
update_query = text("""
UPDATE CD_PERSON
SET CUSETC = :cusetc
WHERE CUSCODE = :cuscode
""")
result = base_session.execute(update_query, {'cusetc': new_cusetc, 'cuscode': cuscode})
base_session.commit()
if result.rowcount == 0:
return jsonify({'success': False, 'error': '해당 고객을 찾을 수 없습니다.'}), 404
return jsonify({
'success': True,
'message': '특이사항이 저장되었습니다.',
'cusetc': new_cusetc
})
except Exception as e:
logging.error(f"특이사항 수정 오류: {e}")
return jsonify({'success': False, 'error': str(e)}), 500
@app.route('/api/members/history/<phone>')
def api_member_history(phone):
"""