§
    ÔŸ’j4  ã                  ód   — d Z ddlmZ ddlmZmZ ddlmZ ddlmZ ddl	m
Z
  G d„ d¦  «        Zd	S )
z|Equipment Efficiency and Fuel Consumption Analytics Service.
Strict Decimal Precision COMPLIANT with Construction ERP 2026.
é    )Úannotations)ÚdateÚdatetime)ÚDecimal)ÚAny)ÚProjectCrudRepositoryc                  ó0   — e Zd ZdZddd„Z	 ddd„Zdd„ZdS )ÚEquipmentEfficiencyServiceuK   Enterprise service for tracking machinery fuel efficiency and ca mÃ¡y logs.NÚrepoúProjectCrudRepository | NoneÚreturnÚNonec                ó0   — |pt          ¦   «         | _        d S ©N)r   r   )Úselfr   s     ú?C:\Projects\DSCons\app\services\equipment_efficiency_service.pyÚ__init__z#EquipmentEfficiencyService.__init__   s   € ØÐ3Õ1Ñ3Ô3ˆŒ	ˆ	ˆ	ó    Úequipment_idÚstrÚ	fill_dateú
str | dateÚfuel_quantity_litersúfloat | DecimalÚunit_price_vndÚtotal_cost_vndÚodometer_hoursÚsource_invoice_idú
str | Noneúdict[str, Any]c                óØ  — t          |t          ¦  «        rL	 t          j        |d¦  «                             ¦   «         }n%# t
          $ r t	          j        ¦   «         }Y nw xY w|}t          t          |¦  «        ¦  «        }	t          t          |¦  «        ¦  «        }
t          t          |¦  «        ¦  «        }t          t          |¦  «        ¦  «        }|dk    r|	dk    r|
dk    r|	|
z  }d}d}d}	 | j         	                    ¦   «         5 }| 
                    ¦   «         5 }|                     ||||	|
|||f¦  «         |                     ¦   «         }|r0t          |d         ¦  «        }|d                              d¦  «        }|                     ¦   «          ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   d||d	d
œS # t          $ r}dd|›�dœcY d}~S d}~ww xY w)u9   Ghi nháº­n lÆ°á»£t náº¡p dáº§u thá»±c táº¿ cá»§a ca mÃ¡y.ú%Y-%m-%dr   a6  
            INSERT INTO erp_equipment_fuel_logs (
                equipment_id, fill_date, fuel_quantity_liters, unit_price_vnd,
                total_cost_vnd, odometer_hours, source_invoice_id
            ) VALUES (
                %s, %s, %s, %s, %s, %s, %s
            ) RETURNING id, created_at;
        NÚidÚ
created_atz%Y-%m-%d %H:%M:%SÚsuccessu1   Ä�Ã£ ghi nháº­n phiáº¿u Ä‘á»• dáº§u thÃ nh cÃ´ng.)ÚstatusÚlog_idr$   ÚmessageÚerroru(   KhÃ´ng thá»ƒ ghi nháº­n ca Ä‘á»• dáº§u: )r&   r(   )Ú
isinstancer   r   Ústrptimer   Ú
ValueErrorÚtodayr   r   Úget_connectionÚcursorÚexecuteÚfetchoneÚstrftimeÚcommitÚ	Exception)r   r   r   r   r   r   r   r   Úfill_date_parsedÚqtyÚpriceÚcostÚhoursÚsqlr'   r$   ÚconnÚcurÚresÚexcs                       r   Úrecord_fuel_logz*EquipmentEfficiencyService.record_fuel_log   sº  € õ �i¥Ñ%Ô%ð 	)ð0Ý#+Ô#4°YÀ
Ñ#KÔ#K×#PÒ#PÑ#RÔ#RÐ Ð øÝð 0ð 0ð 0Ý#'¤:¡<¤<Ð Ð Ð ð0øøøð  )Ðå•cÐ.Ñ/Ô/Ñ0Ô0ˆÝ�˜NÑ+Ô+Ñ,Ô,ˆÝ•s˜>Ñ*Ô*Ñ+Ô+ˆÝ�˜NÑ+Ô+Ñ,Ô,ˆà�1Š9ˆ9˜˜qš˜ U¨Q¢Y YØ˜‘;ˆDðˆð ˆØˆ
ð	Ø”×)Ò)Ñ+Ô+ð ¨t°T·[²[±]´]ð ÀcØ—’Øà$Ø(ØØØØØ)ðñô ð ð —l’l‘n”n�Øð QÝ   T¤™^œ^�FØ!$ \Ô!2×!;Ò!;Ð<OÑ!PÔ!P�JØ—’‘”�ð#ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð& $Ø Ø(ØNð	ð ð øõ ð 	ð 	ð 	à!ØMÀcÐMÐMðð ð ð ð ð ð ð øøøøð	øøøsv   —'? ¿AÁAÃ2G ÄF;Ä A8F$ÆF;Æ$F(	Æ(F;Æ+F(	Æ,F;Æ/G Æ;F?Æ?G ÇF?Ç	G Ç
G)ÇG$ÇG)Ç$G)c                óÀ	  — d}d}| j                              ¦   «         5 }|                     ¦   «         5 }|                     |||f¦  «         |                     ¦   «         }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |sddiS t          |d         ¦  «        }|d         }|d         }t          t          |                     d¦  «        pd	¦  «        ¦  «        }	d
}
g }| j                              ¦   «         5 }|                     ¦   «         5 }|                     |
|f¦  «         |                     ¦   «         }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   d}t          d	¦  «        }| j                              ¦   «         5 }|                     ¦   «         5 }|                     ||f¦  «         |                     ¦   «         }|r7|                     d¦  «        �"t          t          |d         ¦  «        ¦  «        }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   t          d	¦  «        }t          d	¦  «        }|D ]L}|t          t          |d         ¦  «        ¦  «        z  }|t          t          |d         ¦  «        ¦  «        z  }ŒMt          d	¦  «        }|d	k    r||z  }t          d¦  «        }d}d}|	d	k    rl|d	k    rf||	z  t          d¦  «        z  }|t          d¦  «        k    r'dt          t          |dz
  d¦  «        ¦  «        › d�}d}n|t          d¦  «        k     rd}d}g }|D ]ú}|                     t          |d         ¦  «        t          |d         t          t          f¦  «        r|d                              d¦  «        nt          |d         ¦  «        t          |d         ¦  «        t          |d         ¦  «        t          |d         ¦  «        t          |d         ¦  «        |                     d¦  «        r|d         pd › d!|d"         pd › �nd#d$œ¦  «         Œû||||                     d%¦  «        t          |	¦  «        t          |¦  «        t          |¦  «        t          |¦  «        t          t          |d¦  «        ¦  «        t          t          |d¦  «        ¦  «        |||d&œS )'uc   TÃ­nh toÃ¡n hiá»‡u suáº¥t sá»­ dá»¥ng nhiÃªn liá»‡u thá»±c táº¿ cá»§a má»™t thiáº¿t bá»‹ mÃ¡y mÃ³c.zß
            SELECT e.*, p.project_name AS current_project_name
            FROM erp_equipment e
            LEFT JOIN projects p ON e.current_project_id = p.id
            WHERE e.id = %s OR e.equipment_code = %s;
        Nr)   u   KhÃ´ng tÃ¬m tháº¥y thiáº¿t bá»‹r#   Úequipment_codeÚequipment_nameÚfuel_norm_per_hourr   a  
            SELECT f.*, i.invoice_number, i.invoice_series
            FROM erp_equipment_fuel_logs f
            LEFT JOIN erp_invoices i ON f.source_invoice_id = i.id
            WHERE f.equipment_id = %s
            ORDER BY f.fill_date DESC, f.created_at DESC;
        zˆ
            SELECT SUM(hours_operated) AS total_hours
            FROM erp_equipment_logs
            WHERE equipment_id = %s;
        Útotal_hoursr   r   éd   u   Hoáº¡t Ä‘á»™ng bÃ¬nh thÆ°á»�ngÚnormalés   u-   Cáº£nh bÃ¡o: TiÃªu hao vÆ°á»£t Ä‘á»‹nh má»©c é   z%!ÚwarningéU   uR   TiÃªu hao tháº¥p hÆ¡n Ä‘á»‹nh má»©c (Cáº§n kiá»ƒm tra láº¡i giá»� mÃ¡y ghi nháº­n)Úinfor   r"   r   r   r   Úinvoice_seriesÚ ú-Úinvoice_numberu   Náº¡p láº» hiá»‡n trÆ°á»�ng)r#   r   r   r   r   r   Úinvoice_refÚlicense_plate)r   rA   rB   rQ   rC   Útotal_hours_operatedÚtotal_fuel_litersÚtotal_fuel_cost_vndÚ#average_consumption_liters_per_hourÚefficiency_percentageÚwarning_messageÚwarning_levelÚ	fuel_logs)r   r.   r/   r0   r1   r   r   ÚgetÚfetchallÚfloatÚroundÚappendr*   r   r   r2   )r   r   Ú	sql_equipÚequipr;   r<   Úeq_idÚeq_codeÚeq_nameÚ	fuel_normÚsql_logsrY   Úsql_op_hoursrD   r=   rS   Útotal_fuel_costÚlogÚavg_consumptionÚefficiency_pctÚwarning_msgrX   Úformatted_logss                          r   Úget_equipment_efficiencyz3EquipmentEfficiencyService.get_equipment_efficiencyX   sR  € ðˆ	ð ˆØŒY×%Ò%Ñ'Ô'ð 	#¨4°·²±´ð 	#À#Ø�KŠK˜	 L°,Ð#?Ñ@Ô@Ð@Ø—L’L‘N”NˆEð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð ð 	@ØÐ>Ð?Ð?å�E˜$”KÑ Ô ˆØÐ(Ô)ˆØÐ(Ô)ˆÝ�C §	¢	Ð*>Ñ ?Ô ?Ð DÀ1ÑEÔEÑFÔFˆ	ðˆð ˆ	ØŒY×%Ò%Ñ'Ô'ð 	'¨4°·²±´ð 	'À#Ø�KŠK˜ 5 (Ñ+Ô+Ð+ØŸš™œˆIð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð
ˆõ
 ˜a‘j”jˆØŒY×%Ò%Ñ'Ô'ð 	?¨4°·²±´ð 	?À#Ø�KŠK˜ u hÑ/Ô/Ð/Ø—,’,‘.”.ˆCØð ?�s—w’w˜}Ñ-Ô-Ð9Ý%¥c¨#¨mÔ*<Ñ&=Ô&=Ñ>Ô>�ð		?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?õ $ A™JœJÐÝ! !™*œ*ˆØð 	Cð 	CˆCØ¥­¨SÐ1GÔ-HÑ)IÔ)IÑ!JÔ!JÑJÐØ�w¥s¨3Ð/?Ô+@Ñ'AÔ'AÑBÔBÑBˆOˆOõ " !™*œ*ˆØ˜Š?ˆ?Ø/°+Ñ=ˆOõ ! ™œˆØ6ˆØ ˆØ�qŠ=ˆ=˜_¨qÒ0Ð0Ø-°	Ñ9½WÀS¹\¼\ÑIˆNØ¥¨¡¤Ò,Ð,ØwÍeÕTYÐZhÐknÑZnÐpqÑTrÔTrÑNsÔNsÐwÐwÐw�Ø )��Ø¥'¨"¡+¤+Ò-Ð-àhð ð !'�ð ˆØð 	ð 	ˆCØ×!Ò!å˜c $œi™.œ.å! # kÔ"2µT½8Ð4DÑEÔEð"/  [Ô!1×!:Ò!:¸:Ñ!FÔ!FÐ!Få˜S Ô-Ñ.Ô.Ý,1°#Ð6LÔ2MÑ,NÔ,NÝ&+¨CÐ0@Ô,AÑ&BÔ&BÝ&+¨CÐ0@Ô,AÑ&BÔ&BÝ&+¨CÐ0@Ô,AÑ&BÔ&Bà—w’wÐ2Ñ3Ô3ð$7 cÐ*:Ô&;Ð&A¸rÐ#aÐ#aÀCÐHXÔDYÐD_Ð]_Ð#aÐ#aÐ#aà6ðð ñô ð ð ð" "Ø%Ø%Ø"ŸYšY Ñ7Ô7Ý"'¨	Ñ"2Ô"2Ý$)¨+Ñ$6Ô$6Ý!&Ð'8Ñ!9Ô!9Ý#(¨Ñ#9Ô#9Ý38½¸ÐPQÑ9RÔ9RÑ3SÔ3SÝ%*­5°ÀÑ+CÔ+CÑ%DÔ%DØ*Ø*Ø'ð
ð 
ð 	
s¡   žB³-A,Á BÁ,A0	Á0BÁ3A0	Á4BÂBÂ
BÄE+Ä,EÅE+ÅE	ÅE+ÅE	ÅE+Å+E/Å2E/Æ H=Æ5A%H&ÈH=È&H*	È*H=È-H*	È.H=È=IÉIr   )r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    )r   r   r   r    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r?   rm   © r   r   r
   r
      sq   € € € € € ØUÐUð4ð 4ð 4ð 4ð 4ð )-ðBð Bð Bð Bð BðHl
ð l
ð l
ð l
ð l
ð l
r   r
   N)rq   Ú
__future__r   r   r   Údecimalr   Útypingr   Ú)app.core.postgres.project_crud_repositoryr   r
   rr   r   r   ú<module>rw      s­   ððð ð #Ð "Ð "Ð "Ð "Ð "à #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à KÐ KÐ KÐ KÐ KÐ Kðv
ð v
ð v
ð v
ð v
ñ v
ô v
ð v
ð v
ð v
r   