U
    $i                     @   s  d dl mZmZ d dlmZmZmZmZ d dl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mZmZ d d	lmZ ed
dgdZeedddZejdee dededeefeee e	dddZejdee dededeefeee e	dddZ ej!deej"deefee	dddZ#ejdedeefee	d d!d"Z$ej%dedeefeee	d#d$d%Z&ej'dej(d&eefee	d d'd(Z)dS ))    )ListOptional)	APIRouterDependsQuerystatus)Session
joinedload)datetimetimezone)get_db)Employee)Loan)EmployeeCreateEmployeeUpdateEmployeeOutEmployeeTableRow)
get_or_404z/api/employees	employees)prefixtags)empreturnc                 C   sP   t | j| j| j| j| j| jr$| jjnd | jr4| jjnd | j| j	| j
| j| jdS )N)idnameaccount_nameaccount_number
company_idcompany_name	bank_name	hire_datebase_salaryactive
created_at
updated_at)r   r   r   r   r   r   company_relr   r    r!   r"   r#   r$   )r    r&   ;/var/www/html/me.goteku.com/backend/app/routes/employees.py_build_employee_out   s    r(   z/table)response_modelTN)active_onlyr   dbc           	      C   s   | tttjttj}| r2|tjdk}|rF|tj|k}|	tj
 }g }|D ]v}tdd |jD }|j| }|t|j|j
|jr|jjnd |j|j|j|jr|jj
nd |j|jd|||jd q^|S )NTc                 s   s   | ]}|j d kr|jV  qdS )r"   N)r   monthly_deduction).0lr&   r&   r'   	<genexpr>6   s    
 z!employee_table.<locals>.<genexpr>r   )r   r   r   r   r   r   r   r    r!   Zbenefitloan_monthlyZcurrent_salaryr"   )queryr   optionsr	   r%   loansfilterr"   r   order_byr   allsumr!   appendr   r   r   r   r   r    )	r*   r   r+   r1   r   rowsr   r0   netr&   r&   r'   employee_table$   sD    
 
r;    Fc                 C   sX   | tttj}| r*|tjdk}|r>|tj|k}dd |tj	
 D S )NTc                 S   s   g | ]}t |qS r&   )r(   )r-   er&   r&   r'   
<listcomp>Y   s     z"list_employees.<locals>.<listcomp>)r1   r   r2   r	   r%   r4   r"   r   r5   r   r6   )r*   r   r+   r1   r&   r&   r'   list_employeesN   s    r?   )r)   status_code)bodyr+   c                 C   sd   t f |  }|| |  || || |t tt j	
t j|jk }t|S )N)r   
model_dumpaddcommitrefreshexpirer1   r2   r	   r%   r4   r   firstr(   )rA   r+   employeer   r&   r&   r'   create_employee\   s    




rI   z/{employee_id})employee_idr+   c                 C   sJ   | tttjtj| k }|sBddlm	} |dddt
|S )Nr   )HTTPExceptioni  zEmployee not found)r@   detail)r1   r   r2   r	   r%   r4   r   rG   fastapirK   r(   )rJ   r+   r   rK   r&   r&   r'   get_employeem   s    
rN   )rJ   rA   r+   c                 C   s   t |t| d}|jdd D ]\}}t||| qttj|_	|
  || |tttjtj| k }t|S )Nr   T)exclude_none)r   r   rB   itemssetattrr
   nowr   utcr$   rD   rF   r1   r2   r	   r%   r4   r   rG   r(   )rJ   rA   r+   r   fieldvaluer&   r&   r'   update_employee{   s    

rV   )r@   c                 C   s$   t |t| d}|| |  d S )Nr   )r   r   deleterD   )rJ   r+   r   r&   r&   r'   delete_employee   s    
rX   )*typingr   r   rM   r   r   r   r   sqlalchemy.ormr   r	   r
   r   app.core.databaser   app.models.employeer   app.models.loanr   Zapp.schemas.employeer   r   r   r   app.helpers.crudr   routerr(   getboolstrr;   r?   postHTTP_201_CREATEDrI   rN   putrV   rW   HTTP_204_NO_CONTENTrX   r&   r&   r&   r'   <module>   sR   )  