§
    —–j<   ã                  ó`   — d dl mZ d dlZd dlmZ  ej        e¦  «        Z G d„ d¦  «        ZdS )é    )ÚannotationsN)ÚAnyc                  ó,   — e Zd Z	 	 	 	 ddd„Z	 ddd„ZdS )ÚErpAiBudgetMixinNÚchatÚ
agent_codeÚstrÚprompt_tokensÚintÚcompletion_tokensÚcost_vndú
Any | NoneÚ	task_typeÚ
user_emailú
str | NoneÚquery_previewÚreturnúdict[str, Any]c           
     óè  — ||z   }|€d}	t          |dz  |	z  d¦  «        }d}
||||||||r t          |¦  «        dk    r|dd…         dz   n|dœ}|                      ¦   «         5 }|                     ¦   «         5 }|                     |
|¦  «         |                     ¦   «          |                     ¦   «         cddd¦  «         cddd¦  «         S # 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )	uO   Ghi nháº­n váº¿t sá»­ dá»¥ng token vÃ  chi phÃ­ ngÃ¢n sÃ¡ch cho nhÃ¢n viÃªn AI.Ng      I@g     @�@é   a£  
            INSERT INTO erp_ai_agent_usage_logs (
                agent_code, task_type, prompt_tokens, completion_tokens,
                total_tokens, cost_vnd, user_email, query_preview
            ) VALUES (
                %(agent_code)s, %(task_type)s, %(prompt_tokens)s, %(completion_tokens)s,
                %(total_tokens)s, %(cost_vnd)s, %(user_email)s, %(query_preview)s
            ) RETURNING *;
        éú   z...)r   r   r
   r   Útotal_tokensr   r   r   )ÚroundÚlenÚget_connectionÚcursorÚexecuteÚcommitÚfetchone)Úselfr   r
   r   r   r   r   r   r   Úcost_per_1kÚsqlÚparamsÚconnÚcurs                 ú@C:\Projects\DSCons\app\core\postgres\clients\ai_budget_client.pyÚlog_ai_agent_usagez#ErpAiBudgetMixin.log_ai_agent_usage
   s»  € ð %Ð'8Ñ8ˆð ÐØˆKÝ˜l¨VÑ3°{ÑBÀAÑFÔFˆHðˆð %Ø"Ø*Ø!2Ø(Ø Ø$àðÝ!$ ]Ñ!3Ô!3°cÒ!9Ð!9ð ,¨D¨S¨DÔ1°EÑ9Ð9àð
ð 
ˆð × Ò Ñ"Ô"ð 	" d¨D¯KªK©M¬Mð 	"¸SØ�KŠK˜˜VÑ$Ô$Ð$Ø�KŠK‰MŒMˆMØ—<’<‘>”>ð	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"s6   Á#C'Á8>CÂ6C'ÃC	ÃC'ÃC	ÃC'Ã'C+Ã.C+c                ól  — d}g }|r|dz  }|                      |¦  «         d|› d�}|                      ¦   «         5 }|                     ¦   «         5 }|                     ||¦  «         |                     ¦   «         }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   g }d}	d}
d}d}|D �]?}t          |d         ¦  «        }t          |d         ¦  «        }|d	k    rt          ||z  d
z  d¦  «        nd}t          |d         ¦  «        }t          |d         ¦  «        }|d	k    rt          ||z  d
z  d¦  «        nd}t          |d         ¦  «        }t          |d         ¦  «        }|d	k    rt          ||z  d
z  d¦  «        nd}t          |d         ¦  «        }t          |d         ¦  «        }|d	k    rt          ||z  d
z  d¦  «        nd}|	|z  }	|
|z  }
||z  }||z  }|                      |d         |d         |d         |d         t          |d         ¦  «        |d         |d         |||t          |d         ¦  «        t          |d         ¦  «        dœ|||t          |d         ¦  «        t          |d         ¦  «        dœ|||t          |d         ¦  «        t          |d         ¦  «        dœ|||t          |d          ¦  «        t          |d!         ¦  «        dœd"œ¦  «         �ŒA|t          |	d#¦  «        t          |
d#¦  «        t          |d#¦  «        t          |d#¦  «        d$œS )%u^   Tá»•ng há»£p ngÃ¢n sÃ¡ch Ä‘Ã£ sá»­ dá»¥ng theo ngÃ y, tuáº§n, thÃ¡ng, nÄƒm cho nhÃ¢n viÃªn AI.zWHERE b.is_active = TRUEz AND b.agent_code = %sa¦  
            SELECT 
                b.agent_code,
                b.display_name,
                b.role_title,
                b.avatar_icon,
                b.daily_budget_vnd,
                b.weekly_budget_vnd,
                b.monthly_budget_vnd,
                b.yearly_budget_vnd,
                b.cost_per_1k_tokens_vnd,
                b.model_name,
                b.provider,
                COALESCE(SUM(l.cost_vnd) FILTER (WHERE l.created_at >= date_trunc('day', NOW())), 0) AS day_spent_vnd,
                COALESCE(SUM(l.total_tokens) FILTER (WHERE l.created_at >= date_trunc('day', NOW())), 0) AS day_tokens,
                COALESCE(COUNT(l.id) FILTER (WHERE l.created_at >= date_trunc('day', NOW())), 0) AS day_requests,
                COALESCE(SUM(l.cost_vnd) FILTER (WHERE l.created_at >= date_trunc('week', NOW())), 0) AS week_spent_vnd,
                COALESCE(SUM(l.total_tokens) FILTER (WHERE l.created_at >= date_trunc('week', NOW())), 0) AS week_tokens,
                COALESCE(COUNT(l.id) FILTER (WHERE l.created_at >= date_trunc('week', NOW())), 0) AS week_requests,
                COALESCE(SUM(l.cost_vnd) FILTER (WHERE l.created_at >= date_trunc('month', NOW())), 0) AS month_spent_vnd,
                COALESCE(SUM(l.total_tokens) FILTER (WHERE l.created_at >= date_trunc('month', NOW())), 0) AS month_tokens,
                COALESCE(COUNT(l.id) FILTER (WHERE l.created_at >= date_trunc('month', NOW())), 0) AS month_requests,
                COALESCE(SUM(l.cost_vnd) FILTER (WHERE l.created_at >= date_trunc('year', NOW())), 0) AS year_spent_vnd,
                COALESCE(SUM(l.total_tokens) FILTER (WHERE l.created_at >= date_trunc('year', NOW())), 0) AS year_tokens,
                COALESCE(COUNT(l.id) FILTER (WHERE l.created_at >= date_trunc('year', NOW())), 0) AS year_requests
            FROM erp_ai_agent_budgets b
            LEFT JOIN erp_ai_agent_usage_logs l ON b.agent_code = l.agent_code
            a  
            GROUP BY b.agent_code, b.display_name, b.role_title, b.avatar_icon, b.daily_budget_vnd, b.weekly_budget_vnd, b.monthly_budget_vnd, b.yearly_budget_vnd, b.cost_per_1k_tokens_vnd, b.model_name, b.provider
            ORDER BY b.agent_code ASC;
        Ng        Úday_spent_vndÚdaily_budget_vndr   g      Y@é   Úweek_spent_vndÚweekly_budget_vndÚmonth_spent_vndÚmonthly_budget_vndÚyear_spent_vndÚyearly_budget_vndr   Údisplay_nameÚ
role_titleÚavatar_iconÚcost_per_1k_tokens_vndÚ
model_nameÚproviderÚ
day_tokensÚday_requests)Ú	spent_vndÚ
budget_vndÚ
percentageÚtokensÚrequests_countÚweek_tokensÚweek_requestsÚmonth_tokensÚmonth_requestsÚyear_tokensÚyear_requests)r   r2   r3   r4   r5   r6   r7   ÚdayÚweekÚmonthÚyearé   )ÚagentsÚtotal_spent_today_vndÚtotal_spent_week_vndÚtotal_spent_month_vndÚtotal_spent_year_vnd)Úappendr   r   r   ÚfetchallÚfloatr   r   )r    r   Úwhere_clauser#   r"   r$   r%   ÚrowsÚagents_dataÚtotal_todayÚ
total_weekÚtotal_monthÚ
total_yearÚrÚ	day_spentÚ
day_budgetÚday_pctÚ
week_spentÚweek_budgetÚweek_pctÚmonth_spentÚmonth_budgetÚ	month_pctÚ
year_spentÚyear_budgetÚyear_pcts                             r&   Úget_ai_agent_budget_summaryz,ErpAiBudgetMixin.get_ai_agent_budget_summary7   sV  € ð 2ˆØˆØð 	&ØÐ4Ñ4ˆLØ�MŠM˜*Ñ%Ô%Ð%ðð6 ð7ð ð ˆð@ × Ò Ñ"Ô"ð 	" d¨D¯KªK©M¬Mð 	"¸SØ�KŠK˜˜VÑ$Ô$Ð$Ø—<’<‘>”>ˆDð	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð ˆØˆØˆ
ØˆØˆ
àð F	ñ F	ˆAÝ˜a Ô0Ñ1Ô1ˆIÝ˜qÐ!3Ô4Ñ5Ô5ˆJà>HÈ1ºn¸n•�y :Ñ-°Ñ5¸Ñ:Ô:Ð:ÐRUð õ ˜qÐ!1Ô2Ñ3Ô3ˆJÝ Ð"5Ô 6Ñ7Ô7ˆKà@KÈaÂÀ•�z KÑ/°%Ñ7¸!Ñ<Ô<Ð<ÐUXð õ   Ð"3Ô 4Ñ5Ô5ˆKÝ  Ð#7Ô!8Ñ9Ô9ˆLð   !Ò#Ð#õ �{ \Ñ1°EÑ9¸AÑ>Ô>Ð>àð õ ˜qÐ!1Ô2Ñ3Ô3ˆJÝ Ð"5Ô 6Ñ7Ô7ˆKà@KÈaÂÀ•�z KÑ/°%Ñ7¸!Ñ<Ô<Ð<ÐUXð ð ˜9Ñ$ˆKØ˜*Ñ$ˆJØ˜;Ñ&ˆKØ˜*Ñ$ˆJà×Òà"# L¤/Ø$% nÔ$5Ø"# L¤/Ø#$ ]Ô#3Ý.3°AÐ6NÔ4OÑ.PÔ.PØ"# L¤/Ø ! *¤à%.Ø&0Ø&-Ý"% a¨¤oÑ"6Ô"6Ý*-¨a°Ô.?Ñ*@Ô*@ðð ð &0Ø&1Ø&.Ý"% a¨Ô&6Ñ"7Ô"7Ý*-¨a°Ô.@Ñ*AÔ*Aðð ð &1Ø&2Ø&/Ý"% a¨Ô&7Ñ"8Ô"8Ý*-¨aÐ0@Ô.AÑ*BÔ*Bðð ð &0Ø&1Ø&.Ý"% a¨Ô&6Ñ"7Ô"7Ý*-¨a°Ô.@Ñ*AÔ*Aðð ð;$ð $ñ&ô &ð &ñ &ðR "Ý%*¨;¸Ñ%:Ô%:Ý$)¨*°aÑ$8Ô$8Ý%*¨;¸Ñ%:Ô%:Ý$)¨*°aÑ$8Ô$8ð
ð 
ð 	
s5   »BÁ+BÁ;BÂB	ÂBÂB	ÂBÂB"Â%B")Nr   NN)r   r	   r
   r   r   r   r   r   r   r	   r   r   r   r   r   r   )N)r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r'   rf   © ó    r&   r   r   	   sa   € € € € € ð  $ØØ!%Ø$(ð+"ð +"ð +"ð +"ð +"ð\ (,ðB
ð B
ð B
ð B
ð B
ð B
ð B
rk   r   )	Ú
__future__r   ÚloggingÚtypingr   Ú	getLoggerrg   Úloggerr   rj   rk   r&   ú<module>rq      s€   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ðp
ð p
ð p
ð p
ð p
ñ p
ô p
ð p
ð p
ð p
rk   