§
    s�’jT  ã                  ól   — d dl mZ d dlZd dlmZ d dlmZ  ej        e¦  «        Z	 G d„ d¦  «        Z
dS )é    )ÚannotationsN)Údate)ÚAnyc                  ó,   — e Zd Z	 ddd„Zdd„Zddd„ZdS )ÚErpTimesheetMixinNÚ
project_idú
str | NoneÚ	work_dateúdate | NoneÚreturnúlist[dict[str, Any]]c                ó¦  — d}g }|r|dz  }|                      |¦  «         |r|dz  }|                      |¦  «         |dz  }|                      ¦   «         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 )uI   Láº¥y báº£ng cháº¥m cÃ´ng nhÃ¢n sá»± theo dá»± Ã¡n vÃ  ngÃ y lÃ m viá»‡c.a  
            SELECT t.*, emp.full_name as employee_name, emp.employee_code, p.project_name as project_name
            FROM erp_timesheets t
            JOIN employees emp ON t.employee_id = emp.id
            JOIN projects p ON t.project_id = p.id
            WHERE 1=1
        z AND t.project_id = %sz AND t.work_date = %sz. ORDER BY t.work_date DESC, emp.full_name ASC;N©ÚappendÚget_connectionÚcursorÚexecuteÚfetchall)Úselfr   r
   ÚsqlÚparamsÚconnÚcurs          ú@C:\Projects\DSCons\app\core\postgres\clients\timesheet_client.pyÚlist_timesheetsz!ErpTimesheetMixin.list_timesheets   s~  € ðˆð ˆØð 	&ØÐ+Ñ+ˆCØ�MŠM˜*Ñ%Ô%Ð%Øð 	%ØÐ*Ñ*ˆCØ�MŠM˜)Ñ$Ô$Ð$ØÐ?Ñ?ˆà× Ò Ñ"Ô"ð 	" d¨D¯KªK©M¬Mð 	"¸SØ�KŠK˜˜VÑ$Ô$Ð$Ø—<’<‘>”>ð	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"s6   ÁCÁ+*B.ÂCÂ.B2	Â2CÂ5B2	Â6CÃC
ÃC
Úpayloadúdict[str, Any]c                óP  — 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 )u/   Ghi nháº­n cháº¥m cÃ´ng cho nhÃ¢n sá»± theo ca.a¼  
            INSERT INTO erp_timesheets (
                company_id, employee_id, project_id, work_date, shift_type,
                hours_worked, daily_wage_rate, labor_cost_allocated,
                attendance_status, location_verified, notes
            ) VALUES (
                %(company_id)s, %(employee_id)s, %(project_id)s, %(work_date)s, %(shift_type)s,
                %(hours_worked)s, %(daily_wage_rate)s, %(labor_cost_allocated)s,
                %(attendance_status)s, %(location_verified)s, %(notes)s
            )
            ON CONFLICT (employee_id, project_id, work_date, shift_type)
            DO UPDATE SET
                hours_worked = EXCLUDED.hours_worked,
                labor_cost_allocated = EXCLUDED.labor_cost_allocated,
                attendance_status = EXCLUDED.attendance_status,
                location_verified = EXCLUDED.location_verified,
                notes = EXCLUDED.notes
            RETURNING *;
        N)r   r   r   ÚcommitÚfetchone)r   r   r   r   r   s        r   Úrecord_timesheetz"ErpTimesheetMixin.record_timesheet#   s1  € ðˆð& × Ò Ñ"Ô"ð 	" d¨D¯KªK©M¬Mð 	"¸SØ�KŠK˜˜WÑ%Ô%Ð%Ø�KŠK‰MŒMˆMØ—<’<‘>”>ð	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"s4   —B¬>BÁ*BÂB	ÂBÂ
B	ÂBÂBÂ"BÚ
departmentc                ón  — d}g }|r|dz  }|                      |¦  «         |dz  }|                      ¦   «         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 )u&   Láº¥y danh sÃ¡ch nhÃ¢n viÃªn cÃ´ng ty.zÂ
            SELECT e.*, c.display_name as company_name
            FROM employees e
            JOIN companies c ON e.company_id = c.id
            WHERE e.employment_status = 'active'
        z AND e.department = %sz ORDER BY e.employee_code ASC;Nr   )r   r"   r   r   r   r   s         r   Úlist_employeesz ErpTimesheetMixin.list_employees=   sY  € ðˆð ˆØð 	&ØÐ+Ñ+ˆCØ�MŠM˜*Ñ%Ô%Ð%ØÐ/Ñ/ˆà× Ò Ñ"Ô"ð 	" d¨D¯KªK©M¬Mð 	"¸SØ�KŠK˜˜VÑ$Ô$Ð$Ø—<’<‘>”>ð	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"s5   ºB*Á*BÁ9B*ÂB	ÂB*ÂB	ÂB*Â*B.Â1B.)NN)r   r	   r
   r   r   r   )r   r   r   r   )N)r"   r	   r   r   )Ú__name__Ú
__module__Ú__qualname__r   r!   r$   © ó    r   r   r   
   s]   € € € € € àFJð"ð "ð "ð "ð "ð0"ð "ð "ð "ð4"ð "ð "ð "ð "ð "ð "r)   r   )Ú
__future__r   ÚloggingÚdatetimer   Útypingr   Ú	getLoggerr%   Úloggerr   r(   r)   r   ú<module>r0      s’   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ðC"ð C"ð C"ð C"ð C"ñ C"ô C"ð C"ð C"ð C"r)   