B
    bp                 @   s`   d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZ d dlmZ G dd deZdS )    N)ladonize)	request_validonline_employee_newinterface_responsedatetime2stamp
get_senderMESSAGE_CODESUCCESS_CODEDATA_EXCEPTIONpaging)gettext_lazyc            
   @   sT   e Zd ZdZeeeeeeeeeddd Zeeeeeeeeeddd Z	dS )BioTimeAppNotificationu#   
    【Notification】 Notice
    )Zrtypec       <      C   s  ddl m}m}m}	m}
m}m}m}m} ddl	m
} ddlm} ddlm} ddlm} ddlm} ddlm} d	}||||	|
||||fkrtd
}ttdd|tS |g d}||	fkr&ddlm} |jj|d}|jdd}|rv|d }|j|jj|jj |jj!|j"d#|j$t%|j&d}nP||fkrddl'm(} |jdd}|jj|d}|rv|d }|j|jj|jj |jj!|j"d#|j$t%|j&d}n||fkrddl)m*} |jdd}|jj|d}|rv|d }|j|jj|jj |jj!|j"d#|j$t%|j&d}n`||
fkrddl+m,} |jdd}|jj|d}|rv|d }|j|jj|jj |jj!|j"d#|j$t%|j&d}n||fkrddl-m.} |jdd}|jj|d}|rv|d }|j|jj|jj |jj!|j"d#|j$t%|j&d}nt||fkrvddl/m0}  | jj|d}|jdd}|rv|d }|j|jj|jj |jj!|j"d#|j$t%|j&d}|rt1|j2}!|d |d p|d ||d |d  d#|!3|d  d!|d" |d# d$}"|d% 4|" |jj|j5|d&6d'd"d(d)d*d+d,d-d.d/
7d0}#g }$|#rڐx|#D ]}%|%d1 }&|&rdd2l8m9}' |'jj|&d}(|(rp|(d }(|(j  })}*|(j:}+nd3 }) }*}+t%|%d4 |%d |*|)||+pd5d#|%d6 d#|!|%d  d7g}$P q"|%d },i }-|,|j;|j<|j=gkrh|%d8 }.|%d9 }/|jj|.d}0|0j6d:d;d<> }1|0j6d=d;d<}2|%d> }3|3s|jj|d d?j6d@d;d<> }4|4r|jj|1|4dA6dBdC> j?|d d?}5n&|jj|1dD6dBdC> j?|d d?}5|5r>g }6g }7x2|5D ]*}8|8d })|8d6 }*|64|) |74|* qW t@|6d6kr,dEA|6}+t@|7d6kr&td	|7}9dEA|9}:d};n|)}+|*}:||)};n(dF#|/}+dG#dHAdIdJ |2D }:d};n|%dK }+|%dL }:||%dK };|,dKkrdL},t%|%d4 |,d#|!|, |:|+|;|%d6 dM}-|$4|- q"W |d% B|$ ttCtDE|ddNS )Ou"  
        get approve notification
        @param category:
        @param code:            object id
        @param source:           data source(1: IOS， 2：Android)
        @param device_token:     Token for push message
        @param language:
        @param token:
        @rtype:
            success
                {"code":1, "error":"", "describe":"", "message":"", "data":[{"pin":"emp_code",""name": "first_name",
                "photo": "photo address",approve_status":"int value","approve_describe":"status describe",
                 "action_time":　(stamp)}, ]}
                approve_status: 　１:pending，２：approved，３：rejected
            fail
                {"code": -10001, "error": "", "describe": "exception state", "message": "Pop-up message", "data":""}
        r   )CATEGORY_LEAVECATEGORY_OVERTIMECATEGORY_MANUALCATEGORY_TRAININGCATEGORY_SCHEDULECATEGORY_ANNOUNCEMENTCATEGORY_ATTENDANCECATEGORY_REIMBURSEMENT)models_choices)ContentType)NodeInstance)
user_photo)Employee)WorkflowNodeNZParameter_error )categoryitems)	ManualLog)idZattZ	manuallogz{0})codepinname
departmentapprove_statusremarkaction_time)Leaveleave)Overtimeovertime)Trainingtraining)ChangeScheduleZchangeschedule)ReimbursementZpayrollreimbursementr"   r#   r%   ZApplyr&   r'   )r"   r#   photor%   approve_describer&   r'   r   )Z0workflow_instance__workflow_engine__content_typeZworkflow_instance__exception_idstate
apply_timeZapprover_employee__first_nameZapprover_employee__emp_codeZapprover_adminZis_last_nodeZnode_engine__idZ node_engine__approver_by_overallZnode_engine__node_codeZnode_engine__order_id   )MyUserZadmin   z/files/photo/administrator.png   )r'   r%   r#   r"   r1   r&   r2      ZapproverT)ZflatZapprover__role_name   )emp_coder$   )flow_role__inZdepartment__inr<   
first_name)r=   /znode:{0}zApprove Role : {0},c             s   s   | ]}t |V  qd S )N)str).0r rD   @G:\easytimepro\master/mysite/mobile\services\app_notification.py	<genexpr>   s    z;BioTimeAppNotification.pull_approve_flow.<locals>.<genexpr>      )r'   r%   r2   r#   r"   r1   r&   
successful)Fmysite.mobile.choicesr   r   r   r   r   r   r   r   
mysite.attr   Z"django.contrib.contenttypes.modelsr   Zmysite.workflow.modelsr   mysite.mobile.utilsr   Z&mysite.personnel.models.model_employeer   r   _r   r   r
   Z!mysite.att.models.model_manuallogr   objectsfilterZget_by_natural_keyZpkZemployeer<   r>   r$   Zaudit_statusformatZapply_reasonr   r4   Zmysite.att.models.model_leaver(   Z mysite.att.models.model_overtimer*   Z mysite.att.models.model_trainingr,   Z&mysite.att.models.model_changescheduler.   Zmysite.payroll.modelsr/   dictZALL_AUDIT_STATUSgetappendr    Zvalues_listorder_byZmysite.accounts.modelsr6   emp_pinAPPLICATIONAUDITINGAPPLICATION_AGAINZdistinctZexcludelenjoinextendr	   jsondumps)<selfr   r!   sourcedevice_tokenlanguagetokenr   r   r   r   r   r   r   r   r   r   r   r   r   r   ZprofileZdescribedatar   ZobjsZct_objobjr(   r*   r,   r.   r/   statusitemZapprove_nodesZ
flow_itemsZnodeZadmin_approverr6   userr"   r#   rU   Znode_statusZ	flow_itemZnode_idZ	node_codeZnode_objZ
flow_rolesZ	flow_nameZ
by_overallZdeptsZempsZpinsnamesempZac_nameZemp_nameZ	emp_photorD   rD   rE   pull_approve_flow   s   (























z(BioTimeAppNotification.pull_approve_flowc       3      C   sl  ddl m} ddlm}m}	m}
m}m}m}m	}m
}m}m}m} ddlm}m}m} ddlm} ddlm} ddlm} ddlm} dd	l}|pd
}d}|d
 | }|| }t|}|jjj}|jd
|j d|j!d|j"d|j#d|j$d|j%di} |r<t&|
}!|g d}"d|j d }#|ddd||#dd}$||$ddd}$||$}%g }&|%rdd |%D }&||#d'|j( )dd }'|dd!d|'d}(||( x|&D ]})t*|)}*||||fkrH|)d" |*d# |*d$ d%d%d%d%d%d%d%d&
}+|)d' r6t+,|)d' },|,d( }-| -|-d	}-|+.|,d) |,d* |,d+ |,d, |,d- |-|,d. d/ |"d0 /|+ q||fkr|)d" |*d# |*d$ d%d%d%d%d%d%d1	}+|)d' rt+,|)d' },|,r|,d( }-| -|-d	}-|+.|t0|,d) ||,d2 |,d, |,d- |-|,d. d3 |"d0 /|+ q||fkr|)d" |*d# |*d$ d%d%d%d%d%d%d%d4
}+|)d' rt+,|)d' },|,d( }-| -|-d	}-|+.|,d) |,d5 pfd6|,d7 |,d, |,d- |-|,d. d8 |"d0 /|+ q||fkr|)d" |*d# |*d$ d%d%d'|!-|)d9 d%|)d9 t1|)d d:}+|)d' rt+,|)d' },|+.|, |"d0 /|+ q||fkrv|)d" |j2|*d$ d'|!-|)d9 d%|)d9 |)d' t1|)d d;}+|"d0 /|+ n||fkr|)d" |*d# |*d$ d%d%d%d%d%d%d%d<
}+|)d' rt+,|)d' },|,r|,d( }-| -|-d	}-|+.|,d= |,d> |,d? |,d, |,d- |-|,d. d@ |"d0 /|+ qW |"d0 || }.|.|"d0< nt&|	}/|j3j4||dA5d)6d)j7|d)dB}0d
dCd'|/d
 ddDddEd'|/d ddDddFd'|/d ddDddGd'|/d ddDddHd'|/d ddDddId'|/d ddDddJd'|/d ddDdKdLd'|/dK ddDg}"x6|0D ].}1|1d) d
 }2|"|2 }+|1dM |+dM< |+|"|2< q&W t8t9t+:|"d%dNS )Ou	  
        get announcement
        @param page_num: page number(15items/page)
        @param category:
            (1:Leave, 2:Overtime, 3:Manual Punch, 4:Training, 5:Schedule, 6:Announcement, 7:Attendance, 8:Reimbursement)
            category=0 return the unread count
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:
        @param token:
        @rtype:
            success
                category=0
                    {"code":1,"error":"","describe":"","message":"","data":[
                    {"category": (int), "category_name": '', 'category_label': "title name", "unread": 'unread count'},
                    ]}
                category in (1, 2, 4)
                {"code":1,"error":"","describe":"","message":"","data":{"category":1,
                "items":[{"code": ID,"pin":"emp_code","name":"first_name","photo":"photo address","start":
                "start time(stamp)","end":"end time(stamp)","remark":"apply reason","category":"","apply_time":"",
                "approve_status":"int value","approve_describe":"status describe","approved_remark":"approve reason",
                 "approved_time":"approve time"},]}}
                category = 3
                {"code":1,"error":"","describe":"","message":"","data":{"category":1, "items":[{"code": ID,"pin":
                "emp_code","name":"first_name","photo":"photo address","punch_time":"punch time(stamp)",remark":
                "apply reason","category":"","apply_time":"","approve_status":"int value","approve_describe":
                "status describe","approved_remark":"approve reason","approved_time":"approve time"},]}}
                category = 5
                {"code":1,"error":"","describe":"","message":"","data":{"category":1, "items":[{"code": ID,"pin":
                "emp_code","name":"first_name","photo":"photo address","previous_shift":"","currently_shift":"",
                "remark":"apply reason","category":"","apply_time":"","approve_status":"int value","approve_describe":
                "status describe","approved_remark":"approve reason","approved_time":"approve time"},]}}
            fail
                {"code":-10001,"error":"","describe":"","message":"Pop-up message","data":""}
        r   )AppNotification)UNREADAPPLICANT_CATEGORYSUB_CATEGORYr   r   r   r   r   r   r   r   )get_sqlp_query	p_execute)r   )get_func_key)Count)employee_transaction_pagingNr8      r7   rH   rG   r5      r9   )r   r   'sqlZnotificationmobile)r   receiver)ZsqlidZappparamsnotification_timeZdesc)Z	sort_nameZ
sort_orderc          	   S   s6   g | ].}|d  |d |d |d |d |d dqS )r   r8   r7   rH   rG   r5   )sub_categorysenderZsystem_sendercontentr_   r|   rD   )rB   rC   rD   rD   rE   
<listcomp>Q  s   z<BioTimeAppNotification.pull_notification.<locals>.<listcomp>z{0}z%Y-%m-%d %H:%M:%S)r   rz   Z	read_timeZread_notificationr_   r#   r1   r   )
r!   r#   r1   r   startendr&   r4   r%   r2   r   r%   r   r   r   r&   r4   r2   )r   r   r   r&   r4   r%   r2   r   )	r!   r#   r1   r   
punch_timer&   r4   r%   r2   r   )r   r   r&   r4   r%   r2   )
r!   r#   r1   r   previous_shiftcurrently_shiftr&   r4   r%   r2   Zprevious_timeintervalNoneZcurrently_timeinterval)r   r   r   r&   r4   r%   r2   r}   )r!   r#   r1   Zsubjectr   r   category_valr|   )r!   r#   r1   r   r   r   r|   )
r!   r#   r1   amountr&   
start_dateend_dater4   r%   r2   r   r   r   )r   r   r   r&   r4   r%   r2   )rz   Zread_status)unreadr)   )r   Zcategory_nameZcategory_labelr   r+   Zmanualr-   ZscheduleZannouncementZ
attendancer;   r0   r   rI   );Z'mysite.mobile.models.model_notificationrk   rJ   rl   rm   rn   r   r   r   r   r   r   r   r   Zmysite.sql_utilsro   rp   rq   rK   r   Zmysite.att.att_paramrr   Zdjango.db.modelsrs   rL   rt   datetimer   r$   Zcompanyr    rV   ZAUDIT_SUCCESSZREFUSErX   rW   ZCANCEL_AUDIT_SUCCESSZWITHDRAW_AUDIT_SUCCESSrQ   rP   Znowstrftimer   r\   loadsrR   updaterS   rA   r   r>   rN   rO   rT   valuesZannotater   r	   r]   )3r^   Zpage_numr   r_   r`   ra   rb   rk   rl   rm   rn   r   r   r   r   r   r   r   r   ro   rp   rq   r   rr   rs   rt   r   Z	PAGE_SIZEZbeginr   ri   Z
company_idre   r}   rc   Zemp_id_formatrx   ZrowsZvalsr{   Zupdate_statusvalr~   rf   Zdetailr%   Zpagination_itemsZ	categorysZnfcsZnfcZcategory_indexrD   rD   rE   pull_notification  sv   &4










z(BioTimeAppNotification.pull_notificationN)
__name__
__module____qualname____doc__r   r   intrA   rj   r   rD   rD   rD   rE   r   
   s     ur   )r\   Zmysite.ladon.ladonizerr   rL   r   r   r   r   r   r   r	   r
   r   Zdjango.utils.translationr   rM   objectr   rD   rD   rD   rE   <module>   s   ,