
    vgD                     ~    d 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
  G d d      Zdd	Zd
 Zd Zd Zd Zd Zy)zI
methods.py

This module is used to write methods related to the history
    )User)	Paginator)models)render)apply_decoratorsc                   &    e Zd ZddZdefdZd Zy)BotreturnNc                 $    | j                          y N)__str__selfs    )/var/www/horilla/horilla_audit/methods.py__init__zBot.__init__   s        c                      y)NzHorilla Bot r   s    r   r   zBot.__str__   s    r   c                      y)Nz>https://ui-avatars.com/api/?name=Horilla+Bot&background=randomr   r   s    r   
get_avatarzBot.get_avatar   s    Or   )r
   N)__name__
__module____qualname__r   strr   r   r   r   r   r	   r	      s     Pr   r	   c                 d    | j                  |      }|j                  s|s| j                          yy)N   r   )diff_againstchanged_fieldsdelete)entry1entry2dry_rundeltas       r   _check_and_deleter$      s-    'EMMOr   c                     | j                   j                         }d}|j                         }|sy|dd D ]  }|t        ||      z  }|} y)z9
    This method is used to remove duplicate entries
    r   Nr   )history_setallfirstr$   )instanceo_qsentries_deletedf1f2s        r   remove_duplicate_historyr.   #   sb     ##%DO	B12h ,
 	
 r   c                     t        | |      r5| j                  j                  |      }|j                  j	                         S y r   )hasattr_meta	get_fieldverbose_name
capitalize)model_class
field_namefields      r   get_field_labelr8   5   s:    {J'!!++J7!!,,..r   c                     g }| D ]Q  }|j                  dg       }|D cg c]  }|j                  dd      |v s| }}|s<||d<   |j                  |       S |} | S c c}w )Nchangesr6    )getappend)	historiestrack_fieldsfiltered_historieshistoryr:   changefiltered_changess          r   filter_historyrD   >   s     /++i,!(
FJJ|R,HL,XF
 
 !1GI%%g./ #I
s
   AAc           
         t        |        | j                  j                         }t        |      }t	        t        |      dz
        D cg c]  }||   ||dz      g }}g }|j                  d      j                         }|D ]  }|d   j                  |d         }g }	|d   j                  j                  }
|j                  D ]  }|j                  }|j                  }| j                  j                  |j                         }d}t#        |t$        j&                  j(                        r/|j*                  r#|r!|rt-        |j*                        }||   }||   }t#        |t$        j.                        rd}|	j1                  t3        |
|j                         |j                   |||d        |d   j4                  rAt6        j8                  j;                  |d   j4                  j<                        j>                  n	tA               }|j1                  d	||	|d
        |rg	 |j4                  j>                  }|j1                  |j                  j                  j                  jB                  jE                          d||f|d       | j                  jF                  dk(  rKddlm$} |j8                  j                         }|r)|jJ                  r|jJ                  d   }|rtM        ||      }|S c c}w #  tA               }Y xY w)zD
    This method is used to find the differences in the history
    r   +)history_typer   FT)r7   r6   is_fkoldnew)idChanges)typepairr:   
updated_byz created)rM   rN   rO   employeeworkinformation)HistoryTrackingFieldstracking_fields)'r.   r&   r'   listrangelenfilterr(   r   r)   	__class__r:   rI   rJ   r1   r2   r7   
isinstancer   fields	CharFieldchoicesdict
ForeignKeyr=   r8   history_userr   objectsr<   rK   employee_getr	   r3   r4   
model_namerQ   rR   rD   )r)   rA   history_listipairsdelta_changescreate_historyrN   r#   diffs
class_namerB   rI   rJ   r7   rH   r[   rO   rQ   history_tracking_instancer?   s                        r   get_diffrj   L   s    X&""&&(G=L8=c,>ORS>S8T34a,q1u-.E  M^^^5;;=N +
Q$$T!W-!W%%//
mm 	F**C**CNN,,V\\:EE5&--"9"9:MMu}}-clcl%!2!23 LL,ZF"(,,"%	: Aw## LLQ 4 4 7 78EE 	
 	! (		
I+
X 	'44AAJ 	)22<<BBOOZZ\]]ef'8(	
 ~~  $==1$9$A$A$G$G$I!$)B)R)R4DDEVWL .}l KKh	Js   
K0$K5 5Lc                 ~    |j                  d      }|j                  dg       }t        |      d        } || ||      S )Nmodel
decoratorsc                    |j                   j                  |      }|j                  j                         }| j                  j                  dd      }t        |d      }|j                  |      }||d}t        | d|      S )N)pkpager      )r>   ra   z#horilla_audit/history_tracking.html)r_   r<   horilla_historyr'   GETr   get_pager   )	requestobj_idrl   r)   r>   page_number	paginatorpage_objcontexts	            r   _history_trackingz+history_tracking.<locals>._history_tracking   s    ==$$$/,,002	kkoofa0i+	%%k2!
 1
 	
r   )r<   r   )ru   rv   kwargsrl   decorator_stringsr{   s         r   history_trackingr~      sJ    JJwE

<4'(
 )
  Wfe44r   N)F)__doc__django.contrib.auth.modelsr   django.core.paginatorr   	django.dbr   django.shortcutsr   horilla.decoratorsr   r	   r$   r.   r8   rD   rj   r~   r   r   r   <module>r      sG    , +  # /P P$L^5r   