
    si                     .   d dl Z d dlZd dlmZmZ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lmZ d dlmZ d dl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- 	  G d de&      Z. G d de&      Z/ G d de&      Z0 G d de&      Z1 G d dejd                        Z3 G d d ejd                        Z4	  G d! d"e&      Z5 G d# d$e&      Z6 G d% d&e&      Z7 G d' d(e&      Z8 G d) d*ejd                        Z9 G d+ d,ejd                        Z: G d- d.ejd                        Z; G d/ d0e&      Z< G d1 d2ejd                        Z= G d3 d4e&      Z> G d5 d6ejd                        Z?d7 Z@ e@        y)8    N)datedatetimetimezonerelativedelta)apps)ValidationError)MinValueValidator)models)Value)Concat)reversereverse_lazy)r   )gettext_lazy)HorillaCompanyManager)Company
DepartmentJobPosition)
BonusPointEmployee)_thread_locals)HorillaModelget_diff)HorillaAuditInfoHorillaAuditLogrender_templatec                       e Zd ZdZ ej
                  dd      Z ej                         Z ej                         Z	 ej                  ed ed            Z ed      Zd Zd	 Zd
 Zd Zd Zy)Periodz/this is a period model used for creating period   T)
max_lengthuniquer   blankverbose_name
company_idc                     | j                   S N)period_nameselfs    ./var/www/python-projects/worksol/pms/models.py__str__zPeriod.__str__%   s        c                      t        dd| i      S )#
        For action column
        zcbv/period/actions.htmlinstancepathcontextr   r+   s    r-   
action_colzPeriod.action_col(       
 *&
 	
r/   c                 8    t        dd| j                  i      }|S )
        detail view
        zperiod-detail-viewpkkwargsr   r:   r,   urls     r-   detail_viewzPeriod.detail_view2   s    
 *D$''?C
r/   c                      t        dd| i      S )z%
        detail view actions
        z#cbv/period/detail_view_actions.htmlr2   r3   r   r+   s    r-   detail_view_actionszPeriod.detail_view_actions:   s     6&
 	
r/   c                     | j                   j                         }dj                  |D cg c]  }t        |       c}      }|S c c}w )z,
        interviewer in detail view
        z, )r'   alljoinstr)r,   company_namecompanycompany_names_strings       r-   company_id_detailzPeriod.company_id_detailC   s@     **,#yyl)S7#g,)ST## *Ts   AN)__name__
__module____qualname____doc__r   	CharFieldr*   	DateField
start_dateend_dateManyToManyFieldr   _r'   r   objectsr.   r6   r@   rB   rJ    r/   r-   r    r       sv    9"&""c$?K!!!#Jv!H'''t!I,WJ#L1G 

$r/   r    c                      e Zd ZdZd ed      fd ed      fdfZ ej                  ddd	d
      Z ej                  d	d	dd      Z
 ej                  dde      Z ej                  ddd      Z ej                  ddd      Z ej                  d	      Z eeg      Z ej(                  edd ed      ej,                        Z e       Z G d d      Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"y")#	KeyResultz model used to create key results%
Percentage#NumberCurrency))$zUSD$)u   ₹INR)u   €EUR<   TFTitler"   nullr%   r&      Descriptionr%   re   r"   r&   )r"   defaultchoicesd   re   r%   ri   zIn Days)re   r%   	help_textri   basesr   re   r%   r&   	on_deletec                       e Zd ZdZdgZy)KeyResult.Meta3
        Meta class for additional options
        -idNrK   rL   rM   rN   orderingrV   r/   r-   Metart   j       	
 
r/   ry   c                     | j                    S r)   titler+   s    r-   r.   zKeyResult.__str__s       **r/   c                     t        | j                  d   d         }| j                  |v r|| j                     S t        | j                        }|j                  | j                        S )N      )dictPROGRESS_CHOICESprogress_typeget)r,   currency_dictprogress_dicts      r-   get_progress_typezKeyResult.get_progress_typev   sb    T2215a89. !3!344T223  !3!344r/   c                      t        dd| i      S )7
        This method for get custome coloumn .
        zcbv/key_results/actions.htmlr2   r3   r   r+   s    r-   r6   zKeyResult.action_col}   s    
 /&
 	
r/   c                      t        dd| i      S )r   z(cbv/key_results/detail_view_actions.htmlr2   r3   r   r+   s    r-   detail_action_colzKeyResult.detail_action_col   s    
 ;&
 	
r/   c                 x    t        j                  dd| j                        }|j                  dd      }d| d}|S )za
        Method will return the API URL for the avatar or the path to the profile image.
        z[^a-zA-Z0-9\s]  +!https://ui-avatars.com/api/?name=&background=random)resubr}   replace)r,   sanitized_titler?   s      r-   
get_avatarzKeyResult.get_avatar   sB     &&!2B

C)11#s;1/1BBTU
r/   c                 8    t        dd| j                  i      }|S )>
        to get the delete url for card action delete
        zdelete-key-resultobj_idr;   r=   r>   s     r-   get_delete_urlzKeyResult.get_delete_url   s    
 )8TWW2EF
r/   c                 8    t        dd| j                  i      }|S )!
        Detail view url
        zkey-result-detail-viewr:   r;   r   r:   r>   s     r-   get_detail_urlzKeyResult.get_detail_url   s     3T477OL
r/   c                 8    t        dd| j                  i      }|S )>
        to get the update url for card action update
        zupdate-key-resultr:   r;   r=   r>   s     r-   get_update_urlzKeyResult.get_update_url   s    
 )4/B
r/   N)#rK   rL   rM   rN   rT   r   r   rO   r}   	TextFielddescriptionr   IntegerFieldtarget_valuedurationBooleanFieldarchiver   r   history
ForeignKeyr   CASCADEr'   r   rU   ry   r.   r   r6   r   r   r   r   r   rV   r/   r-   rX   rX   L   s3   * 
ao	akE
 FDGE #&""%CmK %F$$s,<M '6&&DcJL"v""DINH!f!!%0G%5$67G"""y\..J $%G
 
5

r/   rX   c                       e Zd ZdZd ed      fd ed      fd ed      ffZ ej                  ddd	d
      Z ej                  dddd      Z
 ej                  eddd      Z ej                  eddd      Z ej                  eddd      Z ej                  dedddd      Z ej$                  d ed      g      Z ej*                  d      Z ej*                  d      Z eeg      Z ej6                  edd ed      ej:                         Z ej*                  d      Z e        Z! G d! d"      Z"d# Z#d$ Z$d% Z%d& Z&d' Z'd( Z(d) Z)d* Z*d+ Z+d, Z,d- Z-d. Z. fd/Z/ xZ0S )0	Objectivez"Model used for creating objectivesdaysDaysmonthsMonthsyearsYearsFrk   rc   re   r%   r"   r&   rf   rg   rh   	objectiveTManagersrelated_namer%   r&   assignees_objective	AssigneeszDefault Key resultsr%   r   r&      zDuration Unit)r"   rj   re   r%   ri   r&   r   r   ri   
validatorsrn   ro   r   rq   c                       e Zd ZdZdgZy)Objective.Metaru   rv   Nrw   rV   r/   r-   ry   r      rz   r/   ry   c                     | j                    S r)   r|   r+   s    r-   r.   zObjective.__str__   r~   r/   c                     | j                   S r)   r:   r+   s    r-   get_instance_idzObjective.get_instance_id       wwr/   c                      t        dd| i      S "
        For title column
        zcbv/objectives/title.htmlr2   r3   r   r+   s    r-   	title_colzObjective.title_col       
 ,&
 	
r/   c                      t        dd| i      S $
        For manager column
        zcbv/objectives/manager.htmlr2   r3   r   r+   s    r-   manager_colzObjective.manager_col       
 .&
 	
r/   c                      t        dd| i      S r1   zcbv/objectives/actions.htmlr2   r3   r   r+   s    r-   actions_colzObjective.actions_col  r   r/   c                      t        dd| i      S z(
        For self action column
        z)cbv/objectives/self_objective_action.htmlr2   r3   r   r+   s    r-   self_action_colzObjective.self_action_col      
 <&
 	
r/   c                      t        dd| i      S (
        For Key results column
        zcbv/objectives/key_results.htmlr2   r3   r   r+   s    r-   key_res_colzObjective.key_res_col      
 2&
 	
r/   c                      t        dd| i      S )z@
        For Key results column for employee objectives
        z$cbv/objectives/self_key_results.htmlr2   r3   r   r+   s    r-   self_key_res_colzObjective.self_key_res_col&      
 7&
 	
r/   c                      t        dd| i      S r   zcbv/objectives/assignees.htmlr2   r3   r   r+   s    r-   assingnees_colzObjective.assingnees_col0      
 0&
 	
r/   c                     t        | j                        dz   t        | j                        j	                  | j
                        z   S z
        Duration col
        r   )rF   r   r   DURATION_UNITr   duration_unitr+   s    r-   duration_colzObjective.duration_col:  s;    
 $tD,>,>'?'C'CDDVDV'WW	
r/   c                     t        t        dd       }|j                  j                  }| j                  j                  || j                        }|S )Nrequestemployee_idobjective_id)getattrr   useremployee_getemployee_objectiver   id)r,   r   r   
emp_objects       r-   get_employee_objectivez Objective.get_employee_objectiveB  sG    .)T:||((,,00TPTPWPW0X
r/   c                 8    t        dd| j                  i      }|S )z3
        Detail view of employee objective
        zobjective-detailed-viewr   r;   r   r>   s     r-   get_individual_urlzObjective.get_individual_urlI  s     4h=PQ
r/   c                     t        t        dd       }|j                  j                  d      }| j                  s-| j
                  s!|r|dk7  rt        j                  |      | _        t        | %          y Nr   selected_companyrD   
r   r   sessionr   r   r'   r   findsupersaver,   argsr<   r   r   	__class__s        r-   r   zObjective.saveP  Z    .)T:"??../ABOO  E)%ll+;<DOr/   )1rK   rL   rM   rN   rT   r   r   rO   r}   r   r   rS   r   managers	assigneesrX   key_result_idr   r   r
   r   r   add_assigneesr   r   r   r   r   r   r   r'   self_employee_progress_updater   rU   ry   r.   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r  s   @r-   r   r      s   , 
6	1X;	!G*M
 F%CgE #&""%CmK &v%%{$ZH '&&* 	I +F** *	M %F$$$M #v""1:KA:N9OPH'F''6M!f!!%0G%5$67G"""y\..J %8F$7$7$E!#%G
 








 r/   r   c                   0    e Zd ZdZd ed      fd ed      fd ed      fd ed      fd ed      ffZ ej                  dddd	
      Z ej                  dddd      Z
 ej                  d      Z ej                  eddddej                        Z ej                  edddej                  d      Z ej&                  eddd      Z ej                  d      Z ej                  dd      Z ej                  dd      Z ej                  deddd      Z ej4                  d      Z eegd      Z ej>                  d      Z  e!d      Z" G d  d!      Z#d" Z$d# Z% fd$Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2 xZ3S )1EmployeeObjectivezEthis is a EmployObjective model used for creating Employee objectivesNot StartedOn TrackBehindAt RiskClosedTrk   rc   r   rf   rg   rh   auto_now_addr   r   re   r%   r   r&   rr   r   )re   r%   r   rr   r&   zKey resultsr   )auto_nowFre   r%   r   r"   rj   re   r%   ri   r   rn   history_set)rp   r   +employee_id__employee_work_info__company_idc                       e Zd ZdZdZy)EmployeeObjective.Metaru   r   NrK   rL   rM   rN   unique_togetherrV   r/   r-   ry   r    s    	 :r/   ry   c                     | j                   j                         }t        |      dkD  rOd}|D ]  }|t        |j                  d      z  } t        |t        |      z        | _        | j                          yy)z_
        used for updating progress percentage when current value of key result change
        r   rk   N)employee_key_resultrD   lenminprogress_percentageintr   )r,   krscurrentkrs       r-   update_objective_progressz+EmployeeObjective.update_objective_progress  sr     &&**,s8a<G <3r55s;;<'*7SX+='>D$IIK r/   c                 8    | j                    d| j                   S Nz | )r   r   r+   s    r-   r.   zEmployeeObjective.__str__  s!    ##$C(8(8'9::r/   c                    | j                   s| j                  r| j                  r| j                  j                  }| j                  j                  dk(  r| j                  t        |      z   | _        no| j                  j                  dk(  r| j                  t        |      z   | _        n7| j                  j                  dk(  r| j                  t        |      z   | _        | j                  }| j                  |j                  j                         vr%|j                  j                  | j                         t        | 0  |i | y )Nr   r   r   r   r   r   )r:   r   rQ   r   r   r   rR   r   r  rD   addr   r   )r,   r   r<   r   r   r  s        r-   r   zEmployeeObjective.save  s    ww4,,((11H  ..&8 $-X2N N""00H< $-x2P P""00G; $-h2O O%%	9#6#6#:#:#<<##D$4$45d%f%r/   c                     t        |       S r)   r   r+   s    r-   trackingzEmployeeObjective.tracking  s    ~r/   c                 8    t        dd| j                  i      }|S )z)
        for detail view of page
        zview-employee-objective
emp_obj_idr;   r=   r>   s     r-   employee_objective_detail_viewz0EmployeeObjective.employee_objective_detail_view  s     /tww8OP
r/   c                      t        dd| i      S r   r   r+   s    r-   r   zEmployeeObjective.title_col  r   r/   c                      t        dd| i      S )z'
        Action in detail view
        z#cbv/objectives/emp_obj_actions.htmlr2   r3   r   r+   s    r-   emp_obj_actionz EmployeeObjective.emp_obj_action  s    
 6&
 	
r/   c                 :    | j                   }t        d| |d      S )#
        For status column
        z-cbv/objectives/employee_objective_status.html)r2   objective_key_result_statusr3   )STATUS_CHOICESr   )r,   r8  s     r-   
status_colzEmployeeObjective.status_col  s+     '+&9&9#@ /J
 	
r/   c                     | j                   j                  j                   d| j                   j                  j                   S )zZ
        Return subtitle containing both department and job position information.
        z / )r   employee_work_infodepartment_idjob_position_idr+   s    r-   objective_detail_subtitlez+EmployeeObjective.objective_detail_subtitle  s;     ""55CCDCHXHXHkHkH{H{G|}}r/   c                      t        dd| i      S r   r   r+   s    r-   r   zEmployeeObjective.manager_col  r   r/   c                      t        dd| i      S r   r   r+   s    r-   r   zEmployeeObjective.actions_col  r   r/   c                      t        dd| i      S r   r   r+   s    r-   r   z!EmployeeObjective.self_action_col  r   r/   c                      t        dd| i      S r   r   r+   s    r-   r   zEmployeeObjective.key_res_col  r   r/   c                      t        dd| i      S r   r   r+   s    r-   r   z EmployeeObjective.assingnees_col  r   r/   c                     t        | j                  j                        dz   t        | j                  j                        j                  | j                  j                        z   S r   )rF   r   r   r   r   r   r   r+   s    r-   r   zEmployeeObjective.duration_col$  sV    
 !!**+4$$223778I8I8W8WXY	
r/   )4rK   rL   rM   rN   rT   r9  r   rO   r   r   objective_descriptionrP   
created_atr   r   PROTECTr   r   r   rS   rX   r  
updated_atrQ   rR   statusr   r!  r   r   r   r   r   r   rU   ry   r&  r.   r   r/  r2  r   r5  r:  r?  r   r   r   r   r   r   r  r	  s   @r-   r  r  ^  s   O 
-()	Qz]#	1X;	AiL!	1X;N !  	I -F,,"	 "!!t4J$6$$) ..L $&##)..K +F**)"	M "!!40J!!!uE:JvU%8HVF .&--a8%5$6]SG!f!!%0G#$QRG: :
;&


~





r/   r  c                      e Zd ZdZ ej
                         Z ej                  eej                  ddd      Z
 ej                  eej                  ddd      Z ej                  ddd      Z edgeg      Z ed	      Zd
 Zy)Commentzcomments for objectivescommentTrr   r   re   r%   emp_objective)r  re   r%   )excluded_fieldsrp   r  related_company_fieldc                 N    | j                   j                   d| j                   dS )N - r   )r   employee_first_namerM  r+   s    r-   r.   zComment.__str__G  s&    ""667s4<<.JJr/   N)rK   rL   rM   rN   r   r   rM  r   r   
DO_NOTHINGr   r  r   employee_objective_idDateTimeFieldrG  r   r   r   r   rU   r.   rV   r/   r-   rL  rL  /  s    !f G#&####K .F--..$ &%%4d$OJykBRASTG#KGKr/   rL  c                       e Zd ZdZd ed      fd ed      fdfZd ed      fd ed      fd	 ed	      fd
 ed
      fd ed      ffZ ej                  ddd      Z	 ej                  ddd      Z ej                  edddej                        Z ej                  eddddej"                        Z ej                  ddde      Z ej                  deddd      Z ej*                  ddd      Z ej*                  ddd      Z ej0                  ddd      Z ej0                  ddd      Z ej0                  ddd      Z ej*                  dd      Z ej*                  dd      Z eeg      Z  e!d      Z" ej0                  d       Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1 fd/Z2 fd0Z3 G d1 d2      Z4 xZ5S )3EmployeeKeyResultzemployee key result creationrY   rZ   r[   r\   r]   r  r  r  r  r  rb   Tr"   re   r%   rf   )r%   re   r"   r  )re   r%   r   rr   z
Key resultr  )r"   re   r%   rj   r   r  )r  r%   re   )r  re   r%   r   rl   r  ro   /employee_objective_id__objective_id__company_idrQ  rn   c                 L    | j                    d| j                  j                   S r(  )r  rW  r   r+   s    r-   r.   zEmployeeKeyResult.__str__  s'    $$%S)C)C)O)O(PQQr/   c                 8    t        dd| j                  i      }|S )r   zemployee-key-result-updater:   r;   r=   r>   s     r-   r   z EmployeeKeyResult.get_update_url  s    
 2D$''?K
r/   c                 8    t        dd| j                  i      }|S )r   zdelete-employee-keyresultkr_idr;   r=   r>   s     r-   r   z EmployeeKeyResult.get_delete_url  s    
 17DGG:LM
r/   c                 f    t        j                         j                         }t        d| |d      S )Nz cbv/dashboard/keyresult_col.html)r2   todayr3   )r   rb  r   r   )r,   rb  s     r-   key_result_columnz#EmployeeKeyResult.key_result_column  s/     %%'3!%6
 	
r/   c                      t        dd| i      S )Nzcbv/dashboard/actions.htmlr2   r3   r   r+   s    r-   r   zEmployeeKeyResult.actions_col  s    -&
 	
r/   c                    d}d}| j                   r| j                   t        j                         k(  rd| j                    n#d| j                   t        j                         z
   }| j                   t        j                         k  rd}n#| j                   t        j                         k(  rd}d| j                   d| d	| d
}|S )r   Nsuccesszdue zdue indangerwarningz_
        <span class='d-flex justify-content-between align-items-center'
        >
            z!
            <span title = 'due  z='>
                <ion-icon
                    class="text-z"
                    name="time-sharp"
                >
                </ion-icon>
            </span>
        </span>
        )rR   r   rb  
key_result)r,   duecolorcols       r-   r   zEmployeeKeyResult.title_col  s     == ==DJJL0 t}}o&dmmdjjl:;<  }}tzz|+ $**,.! __ !!$ &!!& (	 
r/   c                 <   t         j                  }|j                  j                  d      s|j                  j                  d      s|j                  j                  d      s|j                  j                  | j
                  j                  j                  j                         v sM| j
                  j                  j                  rL| j
                  j                  |j                  j                  k(  rd| j                   d| j                   d}|S | j                  S )z*
        For current value column
        zpms.change_objectivezpms.change_employeeobjectivezpms.change_employeekeyresultz2
                <input
                    id = "z"
                    type="number" class="oh-input p-1"
                    style="width: 100px;"
                    min="0"
                    value="z"
                    name="current_value"
                    onchange="delayedProgress(this)"
                />
            )r   r   r   has_permr   rW  r   r  rD   r  r   r   current_value)r,   r   rl  s      r-   get_current_value_colz'EmployeeKeyResult.get_current_value_col  s    
 !((LL!!"89||$$%CD||$$%CD||(())66??CCEF **77UU..::gll>W>WW77) $ !../ 0
C J!!!r/   c                 &    d| j                    d}|S )z%
        For progress column
        z+
        <span class="progressPercentage"> z%</span>
        r!  )r,   rl  s     r-   get_progress_colz"EmployeeKeyResult.get_progress_col  s'    ++/+C+C*D E	 
r/   c                      t        dd j                  i      }dj                   fd j                  D              }d| d| d}|S )	r7  z employee-keyresult-update-statusr`  r;   r   c           	   3      K   | ]6  \  }}d t        |       d|j                  k(  rdnd dt        |       d 8 yw)z<option value='z' selectedr   >z	</option>N)rF   rJ  ).0keyvaluer,   s      r-   	<genexpr>z/EmployeeKeyResult.status_col.<locals>.<genexpr>  sO      
U c#hZrt{{8J*PR)SSTUXY^U_T``ij
s   <?zl
            <select
                id="keyResultStatus" name="key_result_status"
                hx-post="z"
                hx-trigger="change" class="oh-table__editable-input w-100"
                hx-on-htmx-after-request = "$('#reloadMessagesButton').click()"
                hx-swap = "none"
            >
                    z
            </select>
        )r   r:   rE   r9  )r,   
update_urloptionsrl  s   `   r-   r:  zEmployeeKeyResult.status_col  sk     .7I

 '' 
"11
 

 % &
 I 	
 
r/   c                     | j                   S r)   r   r+   s    r-   r   z!EmployeeKeyResult.get_instance_id
  r   r/   c                      t        dd| i      S )Nz cbv/dashboard/current_value.htmlr2   r3   r   r+   s    r-   current_value_colz#EmployeeKeyResult.current_value_col  s    3&
 	
r/   c                 "    d| j                    dS )Nz<div class="p-percentage">z%</div>rr  r+   s    r-   progress_colzEmployeeKeyResult.progress_col  s    +D,D,D+EWMMr/   c                 <    d| j                    d| j                    dS )Nz<div data-value="z">z</div>)r   r+   s    r-   target_value_colz"EmployeeKeyResult.target_value_col  s%    "4#4#4"5R8I8I7J&QQr/   c                     | j                   dk7  r4t        | j                        t        | j                         z  dz  | _        y y )Nr   rk   )r   r"  ro  r!  r+   s    r-   update_kr_progressz$EmployeeKeyResult.update_kr_progress  s@    !D&&'#d.?.?*@@(D$ "r/   c                    ddl m} t        |           | j                  }| j
                  } |||       | j                  }| j                  }| j                  }| j                  rt        j                  j                  | j                  | j                        j                  | j                        j!                         rt#        t%        | j                  j&                   d| j                   d            t        j                  j                  | j                  | j                        j!                         r8t#        t%        | j                  j&                   d| j                   d            |dk(  rt#        dt%        d      i      | j                  j(                  d	k(  r|d
kD  rt#        dt%        d      i      ||kD  s||kD  rt#        d      y )Nr   )validate_dater  rW  )r   z already assigned .r   zThe target value can't be zero.rY   rk   zUThe key result progress type is in percentage, so the target value cannot exceed 100.zDThe start value can't be greater than current value or target value.)	pms.formsr  r   cleanrQ   rR   start_valuero  r   r:   rZ  rU   filterr  rW  excludeexistsr	   rT   r   r   )r,   r  rQ   rR   r  ro  r   r  s          r-   r  zEmployeeKeyResult.clean!  s   +__
==j(+&&**(( 77!))00"&"4"4*.*D*D 1  DGG$ &55AABBTUYUgUgThhij  !((//"00&*&@&@ 0  fh &55AABBTUYUgUgThhij 
 1!#D!EF  ++s2|c7I!"Ao%  &+*D!V  +Er/   c                    | j                   r>| j                  s2| j                   t        | j                  j                        z   | _        | j
                  s| j                  s| j                  | _        | j                  r| j                  j                  | _	        | j                          t        | 0  |i | | j                  j                          y )Nr*  )rQ   rR   r   r  r   r:   ro  r  r}   ri  r  r   r   rW  r&  r,   r   r<   r  s      r-   r   zEmployeeKeyResult.save_  s    ??4== OOm''00/ DM wwt11!%!1!1D"0066DO!d%f%""<<>r/   c                       e Zd ZdZdZy)EmployeeKeyResult.metaz;
        Meta class to add some additional options
        r  Nr  rV   r/   r-   metar  l  s    	 Er/   r  )6rK   rL   rM   rN   rT   r   r9  r   rO   ri  r   key_result_descriptionr   r  r   rW  rX   rH  r  r   rJ  rP   rG  rI  r   r  ro  r   rQ   rR   r   r   r   r   rU   r!  r.   r   r   rc  r   r   rp  rs  r:  r   r  r  r  r  r  r   r  r  r	  s   @r-   rZ  rZ  K  s\   & 
ao	akE 
-()	Qz]#	1X;	AiL!	1X;N "!!Rd$GJ-V--DtPST-F--*.. &F%%*!..M %F$$D6FM VF "!!t4dKJ!!!4d$GJ%&%%4tQGK'F''TqIM&6&&DaHL!!!t48JvT6H%5$67G#OG .&--a8R

 D"B2
NR4|?E Er/   rZ  c                       e Zd ZdZ ej
                  ddddd      Z ej                  ed e	d            Z
 ed	      Zd
 Zd Zd Zd Zd Zy)QuestionTemplatezquestion template creationrk   FTrc   )r"   re   r%   r#   r&   r   r$   r'   c                     | j                   S r)   question_templater+   s    r-   r.   zQuestionTemplate.__str__  s    %%%r/   c                 6    | j                   j                         S r)   )questioncountr+   s    r-   question_countzQuestionTemplate.question_count  s    }}""$$r/   c                      t        dd| i      S )r1   z"cbv/question_template/actions.htmlr2   r3   r   r+   s    r-   r6   zQuestionTemplate.action_col  s    
 5&
 	
r/   c                 &    d| j                    d}|S )zZ
        Method will retun the api to the avatar or path to the question template
        r   r   r  r>   s     r-   r   zQuestionTemplate.get_avatar  s     2$2H2H1II[\
r/   c                 8    t        dd| j                  i      }|S )r   zquestion-template-detailed-viewtemplate_idr;   r   r>   s     r-   r   zQuestionTemplate.get_detail_url  s#     -}dgg6N
 
r/   N)rK   rL   rM   rN   r   rO   r  rS   r   rT   r'   r   rU   r.   r  r6   r   r   rV   r/   r-   r  r  w  sb    $(((U%7 (''t!I,WJ#L1G&%
r/   r  c                      e Zd ZdZd ed      fd ed      fd ed      fd ed	      fd
 ed      ffZ ej                  ddd      Z ej                  eddd      Z	 ej                  eej                  ddd      Z ed      Zd Zy)Questionzquestion creation1Text2Rating3Boolean4zMulti-choices5Likert   Fr[  rk   T)rj   r"   re   r%   r  rN  template_id__company_idc                     | j                   S r)   )r  r+   s    r-   r.   zQuestion.__str__  s    }}r/   N)rK   rL   rM   rN   rT   QUESTION_TYPE_CHOICEr   rO   r  question_typer   r  r   r  r   rU   r.   rV   r/   r-   r  r    s     
ai	ak	a	l	a !	ak  v3U%HH$F$$$4tM $&##..K $$=>Gr/   r  c                   
   e Zd ZdZ ej
                  eej                  ddd      Z ej                  ddd      Z
 ej                  ddd      Z ej                  ddd      Z ej                  ddd      Z ed      Zy)	QuestionOptionszoptions for questionquestion_optionsTrN  r  r[  $question_id__template_id__company_idN)rK   rL   rM   rN   r   r   r  rH  question_idrO   option_aoption_boption_coption_dr   rU   rV   r/   r-   r  r    s    #&##..'K  v3TFHv3TFHv3TFHv3TFH#$JKGr/   r  c            
           e Zd ZdZd ed      fd ed      fd ed      fd ed      fd ed      ffZd ed      fd	 ed
      fd ed      ffZ ej                  ddd ed            Z	 ej                  edej                  dd ed            Z ej                  eej                  ddd ed            Z ej                  edd ed       ed            Z ej                  edd ed       ed            Z ej                  edd ed       !      Z ej                  eej                  d"dd ed#            Z ej                  d$ed%      Z ej,                  ddd&      Z ej0                  dd ed'      (      Z ej0                  dd ed)      (      Z ej                  ed ed*      +      Z ej,                  d ed,      -      Z ej<                  dd ed.      /      Z ej                  d$edd0      Z  ej0                  dd1      Z! ej0                  dd1      Z" e#d2      Z$ G d3 d4      Z% fd5Z&d6 Z'd7 Z(d8 Z)d9 Z*d: Z+d; Z,d< Z-d= Z.d> Z/ xZ0S )?Feedback$feedback model for creating feedbackr  r  r  r  r  r   r   r   r   r   r   rk   Frc   rd   feedback_managerTManager)r   rr   re   r%   r&   feedback_employeer   rr   r   re   r%   r&   feedback_colleague	Colleaguez)Employees working on the same department.)r   r%   r&   rm   feedback_subordinateSubordinateszBEmployees for whom the feedback requester is the reporting managerfeedback_otherszOther Employeesr   feedback_question_templatezQuestion Template2   r"   rj   ri   rl   z
Start Date)re   r%   r&   End Date
Key Resultr$   zIs Cyclic Feedback)ri   r&   zCycle Period)r%   re   r&   )r"   rj   r%   re   r  r  c                   2    e Zd ZdgZ ed      Z ed      Zy)Feedback.Metarv   r  	FeedbacksN)rK   rL   rM   rx   rT   r&   verbose_name_pluralrV   r/   r-   ry   r  %  s    7}nr/   ry   c                    | j                   }| j                  }| j                  }| j                  }|dk(  r3| j                   t	        |      z   | _        |t	        |      z   | _        n[|dk(  r)|t	        |      z   | _        |t	        |      z   | _        n-|dk(  r(|t	        |      z   | _        |t	        |      z   | _        t        |    |i | y )Nr   r+  r   r,  r   r*  )	rQ   rR   cyclic_feedback_periodcyclic_feedback_days_countr   cyclic_next_start_datecyclic_next_end_dater   r   )r,   r   r<   rQ   rR   r  r  r  s          r-   r   zFeedback.save*  s    __
==!%!<!<%)%D%D"!X-*.//M1= +D' )1=14 )D% $w.*4}08 +D' )1=04 )D% $v-*4}/8 +D' )1=/4 )D% 	d%f%r/   c                 L    | j                   j                   d| j                   S NrT  )r   rU  review_cycler+   s    r-   r.   zFeedback.__str__H  s'    ""667s4;L;L:MNNr/   c                     t        j                         j                         }| j                  sy| j                  |z
  j                  S )zK
        Returns number of days between current date and end_date.
        N)r   nowr   rR   r   )r,   current_dates     r-   due_days_diffzFeedback.due_days_diffK  s7      ||~**,}},222r/   c                      t        dd| i      S )z8
        method for rendering custom status col
        z'cbv/360_feedback/custom_status_col.htmlr2   r3   r   r+   s    r-   custom_status_stylezFeedback.custom_status_styleT  s    
 :&
 	
r/   c                      t        dd| i      S )9
        method for rendering custom actions col
        z$cbv/360_feedback/custom_actions.htmlr2   r3   r   r+   s    r-   custom_actions_colzFeedback.custom_actions_col^  r   r/   c                 8    t        dd| j                  i      }|S )8
        This method to get individual feedback
        zfeedback-detailed-viewr   r;   r   r>   s     r-   get_individual_feedbackz Feedback.get_individual_feedbackh  s    
 3T477OL
r/   c                    | j                   dk(  r| j                  j                  d      S t        j                         j                         }| j                  |z
  j                  }| j                  |k  rdn| j                  |k(  rdnd}| j                  |k(  rdn#| j                  |k  rdt        |       dnd	| d}d
| d| d}| j                  j                  d       d| S )z
        Due display
        r  z	%b %d, %Yrg  rh  rf  z	Due todayzOver due by z dayszDue in z
            <span title="z=">
                <ion-icon
                    class="text-zr"
                    name="time-sharp"
                >
                </ion-icon>
            </span>
        r   )rJ  rR   strftimer   r  r   r   abs)r,   r  	date_diffrJ  
title_texthtmls         r-   get_feedback_due_datezFeedback.get_feedback_due_datep  s     ;;("==))+66||~**,]]\177	 }}|+ "mm|; 	 }},  ==</ s9~.e4yk/ 	$ &!!' )	 --((56av>>r/   c                 F    t        d| t        j                         d      S )z3
        This method fro custom due in col
        z cbv/360_feedback/due_in_col.html)r2   r  r3   )r   r   rb  r+   s    r-   custom_due_in_colzFeedback.custom_due_in_col  s#     3!%x~~7GH
 	
r/   c                    t        | j                  j                               }|j                  | j                  j                                |j                  | j
                  j                                | j                  r|j                  | j                         | j                  r|j                  | j                         t        |      S r)   )
setsubordinate_idrD   updatecolleague_id	others_id
manager_idr-  r   list)r,   	employeess     r-   requested_employeeszFeedback.requested_employees  s    ++//12	**..01++-.??MM$//*MM$**+Ir/   c                     t        | j                  j                  t        dt	        d      dt	        d      dt	        d                  j                  dd	d
            S )zM
        Returns all the values list of question inside the template
         employee_id__employee_first_namer   employee_id__employee_last_namez (employee_id__badge_id))	answer_byquestion_id__questionanswerr  )r  feedback_answerannotater   r   valuesr+   s    r-   question_answerzFeedback.question_answer  se    
   )) 6#J5$K+#J * 	 f'
 	
r/   )1rK   rL   rM   rN   rT   r9  PERIODr   rO   r  r   r   rV  r  r   rS   r  r  r  r  question_template_idrJ  r   r   rP   rQ   rR   rZ  employee_key_results_idcyclic_feedbackr   r  r  r  r  r   rU   ry   r   r.   r  r  r  r  r  r  r  r  r  r	  s   @r-   r  r    s   . 
Qz]#	1X;	1X;	AiL!	-()N 
6	1X;	!G*F
 $6##U%ajL #""'##y\J $&####(z]K *6))){^?@L ,V+++~&P
N '&&&()	I -6,,##1*+ V~}F "f!!t4GG!!!uE,XJvTQz]SH4f44AlO *f))A&:$;O "5!4!4An,=" .V--vT .V--4tD+6++TB#$QRG- -
&<O3

#?J

r/   r  c            	            e Zd ZdZd ed      fd ed      fd ed      fd ed      fd ed      ffZd ed      fd	 ed
      fd ed      fd ed      ffZ ej                  ddd      Z	 ej                  ded      Z
 ej                  eej                  dd ed
            Z ej                  eej                  dd ed            Z ej                  eej                  dd ed            Z ej                  ded      Z ej(                  d      Z ej,                  ddd      Z ej                  dddd      Z ej2                  ddd      Z ej6                         ZdefdZ fdZd Z d  Z!d! Z"d" Z# xZ$S )#AnonymousFeedbackr  r  r  r  r  r  generalGeneralemployeer   
departmentr   job_positionJob Positionrk   Fr[  r  r  T)rr   re   r%   r&   r  rl   
   )r"   re   r%   editablerf   )re   r%   r"   returnc                      d| j                    S )NzFeedback based on a )based_onr+   s    r-   r.   zAnonymousFeedback.__str__  s    %dmm_55r/   c                 @   | j                   dk(  r!| j                  dd       d | _        d | _        n_| j                   dk(  r!| j                  dd       d | _        d | _        n/| j                   dk(  r | j                  dd	       d | _        d | _        t        |   |i |S )
Nr  r   r   r  r=  r   r  r>  r  )r  _validate_required_fieldr=  r>  r   r   r  r  s      r-   r  zAnonymousFeedback.clean  s    ==J&))-D!%D#'D ]]l*))/<H#D#'D ]]n,))*;^L#D!%Dw}d-f--r/   c           
      V    t        | |      st        |t        d| d| d      i      y )NzThe z8 field is required when the 'Based on' field is set to 'z'.)r   r	   rT   )r,   
field_namefield_labels      r-   r  z*AnonymousFeedback._validate_required_field  sC    tZ(!{m+cdocpprs!  )r/   c                      t        dd| i      S )r  z&cbv/360_feedback/anonymous_action.htmlr2   r3   r   r+   s    r-   anonymous_actions_colz'AnonymousFeedback.anonymous_actions_col  s    
 9&
 	
r/   c                     | j                   dk(  rd| j                   S | j                   dk(  rd| j                   S | j                   dk(  rd| j                   S y)z+
        return based on condition
        r  zBased On  :  r  r  zBased On  :  General)r  r   r=  r>  r+   s    r-   get_based_on_valuez$AnonymousFeedback.get_based_on_value  sg     ==J&"4#3#3"455]]l*"4#5#5"677]]n,"4#7#7"899)r/   c                 8    t        dd| j                  i      }|S )r  zsingle-anonymous-feedback-viewr   r;   r   r>   s     r-   !get_individual_anonymous_feedbackz3AnonymousFeedback.get_individual_anonymous_feedback'  s    
 ;XtwwDWX
r/   )%rK   rL   rM   rN   rT   r9  BASED_ON_CHOICESr   rO   feedback_subjectr  r   r   r   r   r   r=  r   r>  rJ  rP   rG  r   r   anonymous_feedback_idr   feedback_descriptionr  rU   rF   r.   r  r  r  r  r   r  r	  s   @r-   r
  r
    s   . 
Qz]#	1X;	1X;	AiL!	-()N 
AiL!	Qz]#	q'	>*+	 (v''3U%Pv/H $&##..z]K &F%%..|_M (f''..~&O V~}F "!!t4J!f!!t4GG,F,,D ,6++TcRfnnG6 6. 
*r/   r
  c                      e Zd ZdZ ej
                  ddd      Z ej                  eej                  ddd      Z
 ej                  eej                  ddd      Z ej                  eej                  d	      Z ed
      Zd Zy)Answerfeedback answer model   Tr[  answer_question_idrN  employee_answerr  rr   r   r  c                 L    | j                   j                   d| j                   S r  r   rU  r   r+   s    r-   r.   zAnswer.__str__G  $    ""667s4;;-HHr/   N)rK   rL   rM   rN   r   	JSONFieldr   r   r  rV  r  r   r   r  rH  feedback_idr   rU   r.   rV   r/   r-   r&  r&  0  s    V4tDF#&####)K $&####&K $&##FNN9JK $$QRGIr/   r&  c                      e Zd Z ej                  eej                  ddd      Z ej                  eej                  d      Z
 ej                  ddd      Z ej                  edddej                  	      Z ed
      Zy)KeyResultFeedbackfeedback_key_resultTrN  r  r+  r(  r[  key_result_feedback)r   re   r%   rr   r  N)rK   rL   rM   r   r   r  rH  r0  r   rV  r   r/  r   rZ  r  r   rU   rV   r/   r-   r2  r2  K  s    #&##..*K $&##F--<QK V4tDF%F%%*##M $$QRGr/   r2  c            	       l    e Zd Z ej                  d      Z ej                  dd      Z ej                  e	d e
d            Z ej                  e	d	      Z ej                  e	dd
 e
d       e
d            Z ej                  eej                   dd      Z ej$                  dd      Z ej(                  dd      Z ej                  eddd e
d      ej.                        Z e       Z G d d      Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d  Z'd! Z(d" Z)d# Z* fd$Z+ xZ,S )%Meetingsrk   r"   Tr  meeting_employeer   )r   r&   meeting_manager)r   meeting_answer_employeeszAnswerable Employeesz^Select the employees who can respond to question template in this meeting's, if any are added.)r%   r   r&   rm   )rr   re   r%   F)ri   r  r   )re   r%   r  r&   rr   c                   ,    e Zd Z ed      Z ed      Zy)Meetings.Metar6  N)rK   rL   rM   rT   r&   r  rV   r/   r-   ry   r<    s    }
mr/   ry   c                     | j                   S r)   r|   r+   s    r-   r.   zMeetings.__str__  s    zzr/   c                      t        dd| i      S )r   zcbv/meetings/title.htmlr2   r3   r   r+   s    r-   r   zMeetings.title_col  r7   r/   c           	          | j                   j                         }|r8dj                  |D cg c]  }t        |j	                                c}      }|S yc c}w z(
        manager in detail view
        <br>r   )answer_employeesrD   rE   rF   get_full_namer,   r  r  employee_names_strings       r-   answerable_colzMeetings.answerable_col  sW     ))--/	$*KK?HI8X++-.I%! )(	 J    Ac                      t        dd| i      S )z2
        For answerable employees  column
        zcbv/meetings/detail_action.htmlr2   r3   r   r+   s    r-   detail_actionzMeetings.detail_action  r   r/   c                      t        dd| i      S )z!
        For date column
        zcbv/meetings/date.htmlr2   r3   r   r+   s    r-   date_colzMeetings.date_col  s    
 )&
 	
r/   c                      t        dd| i      S )z&
        For employees column
        zcbv/meetings/employees.htmlr2   r3   r   r+   s    r-   employees_colzMeetings.employees_col  r   r/   c                      t        dd| i      S )r   zcbv/meetings/managers.htmlr2   r3   r   r+   s    r-   managers_colzMeetings.managers_col  s    
 -&
 	
r/   c                      t        dd| i      S )r1   zcbv/meetings/actions.htmlr2   r3   r   r+   s    r-   r6   zMeetings.action_col  r   r/   c           	          | j                   j                         }|r8dj                  |D cg c]  }t        |j	                                c}      }|S yc c}w )z*
        employees in detail view
        rA  r   )r   rD   rE   rF   rC  rD  s       r-   employ_detail_colzMeetings.employ_detail_col  sW     $$((*	$*KK?HI8X++-.I%! )(	 JrG  c           	          | j                   j                         }|r8dj                  |D cg c]  }t        |j	                                c}      }|S yc c}w r@  )managerrD   rE   rF   rC  rD  s       r-   manager_detail_colzMeetings.manager_detail_col  sU     LL$$&	$*KK?HI8X++-.I%! )(	 JrG  c                     t        t        dd       }| j                  sy|j                  j	                  d      s0|j                  j
                  | j                  j                         v r| j                  S | j                  sdS | j                  S )Nr   -zpms.view_meetings)	r   r   responser   rn  r   rT  rD   show_responser,   r   s     r-   mom_detail_colzMeetings.mom_detail_col  sm    .)T:}}LL!!"56||((DLL,<,<,>>== ,,s?$--?r/   c                      t        dd| i      S )Nzcbv/meetings/mom_col.htmlr2   r3   r   r+   s    r-   mom_colzMeetings.mom_col  s    ,&
 	
r/   c                     t        t        dd       }t        | dd       s|| _        |j                  j                  | j
                  j                         v ryy )Nr   z4style="background-color: rgba(255, 166, 0, 0.158);" )r   r   r   r   r   rT  rD   rZ  s     r-   	diff_cellzMeetings.diff_cell  sJ    .)T:tY-"DL<<$$(8(8(::J ;r/   c                 8    t        dd| j                  i      }|S )r9   zmeetings-detail-viewr:   r;   r=   r>   s     r-   meeting_detail_viewzMeetings.meeting_detail_view  s     ,dDGG_E
r/   c                 &    d| j                    d}|S )zV
        Method will retun the api to the avatar or path to the profile image
        r   r   r|   r>   s     r-   r   zMeetings.get_avatar  s     2$**=OP
r/   c                     t        t        dd       }|j                  j                  d      }| j                  s-| j
                  s!|r|dk7  rt        j                  |      | _        t        | %          y r   r   r   s        r-   r   zMeetings.save  r  r/   )-rK   rL   rM   r   rO   r}   rX  r   rS   r   rT   r   rT  rB  r   r  rH  r  r   rX  r   rY  r   r   r'   r   rU   ry   r.   r   rF  rI  rK  rM  rO  r6   rR  rU  r[  r]  r_  ra  r   r   r  r	  s   @r-   r6  r6  a  sr   F,E6T6D(&(('z]K
 %f$$X<MNG-v--/-.l
 *))FNNT  vT6H'F''FM"""y\..J $%G, ,





	@
K r/   r6  c                      e Zd ZdZ ej
                  ddd      Z ej                  eej                  ddd      Z
 ej                  eej                  dddd	      Z ej                  eej                  d
      Z ed      Zd Zy)MeetingsAnswerr'  r(  Tr[  meeting_answer_question_idrN  employee_meeting_answerr   r  meeting_answerr+  r  c                 L    | j                   j                   d| j                   S r  r-  r+   s    r-   r.   zMeetingsAnswer.__str__8  r.  r/   N)rK   rL   rM   rN   r   r/  r   r   r  rV  r  r   r   r6  rH  
meeting_idr   rU   r.   rV   r/   r-   re  re     s    V4tDF#&####1K $&####.K #""FNN9IJ $$QRGIr/   re  c                   6    e Zd Z ej                  eej                  dddd      Z ej                  d      Z	 ej                  ddd      Z ej                  d	      Z ej                  eddej                  d
      Z ed      Zd Zd Z fdZ xZS )EmployeeBonusPointemploye_bonus_pointTr   r  r   rn   r!   r[  r7  employeebonuspoint_set)re   r%   rr   r   r  c                 L    | j                   j                   d| j                   S r  )r   rU  bonus_pointr+   s    r-   r.   zEmployeeBonusPoint.__str__Q  s'    ""667s4;K;K:LMMr/   c                      t        dd| i      S )A
        This method for get custom column for managers.
        zbonus/bonus_point_action.htmlr2   r3   r   r+   s    r-   action_templatez"EmployeeBonusPoint.action_templateT  s     0&
 	
r/   c                    t        |   |i | t        j                  j	                  | j
                        j                         sAt        j                  j                  | j
                  | j                  | j                        }n*t        j                  j                  | j
                        }|xj                  | j                  z  c_        | j                  |_        |j                          y )N)r   )r   pointsreason)r   r   r   rU   r  r   r  createrp  r  r   ru  rv  )r,   r   r<   rp  r  s       r-   r   zEmployeeBonusPoint.save]  s    d%f%!!((T5E5E(FMMO$,,33 ,,''}} 4 K %,,00T=M=M0NKd...!]]r/   )rK   rL   rM   r   r   r   rV  r   r   rp  rO   r2   r  r   r   bonus_point_idr   rU   r.   rs  r   r  r	  s   @r-   rl  rl  <  s    #&####*K &&%%a0Kv3TFHv3/H&V&&..-N $$QRGN
 r/   rl  c                       e Zd Zd ed      fd ed      fgZ ej                  d      red ed      fd ed	      fgz  Zd
 ed      fd ed      fgZg dZd ed      fgZ	d ed      fgZ
d ed      fd ed      fd ed      fgZ ej                  ded      Z ej                  dedd      Z ej                  de       Z ej                  de	dd      Z ej                  dedd      Z ej                  de
dd      Z ej(                  d! ed!      g"      Z ej.                  d#      Zd$ Zd% Zd& Zd' Zd( Zd) Zd* Zd+ Z d, Z! fd-Z"d.e#fd/Z$ xZ%S )0BonusPointSettingzpms.models.EmployeeObjectiver   zpms.models.EmployeeKeyResultr  projectzproject.models.TaskTaskzproject.models.ProjectProject	completed
Completingr  Closing))=r  )rw  rw  )<r  )<=r  )>=r  complition_datezCompletion DaterR   r  ownerOwnermembersMembersr  r   rk   F)r"   rj   re   r  T)r"   rj   re   r%      )r"   rj   r   r   rn   c                 f    t        t        j                        j                  | j                        S )z
        Display model
        )r   rz  MODEL_CHOICESr   modelr+   s    r-   get_model_displayz#BonusPointSetting.get_model_display  s%     %33488DDr/   c                 f    t        t        j                        j                  | j                        S )z#
        Display bonus_for
        )r   rz  	BONUS_FORr   	bonus_forr+   s    r-   get_bonus_for_displayz'BonusPointSetting.get_bonus_for_display  s%     %//044T^^DDr/   c                 f    t        t        j                        j                  | j                        S )z!
        Display field_1
        )r   rz  FIELD_1r   field_1r+   s    r-   get_field_1_displayz%BonusPointSetting.get_field_1_display  %     %--.224<<@@r/   c                 f    t        t        j                        j                  | j                        S )z!
        Display field_2
        )r   rz  FIELD_2r   field_2r+   s    r-   get_field_2_displayz%BonusPointSetting.get_field_2_display  r  r/   c                 f    t        t        j                        j                  | j                        S )z(
        Display applicable_for
        )r   rz  APPLECABLE_FORr   applicable_forr+   s    r-   get_applicable_for_displayz,BonusPointSetting.get_applicable_for_display  s'     %44599$:M:MNNr/   c                     dt        t        j                        j                  | j                         d| j
                   dt        t        j                        j                  | j                         S )z-
        Get the condition for bonus
        r   )r   rz  r  r   r  
conditionsr  r  r+   s    r-   get_conditionzBonusPointSetting.get_condition  sy     4)11266t||DEQtFWWXY]^o^w^wYxY|Y|  ~B  ~J  ~J  ZK  YL  M  	Mr/   c                      t        dd| i      S )rr  z bonus/bonus_seetting_action.htmlr2   r3   r   r+   s    r-   rs  z!BonusPointSetting.action_template  s    
 3&
 	
r/   c                      t        dd| i      S )z,
        For toggle is_active field
        zbonus/is_active_toggle.htmlr2   r3   r   r+   s    r-   is_active_togglez"BonusPointSetting.is_active_toggle  s     .&
 	
r/   c                    t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  d} || j                     ||      rt        j                  j                  ||| j                          d|       j                         s;t        || j                          d| | j                  |      j                          yyy)z-
        For creating employee bonus
        )r  z!=r  rw  r  r  r   )r   r2   r  )r   r  rp  r2   N)operatoreqneltgtleger  rl  rU   r  r  r  ru  r   )r,   r  r  r  r2   operator_mappings         r-   create_employee_bonusz'BonusPointSetting.create_employee_bonus  s    
 ++++++
 .T__-gw?$,,33 3356azB 4 
 &(	
 $!779:!H:F KK!	
 df @r/   c                 $    t        |   |i | y r)   )r   r   r  s      r-   r   zBonusPointSetting.save  s    d%f%r/   r  c                 (    d| j                          S )NzBonus point )r  r+   s    r-   r.   zBonusPointSetting.__str__  s    d446788r/   )&rK   rL   rM   rT   r  r   is_installedr  
CONDITIONSr  r  r  r   rO   r  r  r  r  r  r  r   r
   ru  r   	is_activer  r  r  r  r  r  rs  r  r  r   rF   r.   r  r	  s   @r-   rz  rz  l  s   	';8	'<9M t#"AfI.%q|4
 	

 
ao&	1Y< IJ 
A/01G 
Qz]#G 
!G*	AiL!	Qz]#N
 F]OE%V%%~DN !  B	BIf"gDPTUG!!!zDJ f"gDPTUG V  8I!8L7MNF###D1IEEAAOM

4&9 9r/   rz  c                     ddl m}  	 t        j                  j	                  d       D ]  }t
        j                  j                  |j                        \  }}d|_        |j                          |j                   | d      z   |_        ||_        d |_        d |_        |j                           t        j                  j	                  d       D ]  }t        j                  j                  |j                         \  }}d|_        |j                          |j                   | d      z   |_        d |_        d |_        ||_        |j                           y # t&        $ r
}Y d }~y d }~ww xY w)	Nr   r   )r   r|   r   r*  )ri  r   )dateutil.relativedeltar   r  rU   r  r   get_or_creater   r   r   rQ   rR   r   rF  rZ  rX   ri  r  r  	Exception)r   rO  r   rT   e_krr%  es          r-   manipulate_existing_datar    sF   4.66>>>N 
	!M$,,::#-- ; LIq "$INN%2%=%=SU@V%VM")2M&&*M#26M/ 
	! &--555F 	D%%33$//3JEBBKGGI OOm.CCDM"DO*.D'!#DIIK	  s   EE 	E.)E.)Ar  r   r   r   r   r  r   django.appsr   django.core.exceptionsr	   django.core.validatorsr
   	django.dbr   django.db.modelsr   django.db.models.functionsr   django.urlsr   r   django.utilsdjango.utils.translationr   rT   base.horilla_company_managerr   base.modelsr   r   r   employee.modelsr   r   horilla.horilla_middlewaresr   horilla.modelsr   horilla_audit.methodsr   horilla_audit.modelsr   r   horilla_views.cbv_methodsr   r    rX   r   r  ModelrL  rZ  r  r  r  r  r
  r&  r2  r6  re  rl  rz  r  rV   r/   r-   <module>r     sn    	 - - 0  2 4  " - - ! 6 > 8 8 0 6 ' * B 5 '-$\ -$`c cLi iXN
 N
bKfll K8fE fER	 !(| (V| 6Ll L"n
| n
bn nbIV\\ I6S S,|| |~IV\\ I8- -`B9 B9J<  r/   