B
    Zc                 @   s  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dl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 Zdd Z edd Z!edd Z"edd Z#eedd Z$eedd Z%dd Z&ed d! Z'd"d# Z(ed$d% Z)d&d' Z*eed(d) Z+ee d*d+ Z,e d,d- Z-d.d/ Z.ed0d1 Z/ed2d3 Z0ed4d5 Z1dS )6    N)login_required)HttpResponse)TemplateResponse)gettext)activate)csrf_protect)csrf_exempt)stamp2datetime)att_calculate)Employee)PayloadBase)getJSResponse)time_it)get_item_symbolget_item_name_and_symbolc             C   s>   d}| r6t j | d}|dkr"dS t j | |}|S ndS d S )Nz%H:%M:%Sz%Y%m%d%H%M%SZ19000101000000 )datetimestrftime)dataZDATE_FORMATEZtmp_dateZreport_data r   )G:\easytimepro\master/mysite/att\views.pyformat_datetime   s    r   c             C   sX  | j dd }| j dd }| j dd }| j dd }| j dd }g }g }|rt|dkrrdd |d	D }tjj||d
jddd}n
|r|g}|rT|rT|rTt|}t|}	|t	j
|j|j|j|jd }t|||	| t|d |d}
|	d}tjj||
|fd}| }|rLy0t| j dd}t| j ddd | }W n( tk
r|   d}d}|d j}Y nX |dddddddddd d!d"d#d|||  }|rLx|D ]}|d$ |d t	j	|d% d&t|d' t|d( t|d) t|d* |d+ |d, |d- ttd |d. |d/ |d0 fd1}|| qW ||fS d S )2N
departmentuseridstartend
company_id   c             S   s   g | ]}|qS r   r   ).0deptr   r   r   
<listcomp>0   s    z'get_app_report_data.<locals>.<listcomp>,)r   Zdepartment_id__inidT)flat)ZhoursminutessecondsZmicroseconds)requestr   z%Y-%m-%d)Z
emp_id__inZatt_date__rangeZ	page_sizeZ50page1   Zemp__emp_codeZemp__first_nameatt_dateZclock_inZ	clock_outZbreak_time__break_outZbreak_time__break_inZtotal_workedZbreak_time__durationZleaveZovertime__ot_lv1Zovertime__ot_lv2Zovertime__ot_lv3r      z%y/%m/%d                  	   
         )pinnamer*   check_in	check_out	break_outbreak_in
total_time
break_time
leave_timeovertime)GETgetlensplitr   objectsfiltervalues_listr	   r   	timedeltahourminutesecondZmicrosecondr
   strr   r   countint	Exceptionpagesizeorder_byr   sumappend)r&   departmentsemployeestart_stamp	end_stampr   report_datasempsr   r   
start_dateend_dateZitems_querysetrL   rO   Z
firstindexr'   ZrowsrowZ	data_dictr   r   r   get_app_report_data&   sh    






$r\   c             C   s  ddl m} t| jd | jdd }| jdd }| jdd }| jdd }|s| jdd }| jd	d }| jd
d }|r|r||krttdS i }	tdtdtdtdtdtdtdtdtdtdtdd}
tdtdtdd}|r|d}g }xz|D ]r}|dkrhx`| D ],\}}i }||d< |||d< |	| q6W n&i }||d< ||
| |d< |	| qW ||	d < t
|	}	d!d!d!|	||d"}|r||d< |r||d#< |r||d< t| d$|S t| \}}d||d!d%}tt
|S d S )&Nr   )	force_strZlanguager   r   r'   r   r   r   fields%attCalculation_alert_dateRangeInvalidZreport_column_empCodeZreport_column_firstNameZreport_column_attendanceDateZreport_column_checkInTimeZreport_column_checkOutTimeZreport_column_breakOutTimeZreport_column_breakInTimeZreport_column_breakTimeDurationZreport_column_totalTimeDurationZreport_column_leaveDurationZ	over_time)r6   r7   r*   r8   r9   r:   r;   r=   r<   r>   r?   Zreport_column_overtimeLevel1Zreport_column_overtimeLevel2Zreport_column_overtimeLevel3)Zot_lv1Zot_lv2Zot_lv3r!   r?   Zfieldtitlecolumnsr   )r   rT   r   ra   r   r   rT   zatt/report/appreport.html)coderL   r   msg)django.utils.encodingr]   lang_activater@   rA   r   _rC   itemsrR   jsondumpsr   r\   )r&   r]   rS   rT   r'   r   rU   rV   r^   Zreport_columnsZ	app_titleZovertime_mapZreport_fieldsfZ	col_fieldZ	col_titlecolcontextrL   rW   Zrespr   r   r   generate_app_report`   s~    



rm   c             C   s(   dd l }ddlm} || jj}t|S )Nr   )get_att_rule)rh   mysite.att.att_paramrn   usercurrent_companyr   )r&   rh   rn   Zqsr   r   r   att_param_setting   s    rr   c       <      C   s  dd l }dd l}ddlm}m}m}m} ddlm}m	} ddl
m}	m}
 ddlm} ddlm} || jj || jj}| jdd }| jdd }| jd	d }| jd
d }| jdd }| jdd }| jdd }i }g }d }|rt||fstg ||dS t||fs2|s2tg ||dS t||frV|sVtg ||dS |d k	r|	jj|| jjdjddd}|jj|d}nF|d k	r|
jj|| jjdjddd}|jj|d}n|jj|d}|rtj|d}tj|d}|d|d }|	jj|| jjd}|r|d }|j}|jj|d d||dB || jjdj||tjdd | d d! ||d"||d#B !dd$d%"d}nh|jj|d d||dB | jjd&j||tjdd | d d! ||d"||d#B !dd$d%"d}g } x|D ]}!|!d }"t#|"tjr.|"$ }"|!d$ }t#|tj$s`tj|d d' d$ }nt#|tjrv|$ }x>|"|kr|"%d(|!d% d)}#| &|# |"tjdd7 }"qxW qW | j'|(d*d+ d,d- |)| |(d*D }|d.d%d/d0d1d2d3d4d5	* }$|jj|d6"dd7d8!d7d9d8d:d;d<d=d>}%d}&xXt+|%D ]J\}'}(|'|&k r\qDytj,t$d?dd|(d8 })|)tj|(d; d@ }*|*$ |)$  j-}+|(d7 },t.|)j/t.|)j0dA  dB }-t.|*j/t.|*j0dA  dB }.|&|+7 }&|*1 |)1 kr|&d7 }&d
| jkrF|)%dC}/|*%dC}0|&|,|/|0|+|(d= |(d9 dD n.|&|-|(d7  |.|(d7  |+|(d= |(d9 dE W n t2k
r   Y nX qDW t3|dFdG d+}i }1i }2|%jddHd7}3| jdd kr xt4|3D ] }4|4d }5dddddI|1|5< qW njxht4|3D ]\}4|dkrJ|$dJ dkrJ|4d d }5|5dkrDt5|5ndK}5n|4d }5dddddI|1|5< q
W i }6|26|1 dLd- |67 D }7i }8|$r|$dM rxFt8|$dM D ]6}9x.|77 D ]"\}:};|;|8t5dN|9 t9|: < qW qW |26|8 t||$||6|1|2|$dJ dOS )PNr   )F	DateFieldQExpressionWrapper)AttShiftShiftDetail)r   
Department)Holiday)
C_ATT_RULEshiftstZedempr   schedule	show_type)r   Zdetailholidays)emp_coder   r   T)r#   )Zattschedule)	dept_codecompanyr"   )Zdepartmentschedule)r"   z%Y-%m-%drY   Zduration_day)r   )department__in)locationr   r   )days)Zoutput_field)rZ   )Zstart_date__gt)Zend_date__ltrZ   alias)r   r3   z%Y%m%d)dater   r   )keyc             S   s   i | ]\}}t ||qS r   )list)r   r   rg   r   r   r   
<dictcomp>  s    z shift_detail.<locals>.<dictcomp>pkZshift_cycle
cycle_unitZwork_day_offZday_off_typeZwork_weekendZweekend_typeZ
auto_shift)Z	shift__in	day_indexin_timeZtime_interval_idZtime_interval__in_timeZtime_interval__durationZtime_interval__use_modetime_interval__aliasweekend_dayil  )r$   <      z%H:%M)r   
start_timeend_time	cross_dayr   r"   )r   r   r   r   r"   c             S   s   | d S )Nr   r   )xr   r   r   <lambda>>      zshift_detail.<locals>.<lambda>)r   )ZpolicyZlv1Zlv2Zlv3r,   6c             S   s"   i | ]\}}|t t|d  qS )r   )rK   rM   )r   kvr   r   r   r   Q  s    r+   r0   )r   r|   r   weekendweekend_shiftweekend_totalr   ):operator	itertoolsZdjango.db.modelsrs   rt   ru   rv   mysite.att.modelsrw   rx   mysite.personnel.modelsr   ry   rz   mysite.att.global_cacher{   action_initrp   rq   rA   r@   allr   anyrD   rE   rF   r   strptimer   ZannotaterG   ZexcludevaluesrP   
isinstancer   r   rR   sort
itemgettergroupbyfirst	enumerateZcombiner   floatrH   rI   timerN   sortedr   rK   updaterg   rangerM   )<r&   r   r   rs   rt   ru   rv   rw   rx   r   ry   rz   r{   att_ruleZshift_idZsearch_startZ
search_endr   r   r   r   ZpayloadZdetailsdeptsZquerysetrY   rZ   Z_endZ
emp_existsZget_empr   Zhsr   hZ_startZ_hr|   Zshift_detailsindexiitemr8   r9   r   Z
day_index_r}   Zetr   r   r   r   Zweekend_shift_day_indexr   Zweek_dayr   Zweekend_shift_global_tempZweekend_shift_globalcr   r   r   r   r   shift_detail   s   


$











$

r   c             C   sn  dd l }ddlm} ddlm} dt| jjt| jjf }|	|d }y|r|
|}|	dd}|	dd}|	dd}	|	d	d}
|	d
d}|	dd}|	dd}|||	|
|||d|dkrt|
t| d pd|dkrt|
| d pdd
}nddddddddddd
}t|||S  tk
rh   dd l}|  || t||ddiS X d S )Nr   )cache)	smart_strzatt_calc_tag_%s_%stotal_process
calculatorr   pending	processedprocess_rangeprocess_timeprocessed_timed   )
r   	total_lenr   r   r   r   r   tpfppercentretZ	sys_error)rh   django.core.cacher   rd   r   rK   rp   r"   rq   rA   loadsr   rM   r   ri   rN   	traceback	print_excdelete)r&   rh   r   r   tag_keyatt_calc_dataprocess_datar   r   r   r   r   r   r   r   r   r   r   r   calculate_progressbar\  sR    
"
r   c             C   s>   ddl m} dt| jjt| jjf }||dd ti S )Nr   )r   zatt_calc_tag_revoke_%s_%sr   i'  )r   r   rK   rp   r"   rq   setr   )r&   r   Ztag_key_revoker   r   r   calculate_revoke  s    r   c             C   s   ddl m} ddlm} yR| jjs,| jj}n| jj}|| j|}|rRt	|ddS |
| t	ddiS W n: tk
r   dd l}|  dtd }t	|ddS X d S )	Nr   )r{   )handle_report_paramsz-1)rc   rb   rb   z%ssave_failed)r   r{   ro   r   rp   Zis_employeerq   r   POSTr   refreshrN   r   r   rf   )r&   r{   r   r   r   r   r   r   r   submit_report_param  s     

r   c          
   C   s  dd l }ddlm} ddlm} ddlm} ddlm} ddl	m
} | jdkrj| }d|d	}|| d
|S | jdkr|| j}| std|jdS |j}	yF||	d }
||	d }|
stdddS |stdddS |jj| jjd}x|D ]}|d |d< qW ||}|s\||	d |	d |	d |	d || j |	d d}|jdd nL|d }|	d |_|	d |_|	d |_|	d |_||_|	d |_|jdd |dt | jj  t!"  t#"  |$| jj tddiS  t%k
r } ztt |ddS d }~X Y nX d S )Nr   )r   )r   )AttReportSetting)ReportSettingForm)r{   r@   Zreportparam)
model_nameformzatt/reportsetting_page.htmlr   z-1)rb   rc   keysrg   r   )r   Zoragin_namer7   
resign_emp
short_date
short_timework_day_related_display)r   r   r   func_keyatt_itemr   r   T)Zforce_insert)Zforce_update	att_rule_rb   )rc   rb   )&rh   r   r   django.template.responser   r   r   mysite.att.formsr   r   r{   methodr   is_validr   errorscleaned_datar   rD   rE   rp   rq   ri   Zget_current_companyZsaver   r   r   r   r   r   r   rK   r   cache_clearr   r   rN   )r&   rh   r   r   r   r   r{   r   rl   r   	func_keysZ	att_itemsobjZ	each_itemZ_objer   r   r   report_setting_page  s`    










r   c             C   s   ddl m} ddlm} y@|| j| jj}|r<t|ddS || jj tddiS W n: t	k
r   dd l
}|  dtd }t|ddS X d S )	Nr   )r{   )handle_att_paramsz-1)rc   rb   rb   z%sr   )r   r{   ro   r   r   rp   rq   r   r   rN   r   r   rf   )r&   r{   r   r   r   r   r   r   submit_att_param  s    r   c             C   s  ddl m} ddlm} | jdkrp| }| j}|jrp|j}t|tsLt|}|	dd}d||d}|| d	|S | jd
kr|| j
}| rt| |S t|j}t|}i dd}	x"|D ]}
d||
 ig|	d |
< qW |	d  dt|ig|	d d< t|	S d S )Nr   )r   )RuleFormr@   -r   Zattrule)r   r   r   zatt/attrule_page.htmlr   z-1)rc   rb   rc   messageError)r   r   r   r   r   rp   rq   r   rK   replacer   r   save_att_rulerh   ri   r   r   r   )r&   r   r   r   rp   Zrequest_current_companyr   rl   Zerrors_dictZreturn_dictr   r   r   r   att_rule_page  s0    






r   c                s   dd l }ddlm} ddlm} ddlm} ddlm}m	} |j
  fdd|D }tt|t|krvtdd	d
S | jj}	||	}
 dd}|||
d< x  D ]\}}||
|< qW ||
 |dt| jj  || jj tddiS )Nr   )r   )r{   )	CALC_KEYS)get_att_paramsave_att_param_to_dbc                s   g | ]}  |d qS )N)rA   )r   r   )r   r   r   r      s    z!save_att_rule.<locals>.<listcomp>zDuplicate function keyz-1)rc   rb   r   r   r   rb   )rh   r   r   r   r{   Zmysite.att.db_constr   ro   r   r   r   rB   r   r   rp   rq   popr   rg   r   rK   r   )r&   r   rh   r   r{   r   r   r   r   r   Zparamsr   r   r   r   )r   r   r     s&    r   c       	      C   s   ddl m} |d| jj}i }|rd|krx^t|d D ]N\}}|dd r>i }x,|d D ] }|d |dd	g||d
 < q`W |||< q>W d|i}t| d|dS )Nr   )r   zreport_permission_{}groupsZisReportZmenushexZiconr   labelr   zatt/report/reportall.html)rl   )r   r   rA   formatrp   r   r   r   )	r&   r   Zreport_permZreport_groupsr   grouprg   r   rl   r   r   r   reports)  s     r  c          
   C   sT  dd l }ddlm} ddlm} ddlm} ddlm} ddl	m
} ddlm} | jdkrnd	d
i}|| d|S | jdkrN| jdd }	| jdd }
|	r|
st|dtddS ytj|	d}	W n2 tk
r } zt|d|dS d }~X Y nX y tj|
dtjddd }
W n4 tk
rP } zt|d|dS d }~X Y nX |	|
krtt|dtddS | jdd }|s| jdd }|jj|djddd}|st|dtddS |||	|
|  d t| jjt| jjf }||d }||}|d!d}|d"d}|d#d$}t|d|||td%d&S | S )'Nr   )r   )HttpResponseForbidden)r   )get_current_company_id)r
   )r   r@   r   calculation_viewzatt/calculation_view.htmlr   rY   rZ   r   Z&attCalculation_alert_dateRangeNotFound)rb   rc   z%Y-%m-%dr   )r   r%   r_   r~   r   )r   r"   T)r#   Z%attCalculation_alert_employeeNotFoundzatt_calc_tag_%s_%sr   r   r   r   Z(attCalculation_alert_calculationFinished)rb   totalr   r   rc   ) rh   r   r   Zdjango.http.responser  r   r   mysite.att.utilsr	  mysite.att.calc.viewsr
   r   r   r   r   rA   r   ri   rf   r   r   rN   rG   ZgetlistrD   rE   rF   rK   rp   r"   rq   r   )r&   rh   r   r  r   r	  r
   r   rl   rY   rZ   r   rX   r   r   r   r   r   r   r   r   r   r   r
  <  sP    
" "

r
  c             C   s  ddl m} ddlm} ddlm} ddlm} ddlm} | j	dkrg }|j
 }t|}i }	x |D ]}
||
j|
jd qfW |d	krd
}n|dkrd}nd}||	d< t||	d< || d|	S | j	dkrg }i }tj }|tjdd }|j
 }yxr|D ]j}
|j
j|
djddd}t|}|j
j| | g|dd  }||
j|||| d qW ||d< d|d< W n tk
r   d|d< Y nX t|S d S )Nr   )r   )ry   )r   )Transaction)get_all_childrens_by_deptidr@   )	dept_namer   r2   r,   r/   r-   	data_listcolumnz att/attendance_display_view.htmlr   r   )r   )r   r   T)r#   )Zpunch_time__rangeZemp_code__in)r   quantitypresentZabsencer   )r   r   r   ry   r   Zmysite.iclock.modelsr  Z(mysite.personnel.models.model_departmentr  r   rD   r   rB   rR   r  r   rM   r   nowrG   rE   rF   r   ZdistinctrL   rN   r   )r&   r   ry   r   r  r  r  r   Zdept_totalsrl   dZcoulmnZdatasr  Znext_dayrX   r  r  r   r   r   attendance_display_viewt  sV    





r  c       
      C   s   dd l }ddlm} ddlm} |j }|dddddd	d
ddddddddd}g }x|D ]x}|}t|d |d< |d 	d|d< |d 	d|d< |d dkrt
d}	n|d dkrt
d}	|	|d< || q\W t||d|iS )Nr   )r   )	BreakTimer"   r   Zperiod_startZ
period_end	calc_typeZbreak_in_earlyZ
early_overZ
early_typeZbreak_in_lateZ	late_overZ	late_typer   Zavailable_interval_typeZrequired_durationZmultiple_punchZminimum_durationz%H:%MZauto_deductr   Zrequired_punchr   )rh   rd   r   r   r  rD   r   r   rM   r   rf   rR   r   ri   )
r&   rh   r   r  ZallObjsZbksr  Zbkr   r  r   r   r   breaktime_list  s*    


r  c             C   s   dd l }ddlm} ddlm} ddlm} | }|dd }|sht|j	j
|ddd}|d| | j d	krt|d|d
S d S )Nr   )r   )LeaveCategory)r	  Zleave_category)r   r"   Zcategory_namerA   )r   r   )rh   r   r   r   r  r  r	  rA   r   rD   rE   rF   r   r   lowerr   ri   )r&   rh   r   r  r	  r   Zlcsr   r   r   get_leave_category  s    r   c             C   s   ddl m} || di S )Nr   )r   zatt/attshift/list.html)r   r   )r&   r   r   r   r   get_shift_list  s    r!  c       	   
   C   s  dd l }ddlm} ddlm} y| jdd }|sPt|ddt	d dS |
| jj || jj}|d	g }|jj|d
dddddd}|st|ddg |ddS t|ddt||ddS  tk
r } ztd| W d d }~X Y nX d S )Nr   )r{   )rx   r|   r   z%sZshift_getDetail_error_notFound)r   r   r   )Z	shift__idr   r   r   Ztime_interval__idr   )r   r   )r   r   r   get_shift_detail)rh   r   r{   r   rx   r@   rA   r   ri   rf   r   rp   rq   rD   rE   rP   rF   r   rN   print)	r&   rh   r{   rx   r|   r   r   Zobjsr   r   r   r   r"    s"    
 r"  )2rh   r   Zdjango.contrib.auth.decoratorsr   Zdjango.httpr   r   r   Zdjango.utils.translationr   rf   r   re   Zdjango.views.decorators.csrfr   r   Zmysite.mobile.utilsr	   r  r
   r   r   r   r   Zmysite.utilsr   Zmysite.admin.helpersr   r  r   r   r   r\   rm   rr   r   r   r   r   r   r   r   r   r  r
  r  r  r   r!  r"  r   r   r   r   <module>   sN   :K *1878