o
    ppi                     @   s  d Z ddlmZmZmZmZ ddlmZmZ ddl	m
Z
 ddlmZ ddlmZ eddgd	Zed
edfdeeef fddZededfdeeef fddZededddfdefddZededddfdefddZededddfdefddZededfdeeef fddZed eded!fded"efd#d$Zed%eded!fded"efd&d'Zd(S ))u   
現在地とチーム基準: 버튼 클릭 시 진입. 개인 실적 → 분기 계획 → 팀 시트.
今の達成状況 進入時に user_profile_summary.a_part_status を 1 に更新。
    )	APIRouterHTTPExceptionBodyQuery)DictAny)insert_sales_sheet_records)current_position_module)update_a_part_statusz%/goalskill-sales/api/current-positionCurrentPosition)prefixtagsz/achievement.payloadc              
      s*  |  d}|  dpd}|  dpi }|stdddg }| D ]J\}}zt|}W n ttfy7   Y q"w |dk s@|d	krAq"z|d
urJt|nd
}W n ttfyZ   d
}Y nw |d
u r`q"||d|d||d q"|suddddS zt|}	dd|	dW S  t	y }
 ztdt
|
dd
}
~
ww )u   
    session_id, period_type(例: quarter), achievements: { "1": 100, "2": 50, ... }
    → sales_sheet_data に sheet_type=1s, record_type=result で保存。
    
session_idperiod_typequarterachievements  session_id requiredstatus_codedetail   	   N1sresult)r   
sheet_typer   record_typecategoryvalueFu'   有効な達成数がありません。r   okmessagecountT   保存しました。  )getr   itemsint	TypeError
ValueErrorfloatappendr   	Exceptionstr)r   r   r   r   recordscat_strvalcatvr#   e r5   E/home/air/goalskill_sales/back/app/routers/current_position_router.pysave_achievement   sN   

r7   z/set-a-part-completec              
      s\   |  d}|stdddzt|d dddW S  ty- } ztd	t|dd
}~ww )u}   
    今の達成状況 ボタン押下時に A-part 完了扱い: user_profile_summary.a_part_status を 1 に更新。
    r   r   r   r   r   Tza_part_status updated to 1)r!   r"   r%   N)r&   r   r
   r-   r.   )r   r   r4   r5   r5   r6   set_a_part_complete>   s   

r8   z/targetsr   )descriptionc              
      8   zt | W S  ty } ztdt|dd}~ww )uI   
    1s, quarter の 카테고리별 목표치 조회 (2,3,4,5,6,8).
    r%   r   N)	cp_moduleget_quarter_targetsr-   r   r.   r   r4   r5   r5   r6   get_targetsM      r>   z/targets-and-resultsc              
      r:   )uf   
    1s, quarter の target + result を取得（02/19データ・フォーム事前表示用）.
    r%   r   N)r;   get_quarter_targets_and_resultsr-   r   r.   r=   r5   r5   r6   get_targets_and_resultsX   r?   rA   z/user-achievement-summaryc              
      r:   )u8   
    個人のみ 達成率 요약（팀 없이）.
    r%   r   N)r;   get_user_achievement_summaryr-   r   r.   r=   r5   r5   r6   rB   c   r?   rB   z/quarter-planc              
      s   |  d}|  dpd}|  dpi }|stdddzt|||}|dkr/d	d
ddW S dd|dW S  tyI } ztdt|dd}~ww )uc   
    session_id, period_type, plans: { "2": 400, "3": 70, ... } → sales_quarter_plan 저장.
    r   r   r   plansr   r   r   r   Fu$   有効な計画がありません。r    Tr$   r%   N)r&   r   r;   save_quarter_planr-   r.   )r   r   r   rC   r#   r4   r5   r5   r6   rD   n   s   
rD   z/quarter-plan-summaryr   r   c              
      :   zt | |W S  ty } ztdt|dd}~ww )u4   계획 달성률 요약 (target + planned → rate).r%   r   N)r;   get_quarter_plan_summaryr-   r   r.   r   r   r4   r5   r5   r6   rF         rF   z/comparisonc              
      rE   )u?   유저 계획 달성율 vs 팀 달성율 비교 (그래프용).r%   r   N)r;   get_comparison_datar-   r   r.   rG   r5   r5   r6   get_comparison   rH   rJ   N)__doc__fastapir   r   r   r   typingr   r   app.models.sales_sheet_moduler   
app.modelsr	   r;   app.models.general_moduler
   routerpostr.   r7   r8   r&   r>   rA   rB   rD   rF   rJ   r5   r5   r5   r6   <module>   sX    
+ 



