U
    ŷi                     @   s  d dl mZmZ d dl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 d dlmZmZ d dlmZmZmZmZ d d	lmZ d d
lmZ d dlmZmZ eddgdZejdee deefe edddZ!ej"deej#deefe eedddZ$eedddZ%ejdee ddeefe&edddZ'ej"d ee deefeed!d"d#Z(ejd$ee deefe edd%d&Z)d'S )(    )ListOptional)	APIRouterDependsstatus)Session
joinedload)get_db)Employee)SalaryHistory)PayrollRunItem
PayrollRun)SalaryHistoryCreateSalaryHistoryOutSalaryRecommendationBulkIncreaseRequest)PayrollPaymentHistoryOut)
get_or_404)datetimetimezonez/apisalary)prefixtagsz'/employees/{employee_id}/salary-history)response_modelemployee_iddbc                 C   s0   t |t| d |ttj| ktj S )Nr
   )	r   r
   queryr   filterr   order_byeffective_dateallr    r"   8/var/www/html/me.goteku.com/backend/app/routes/salary.pyget_salary_history   s    
r$   )r   status_code)r   bodyr   c                 C   sn   t |t| d}t| |jd k	r"|jn|j|j|j|jd}|j|_t	t
j|_|| |  || |S Nr
   )r   
old_salary
new_salaryr    notes)r   r
   r   r(   base_salaryr)   r    r*   r   nowr   utc
updated_ataddcommitrefresh)r   r&   r   emprecordr"   r"   r#   add_salary_history%   s    


r4   )r2   returnc                 C   s  t | jdd d}tdd | jD }| j| }|r>|d jnd }t|dk r`d}t|d	 }ng }td
t|D ]:}||d
  j	}	|| j	}
|	dkrr|
|
|	 |	 d  qr|sd}npt|dkr|dd  }|d d }t|d
 t|d  }t|d
 t|d  }|| }nt|t| }t||d  }t | jdd ddd d }t| j| j| jrn| jjnd | j| j|| j||||| t|dt|dkrdndt||dS )Nc                 S   s   | j S Nr    hr"   r"   r#   <lambda>B       z&_calc_recommendation.<locals>.<lambda>)keyc                 s   s   | ]}|j d kr|jV  qdS )activeN)r   monthly_deduction).0lr"   r"   r#   	<genexpr>C   s    
 z'_calc_recommendation.<locals>.<genexpr>   g      @g?   r   d      c                 S   s   | j S r6   r7   r8   r"   r"   r#   r:   a   r;   T)r<   reverseZweighted_avg_pctZdefault_5pct)r   name	bank_nameaccount_numberaccount_nameZlast_salary_datecurrent_salaryloan_deductionZ
net_salaryZrecommended_increaseZrecommended_new_netZrecommended_pctmethodZhistory_countrecent_history)sortedsalary_historysumloansr+   r    lenintranger)   appendr   idrI   company_relrJ   rK   rL   round)r2   historyrN   netZ	last_datepctZrec_increaseZincreases_pctiprevcurrZrecentZolderZw_sumZw_cntrP   r"   r"   r#   _calc_recommendationA   sV    


rb   z/salary/recommendationsT)active_onlyr   c                 C   sX   | tttjttjttj}| r:|tjdk}|	tj
 }dd |D S )NTc                 S   s   g | ]}t |qS r"   )rb   )r?   er"   r"   r#   
<listcomp>   s     z'get_recommendations.<locals>.<listcomp>)r   r
   optionsr   rR   rT   rZ   r   r=   r   rI   r!   )rc   r   r   	employeesr"   r"   r#   get_recommendationsv   s    
rh   z/salary/bulk-increase)r&   r   c                 C   s   g }| j D ]Z}t|t|jd}t|j|j|j|j|jd}|j|_t	
tj|_|| || q
|  |D ]}|| qr|S r'   )itemsr   r
   r   r   r+   Znew_base_salaryr    r*   r   r,   r   r-   r.   r/   rX   r0   r1   )r&   r   recordsitemr2   r3   rr"   r"   r#   bulk_increase   s$    

rm   z(/employees/{employee_id}/payment-historyc                 C   sd   t |t| d |ttttj	tj
| ktj tj tj  }dd |D S )zReturn all payroll export payments for a specific employee, newest first.
    Includes month, year, export_type and run_date from the parent PayrollRun.r
   c                 S   sV   g | ]N}|j |j|j|j|j|j|j|j|j|j	|j
|jj|jj|jj|jjd qS ))rY   run_idr   employee_namer+   benefitrN   cash_advance
net_amounthas_override
created_atmonthyearexport_typerun_date)rY   rn   r   ro   r+   rp   rN   rq   rr   rs   rt   runru   rv   rw   rx   )r?   rk   r"   r"   r#   re      s"   z0get_employee_payment_history.<locals>.<listcomp>)r   r
   r   r   joinr   rf   r   ry   r   r   r   rv   descru   rx   r!   )r   r   ri   r"   r"   r#   get_employee_payment_history   s     
  r|   N)*typingr   r   fastapir   r   r   sqlalchemy.ormr   r   app.core.databaser	   app.models.employeer
   app.models.salary_historyr   Zapp.models.payroll_runr   r   Zapp.schemas.salaryr   r   r   r   Zapp.schemas.payrollr   app.helpers.crudr   r   r   routergetstrr$   postHTTP_201_CREATEDr4   rb   boolrh   rm   r|   r"   r"   r"   r#   <module>   sT   
5