
    si                     ~    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    A/var/www/python-projects/worksol/horilla_views/history_methods.py__init__zBot.__init__   s        c                      y)NzWorksol Bot r   s    r   r   zBot.__str__   s    r   c                      y)z
        Get avatar
        z>https://ui-avatars.com/api/?name=Worksol+Bot&background=randomr   r   s    r   
get_avatarzBot.get_avatar   s     Pr   )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                     t        | |      j                         }d}|j                         }|sy|dd D ]  }|t        ||      z  }|} y)z9
    This method is used to remove duplicate entries
    r   Nr   )getattrallfirstr$   )instancehistory_related_nameo_qsentries_deletedf1f2s         r   remove_duplicate_historyr/   &   sd     812668D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_labelr9   8   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changesr7    )getappend)	historiestrack_fieldsfiltered_historieshistoryr;   changefiltered_changess          r   filter_historyrE   A   s     /++i,!(
FJJ|R,HL,XF
 
 !1GI%%g./ #I
s
   AAc           
         t        | |       t        | |      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)r8   r7   is_fkoldnew)idChanges)typepairr;   
updated_byz created)rN   rO   rP   employeeworkinformation)HistoryTrackingFieldstracking_fields)'r/   r&   r'   listrangelenfilterr(   r   r)   	__class__r;   rJ   rK   r2   r3   r8   
isinstancer   fields	CharFieldchoicesdict
ForeignKeyr>   r9   history_userr   objectsr=   rL   employee_getr	   r4   r5   
model_namerR   rS   rE   )r)   r*   rB   history_listipairsdelta_changescreate_historyrO   r#   diffs
class_namerC   rJ   rK   r8   rI   r\   rP   rR   history_tracking_instancer@   s                         r   get_diffrk   O   s    X';<h 4599;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   K1%K6 6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?   rb   z#horilla_audit/history_tracking.html)r`   r=   horilla_historyr'   GETr   get_pager   )	requestobj_idrm   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   )rv   rw   kwargsrm   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/   r9   rE   rk   r   r   r   r   <module>r      sG    , +  # /P P$L^5r   