
    vgF                     "   d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ dd	lmZmZ d
 Zd Zd Zd Z ed dD              s@ e       Zej1                  edd       ej1                  edd       ej3                          yy)z?
scheduler.py

This module is used to register scheduled tasks
    N)date	timedelta)BackgroundScheduler)relativedelta)calculate_employer_contributionsave_payslip)payroll_calculation   )ContractPayslipc                      t         j                  j                  dt        j                               j                  d       y)z
    Finds all active contracts whose end date is earlier than the current date
    and updates their status to "expired".
    active)contract_statuscontract_end_date__ltexpired)r   N)r   objectsfilterr   todayupdate     %/var/www/horilla/payroll/scheduler.pyexpire_contractr      s7    
  

  fYf'
r   c                    ddl m} | } |j                  j                         }|dk(  r||j                  j	                  d      z  }|r&|D ]!  }||j                  j	                  |      z  }# |j	                  dd      }|j                         }| t        d	
      z
  }| t        d	      z
  }|D ]"  }	t        j                  j	                  |	||      j                         }
|
r7t        j                  j	                  |	d      j                         }||j                  k  rv||j                  k  r|j                  }t        |	||      }|
|d<   i }|	|d<   |d   |d<   |d   |d<   d|d<   |d   |d<   |d   |d<   |d   |d<   |d   |d<   |d   |d<   t        j                  |d         |d<   t        |       |d   |d<   t!        di ||d<   % y) z#Generate payslip for previous monthr   )EmployeeT)&employee_work_info__company_id__isnull)employee_work_info__company_idFr   )contract_set__isnullcontract_set__contract_statusr
   )monthsdays)employee_id
start_dateend_date)r#   r   payslipemployeer$   r%   draftstatuscontract_wage	basic_pay	gross_paytotal_deductions	deductionnet_pay	json_datapay_datainstallmentsinstanceNr   )employee.modelsr   r   noner   distinctr   r   r   firstr   contract_start_dater	   jsonloadsr   r   )r   	companiesallr   	employeescompanyactive_employeesr$   r%   r'   r&   contractpayslip_datadatas                 r   generate_paysliprC      sB    )D  %%'I
d{ 0 0 7 737 !8 !
 
	   	G!H$4$4$;$;/6 %< % I	 !''"( ( 
 (002Q//JiQ''H$ 8//(( Z( ) 

%' 	 ##** ( + 

%' 	 h222444!55J*8ZJ")Y#Z),7\'
3Z X ,_ =_(5[(5[();<[&y1Y::l;&?@Z'-+N;^#/#7$#7Z 98r   c                 R    | t        d      z   }|j                  | j                  k7  S )Nr
   r!   )r   month)r   next_days     r   is_last_day_of_monthrG   [   s$    iQ''H>>TZZ''r   c                     ddl m}  ddlm} |j                  j                  d      j                         rt        j                         }|j                  }|t        d      z   j                  d      t        d      z
  }|j                  j                  d      }g }|D cg c]  }|j                   }}|D ]  }|j                  }	|	d	k(  r(t        |      s |j                  |j                         <t!        |	      }	|	|j                  k\  r+||j                  k(  r|j                  |j                         |	|k(  s|j                  |j                          t#        t%        |            }|rd
|v rZ| j                  j'                         }
g }|
D ]  }||vs|j                  |        t)        t        j                         |d       y
t)        t        j                         |d       y
y
y
c c}w )z;
    Generating payslips for active contract employees
    r   )Companyr
   )PayslipAutoGenerateT)auto_generater!   )dayzlast dayN)r   r;   r<   F)base.modelsrI   models.modelsrJ   r   r   existsr   r   rL   r   replace
company_idgenerate_dayrG   appendintlistsetr<   rC   )rI   rJ   r   	day_todaylast_dayauto_payslipsr;   autoauto_companiesrR   company_allgenerate_companiesr>   s                r   auto_payslip_generater^   `   s    $2 "")))=DDF

II	I1--6616=	q@QQ+33:::N	6CDd$//DD! 
	6D,,Lz)'.$$T__5"<08<</I4M$$T__5!Y.$$T__5
	6 Y(	y %oo113%'"* ;Gn4*11':; !1C !djjliUS + G Es   &G8c              #   @   K   | ]  }|t         j                  v   y w)N)sysargv).0cmds     r   	<genexpr>rd      s        388Os   )makemigrationsmigratecompilemessagesflushshellinterval   )hours   )__doc__r9   r`   datetimer   r   !apscheduler.schedulers.backgroundr   dateutil.relativedeltar   payroll.methods.methodsr   r   payroll.views.component_viewsr	   rN   r   r   r   rC   rG   r^   any	scheduleradd_jobstartr   r   r   <module>rx      s     
 $ A 0 Q = ,98x(
*TZ  Q  $%Ioz;+ZqAOOr   