
    vg                         d 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mZ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 m!Z!m"Z"m#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l0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z: ddl;m<Z<  ee2d       G d de"             Z= G d de#      Z> ee2d       G d de              Z? ee2d       G d  d!e#             Z@ ee2d       G d" d#e"             ZA ee2d       G d$ d%e#             ZBd.d&e	j                  fd'ZD ee2d       G d( d)e!             ZE ee2d       G d* d+e#             ZF ee2d       G d, d-e              ZGy)/z
horilla/generic/views.py
    N)Any)parse_qs)BeautifulSoup)forms)messages)cache)Page)HttpRequestHttpResponse	QueryDict)render)resolvereverse)method_decorator)gettext_lazy)
DetailViewFormViewListViewTemplateView)closest_numberseval_validateget_key_instances)	FilterSet)group_by_queryset)_thread_locals)models)get_short_uuidhx_request_requiredpaginator_qrysortby
structuredupdate_initial_cacheupdate_saved_filter_cache)DynamicBulkUpdateFormToggleColumnForm)getattributedispatchnamec                       e Zd ZU dZdZeed<   dZeed<   dZ	eed<   dZ
eed<   d	Zg Zeed
<   dZeed<   dZeed<   dZeed<   	 g Zeed<   dZeed<   g Zeed<   dZeed<   dZeed<   g Zeed<   dZeed<   g Zeed<   dZeed<   dZeed<   dZeed<   g Zeed<   dZeed<   g Z eed<   dZ!eed <   g Z"eed!<   d"Z#eed#<   i Z$e%ed$<   d%e&d&df fd'Z'd&efd(Z(d)e)d&e*fd*Z+d)e)d&e)fd+Z,d, Z- fd-Z.d%e&f fd.Z/d/ Z0d0 Z1 xZ2S )1HorillaListViewz
    HorillaListView
    Nfilter_class view_idexport_file_namezgeneric/horilla_list_table.htmltemplate_namequerysetcolumns
search_urlTbulk_select_optionaction_methodactionsoption_methodoptions	row_attrsrow_status_classrow_status_indicationsr    
sortby_keysortby_mappingselectedInstancesselected_instances_key_idshow_filter_tagsshow_toggle_formfilter_keys_to_remove2   records_per_pageexport_fieldsverbose_namebulk_update_fieldszgeneric/bulk_form.htmlbulk_templateheader_attrskwargsreturnc                 L   | j                   st        d      | _         t        |   di | t	        t
        dd       }|| _        t        |t        t               t        j                  j                  j                  |j                  |j                        j!                         }|sg n|j"                  }| j$                  j'                         | _        t+        | j$                  |      | _        | j$                  D ]%  }|d   |v s| j(                  j/                  |       ' y )N   requestuser_idpath    )r.   r   super__init__getattrr   rN   r"   CACHEr+   r   ToggleColumnobjectsfilteruser	path_infofirstexcluded_columnsr2   copyvisible_columnr%   toggle_formremove)selfrJ   rN   existing_instancehidden_fieldscolumn	__class__s         3/var/www/horilla/horilla_views/generic/cbv/views.pyrU   zHorillaListView.__init__f   s    ||)!,DL"6".)T:We_= #//77>>LLw'8'8 ? 

%' 	
 (B->-O-O 	 #ll//1+DLL-Hll 	3FayM)##**62	3    c                     | j                   j                  j                  | j                  j                  j
                   d| j                  j                  j                                S )z6
        Accessibility method for bulk update
        z.change_)rN   r[   has_permmodel_meta	app_label__name__lowerrc   s    rh   bulk_update_accessibilityz)HorillaListView.bulk_update_accessibility   sT     ||  ))zz))*(4::3F3F3L3L3N2OP
 	
ri   rN   c           
      @   | j                         st        d      S | j                         }|j                  dt	        t        |j                  j                  dd                   dt        d       dz   |_        t        || j                  || j                  d      S )	z(
        Bulk form serve method
        You dont have permissionz (instance_ids[] Records)formpost_bulk_path)rr   r   get_bulk_formrF   lenr   GETget_transr   rH   r|   )rc   rN   r{   s      rh   serve_bulk_formzHorillaListView.serve_bulk_form   s    
 --/ :;;!!#3gkkoonT&JKMNaPVW`PaObbcde 	 T-@-@A
 	
ri   c                 @   | j                         st        d      S |j                  j                  dd      }t	        |      }t        |j                  |j                  | j                  | j                  |      }|r^|j                         rN|j                          t        j                  |t        d             t        dd      }t        d	| d
| d      S |st        j                   |t        d             t#        || j$                  || j&                  d      S )zC
        This method to handle bulk update form submission
        rt   ru   rv   )
root_modelrG   idszSelected Records updated   bulk)lengthprefixz
                <script id="z">
                    $("#z").closest(".oh-modal--show").removeClass("oh-modal--show");
                    $(".reload-record").click()
                    $("#reloadMessagesButton").click()
                </script>
                zNo records selectedrz   )rr   r   r   r   r   r$   POSTFILESrl   rG   is_validsaver   successr   r   infor   rH   r|   )rc   rN   ru   r{   	script_ids        rh   handle_bulk_submissionz&HorillaListView.handle_bulk_submission   s    --/ :;;{{~t<$\2$LLMMzz#66
 DMMOIIKWf-G&HI&a?I&K (" $  MM'6*?#@AT-@-@A
 	
ri   c                 D    t        | j                  | j                        S )z-
        Bulk from generating method
        )r   rG   )r$   rl   rG   rq   s    rh   r}   zHorillaListView.get_bulk_form   s     
 %zzd6M6M
 	
ri   c                    | j                   s(t        | 	         | _         t        dd      | _        | j
                  r| j                  j                  }d|j                         v rt        | j                  t               nt        j                  t        | j                  j                  j                        | j                  j                  z   dz         rYt        j                  t        | j                  j                  j                        | j                  j                  z   dz         d   }t         j"                  j$                  j'                  | j                  j                  | j                  j(                  d      j+                         }t-        |      sH|rFt/        |j&                        }t        dd      }|j1                         D ]
  \  }}|||<    d|_        || _        d| j                  _        | j                  || j                   | j                  	      j6                  | _         | j                   S )
Nr-   Tmutablefilter_appliedcbv
query_dictrQ   
created_by
is_defaultF)datar1   rN   )r1   rT   get_querysetr   _saved_filtersr,   rN   r   keysr#   rW   r   strsessionsession_keyrQ   r   SavedFilterrY   rZ   r[   r]   boolr   items_mutableexclude_filter_formqs)rc   r   default_filterr   keyvaluerg   s         rh   r   zHorillaListView.get_queryset   s   }}!G02DM"+B"=D  !\\--
#z'88-dllEBYY,,889DLL<M<MMPUU "'DLL00<<=,,++, " #	"$J "(!3!3!;!;!B!B**#||00# "C " %'	 
 J'N()>)>?D!*2t!<J&*jjl 0
U*/
30 +0J'&0#370 $ 1 1#dmmT\\ !2 !"  }}ri   c                    t        |   d=i |}| j                  |d<   | j                  |d<   t	        t        | j                        t        | j                        z
        |d<   | j                  |d<   | j                  |d<   | j                  |d<   | j                  |d<   | j                  |d<   | j                  |d	<   | j                  |d
<   | j                  |d<   | j                  |d<   | j                   |d<   | j"                  |d<   | j$                  |d<   | j&                  |d<   | j(                  |d<   | j*                  |d<   | j,                  |d<   | j.                  |d<   | j0                  s| j2                  j4                  | _        | j0                  |d<   | j6                  |d<   | j8                  j:                  j=                  dd      }|r&ddj?                  |jA                  d      dd        z   }tB        jD                  jF                  jI                  | j8                  jJ                  | j8                  jL                        tB        jD                  jF                  jI                  || j8                  jL                        z  jO                         |d<   | jP                  |d<   | j.                  j=                  d      rtB        jR                  jF                  jI                  | j8                  jL                  | j8                  jJ                  | j.                  d          jU                         }|r|jV                  |d!<   | jY                         }| j                   rt[        | j.                  j]                               }t_        | j2                  |      }|ja                         D cg c]  \  }}|d"d#g| jb                  z   v r| }	}}|	dgz   D ]&  }||je                         v s|jg                  |       ( ||d$<   |	|d%<   | j8                  }
t	        |ji                  d&d'(            }d)}| j8                  j:                  }|
j:                  j=                  | j&                        s%| j.                  j=                  | j&                        rJ|
j:                  j=                  | j&                        s3| j.                  j=                  | j&                        rd'}| j.                  }|j=                  | j&                        r2tk        ||| j&                  |*      }|D cg c]  }|jl                   }}g }| j.                  j=                  d      s)|D ]$  }||_7        |jq                  |jr                         & tu        || j.                  j=                  d+      | jv                        |d,<   |
r'| j.                  j=                  d      r| j.                  j=                  d      }d-| _<        t{        |t|              rS| j                  |
j:                  |j                  j2                  jF                  j                         .      j                  }t        ||| j.                  j=                  d+      d+      }tu        || j.                  j=                  d+      d/      |d0<   |d0   D ].  }|d1   D ]$  }||_7        |jq                  |jr                         & 0 |t        j<                  | j8                  j                  j                  d2z         t        <   d3d4lHm%}mI} d5t        d6       d| _K        |jq                   || j                  | j                               | j                  |d7<   | j                  r| j                         rd8| j                   d9| j8                  j                  j                   d}d:| j                   d9| j8                  j                  j                   d}|| _O        |jq                   ||| j                               |jq                   ||| j                               | j                  |d;<   ||d<<   |S c c}}w c c}w )>Nr.   r2   hidden_columnsra   rA   r3   r5   r6   r7   r8   r9   rI   r@   r4   r:   r<   r=   r?   r;   saved_filters
model_namerE   referrerr-   /r   rQ   r   r   r   stored_filtersselect_all_idsfield)r   rQ   group_by_fieldactive_targetr   nav_urlfilter_dictkeys_to_removeidTflatF)is_first_sortpager1   zgeneric/group_by_table.html)r1   
   groupslistr   r   rQ   urlpatternszexport-list-view-rM   export_pathzget-bulk-update--zpost-bulk-update-rG   	bulk_pathrS   )RrT   get_context_datar.   r`   r   setr2   ra   rA   r3   r5   r6   r7   r8   r9   rI   r@   r4   r:   r<   r=   r?   r;   r   rF   rl   rg   rE   rN   r   r   joinsplitr   r   rY   rZ   rQ   r[   distinct
select_allActiveGroupr]   group_targetr   r   	urlencoder   r   rB   r   popvalues_listr    r   ordered_idsappendpkr   rD   r0   
isinstancer	   r,   object_listallr   r   rW   r   r   r+   horilla.urlsr   r   r   export_datarG   rr   r|   r   r   )rc   rJ   contextr   active_groupr1   	data_dictr   r   r   rN   r   r   r   instancer   r   grouprQ   r   get_bulk_pathr|   rg   s                         rh   r   z HorillaListView.get_context_data   s   '*4V4!\\	!00	$(T\\):SATAT=U)U$V !!%!1!1&*&;&;"# $#'#5#5 !\\	#'#5#5 !\\	#~~"&"3"3&*&;&;"#(,(?(?$%&*&;&;"# $$($7$7 !/3/M/M+,,0,G,G()#'#6#6    $

 4 4D $ 1 1#'#5#5 <<##''
B7SXXhnnS&9!"&=>>H&&--\\&&4<<3D3D .    ((//!dll.?.? 0  (* 	 ! %)OO !""7+!--55<<<<,,\\&&#227; =  eg	 
 +7+D+D($$&   !4!4!>!>!@AI)$**i@I #,//"3C+Y7$:T:TTT N  &4 ')..**MM#&' &/GM"(6G$%,,8//4/@A\\%%
0''++DOO<0##''8 M,,J>>$//*Hdoo]H 8@@88;;@K@""&&w/$ 0'2$""8;;/0 ,d))--f5t7L7L

 t**..w7''++G4E!>D(D),,KK(*>*>*D*D*L*L*P*P*R - "  '%!4!4!8!8!@&F !.++//7!GH !* 4 %f 4H+6H(&&x{{344 PW		$,,&&22U:;OL2.~a/@.AC4 0 0$2B2BCD!%!1!1""t'E'E'G"4<<.$,,2F2F2R2R1SSTU  $DLL>4<<3G3G3S3S2TTUV  #1D!(( "// -1,C,CG()#0GK w> As   .a#ac                 |    t        j                  t        | j                         j	                  dd                  S )z#
        Select all method
        r   Tr   )jsondumpsr   r   r   )rc   argsrJ   s      rh   r   zHorillaListView.select_all  s1     zz$t002>>t$>OPQQri   c                    ddl mm} t        t        dd      }t        |j                  d         }t        |j                  d         | j                  j                  j                  |      }| j                   G fdd	|j                        } |       }|j                  |      }	|	j                  d
      }
| j                  }|sd}t        |
d      }d| d|d<   |S )z2
        Export list view visible columns
        r   )fields	resourcesrN   Nr   r2   id__inc                       e Zd ZdZW j	                  d      Z G fdd      Zd ZW  D ]J  Zded    d	ed    d
Z	 e
e	        e       ded       ZW j	                  ed          e       ed   <   L d Zy);HorillaListView.export_data.<locals>.HorillaListViewResorcez0
            Instant Resource class
            ID)column_namec                       e Zd ZdZW  Zg Zy)@HorillaListView.export_data.<locals>.HorillaListViewResorce.MetazB
                Meta class for additional option
                N)ro   
__module____qualname____doc__rl   r   )_models   rh   Metar     s     ri   r   c                     |j                   S )z?
                Dehydrate method for id field
                r   )rc   r   s     rh   dehydrate_idzHHorillaListView.export_data.<locals>.HorillaListViewResorce.dehydrate_id  s      {{"ri   zdef dehydrate_rR   zI(self, instance):return self.remove_extra_spaces(getattribute(instance, 'z'))
dehydrate_r   c                 f   t        t        |      d      }|j                  d      D ]#  }|j                  d       |j	                          % |j                         }|j                         }|D cg c]#  }|j                         s|j                         % }}dj                  |      }|S c c}w )zj
                Remove blank space but keep line breaks and add new lines for <li> tags.
                zhtml.parserli
)	r   r   find_allinsert_beforeunwrapget_text
splitlinesstripr   )rc   textsoupr   lineslinenon_blank_linescleaned_texts           rh   remove_extra_spaceszOHorillaListView.export_data.<locals>.HorillaListViewResorce.remove_extra_spaces  s     %SY>---  B$$T*IIK  }})<A"RDTZZ\4::<"R"R#yy9## #Ss   1B.B.N)ro   r   r   r   Fieldr   r   r   field_tupledynamic_fn_strexeclocals
dynamic_fnr	  )_columnsr   r   s   rh   HorillaListViewResorcer     s     $/B #  ( T#1+a.1A  BK  LW  XY  LZ  K[  [^  "_^$#X
;q>2B&CD
+1<<KPQN<+SQ(	T$ri   r  xlsquick_exportzapplication/vnd.ms-excel)content_typezattachment; filename="z.xls"zContent-Disposition)import_exportr   r   rV   r   r   r   rl   rY   rZ   ModelResourceexportr/   r   )rc   r   rJ   r   rN   r   r1   r  book_resourcedataset
excel_data	file_nameresponser  r   r   s                @@@rh   r   zHorillaListView.export_data  s     	4.)T:GKK./ Y!78::%%,,C,8'	$ '	$Y%<%< '	$R /0  &&x0^^E*
 ))	&I
9ST,B9+U*S&'ri   )3ro   r   r   r   r,   r   __annotations__r.   r   r/   r0   context_object_namer2   r   r3   r4   r   r5   r6   r7   r8   r9   r:   r;   r<   r=   r?   r@   rA   rB   rD   intrE   rF   rG   rH   rI   dictr   rU   rr   r
   r   r   r   r}   r   r   r   r   __classcell__rg   s   @rh   r+   r+   '   s    #L)"GS c :M3:$GTJ##M3" GTM3GTIs"c"#%D%JND%8s8!d!!d!"$4$cM4L#!!1M31L$3 3 32
4 

{ 
| 
$$
k $
k $
L
"HU UnRCri   r+   c                        e Zd ZU dZdeddf fdZdZeed<   dZ	eed<   dZ
eed	<   g Zeed
<   g Zeed<   dZdef fdZ xZS )HorillaSectionViewz
    Horilla Template View
    rJ   rK   Nc                 ~    t        |   di | t        t        dd       }|| _        t        |t        t               y NrN   rS   )rT   rU   rV   r   rN   r"   rW   r+   rc   rJ   rN   rg   s      rh   rU   zHorillaSectionView.__init__  s4    "6".)T:We_=ri   r-   r   view_urlview_container_idscript_static_pathsstyle_static_pathszgeneric/horilla_section.htmlc                     t        |   di |}| j                  |d<   | j                  |d<   | j                  |d<   | j
                  |d<   | j                  |d<   |S )Nr   r(  r)  r*  r+  rS   )rT   r   r   r(  r)  r*  r+  rc   rJ   r   rg   s      rh   r   z#HorillaSectionView.get_context_data  si    '*4V4!\\	"mm
'+'='=#$)-)A)A%&(,(?(?$%ri   )ro   r   r   r   r   rU   r   r   r  r(  r)  r*  r   r+  r0   r   r   r!  r"  s   @rh   r$  r$    sj    > > > GSHc  s ""!!2MD  ri   r$  c                        e Zd ZU dZdZdZdddZeed<   g Z	e
ed<   g Ze
ed	<   g Ze
ed
<   i Zeed<   dZeed<   deddf fdZdef fdZ xZS )HorillaDetailedViewz
    HorillDetailedView
    zDetailed Viewz"generic/horilla_detailed_view.htmlHorillazHorilla Detailed View)titlesubtitleheaderbodyr5   r6   colsru   ids_keyrJ   rK   Nc                 ~    t        |   di | t        t        dd       }|| _        t        |t        t               y r&  )rT   rU   rV   r   rN   r"   rW   r/  r'  s      rh   rU   zHorillaDetailedView.__init__   s5    "6".)T:We-@Ari   c                 j   t        |   di |}t        t        | j                  j
                  j                  | j                                    }|d   j                  }|r
||d   _	        |d   |d<   t        | j                  j                        }t        |j                  j                               d   }|j                  }t!        ||      \  }}	t#        |||	i      }
t#        |||i      }|r't        |      |d<   | j                  |d<   |
|d<   ||d<   | j$                  |d	<   | j&                  |d
<   | j(                  |d<   | j*                  |d<   | j,                  |d<   | j.                  |d<   |t1        j                  | j                  j2                  j4                  dz         t6        <   |S )Nobjectr   r   rJ   ru   r6  next_urlprevious_urlr1  r3  r4  r6   r5   r5  r   rS   )rT   r   r   r   rN   r   r   r6  r   r   r   rQ   r   rJ   r   url_namer   r   r1  r3  r4  r6   r5   r5  rW   r   r   r/  )rc   rJ   r   ru   r   urlr   r=  previous_idnext_idr;  r<  rg   s               rh   r   z$HorillaDetailedView.get_context_data  s   '*4V4$S)9)9)=)=dll)K%LMX!!,8GH)%h/
dll''(3::??$%a(<<.|R@W8S'N;xk0BC&),&7GN#!%GI"*GJ&2GN#:: KK))!\\	#'#5#5 ))  			$,,&&22U:;	
 ri   )ro   r   r   r   r1  r0   r3  r   r  r4  r   r5   r6   r5  r6  r   r   rU   r   r!  r"  s   @rh   r/  r/    s{     E8M&4KLFDLD$OM4GTD$O!GS!B B B$ $ $ri   r/  c                   f     e Zd ZU dZ edd      Zeed<   dZg Z	e
ed<   dedd	f fd
Z fdZ xZS )HorillaTabViewz
    HorillaTabView
    r   htvr.   zgeneric/horilla_tabs.htmltabsrJ   rK   Nc                 ~    t        |   di | t        t        dd       }|| _        t        |t        t               y r&  )rT   rU   rV   r   rN   r"   rW   rB  r'  s      rh   rU   zHorillaTabView.__init__8  4    "6".)T:We^<ri   c                    t        |   di |}| j                  j                  rrt        j
                  j                  j                  | j                  j                  | j                  j                        j                         }|r|j                  |d<   | j                  |d<   | j                  |d<   |t        j                  | j                  j                  j                   dz         t"        <   |S )Nr   rQ   r   rD  r.   r   rS   )rT   r   rN   r[   r   	ActiveTabrY   rZ   rQ   r]   
tab_targetrD  r.   rW   r   r   r   rB  )rc   rJ   r   
active_tabrg   s       rh   r   zHorillaTabView.get_context_data>  s    '*4V4<<))1188<<,,4<<3D3D 9 eg  +5+@+@())!\\	NU		$,,&&22U:;NKri   )ro   r   r   r   r   r.   r   r  r0   rD  r   r   rU   r   r!  r"  s   @rh   rB  rB  -  sF     "!U+GS+/MD$O= = = ri   rB  c                        e Zd ZU dZdZeed<    edd      Ze	ed<   dZ
d	Zd
Ze	ed<   i Zeed<   	 g Zeed<   d
Ze	ed<   dZeed<   g Zeed<   dZeed<   d
Ze	ed<   g Zeed<   deddf fdZ fdZ fdZ xZS )HorillaCardViewz
    HorillaCardView
    Nr,   rM   hcv)r   r.   zgeneric/horilla_card.htmlr1   r-   r3   detailsr6   
card_attrsTr@   rB   rC   rD   card_status_classcard_status_indicationsrJ   rK   c                     t        |   di | t        t        dd       }|| _        t        |t        t               t               | _	        y r&  )
rT   rU   rV   r   rN   r"   rW   rM  r   r   r'  s      rh   rU   zHorillaCardView.__init__z  s>    "6".)T:We_='kri   c                 D   | j                   st        | 	         }| j                  r| j                  j
                  }d|j                         v rt        | j                  t               nt        j                  t        | j                  j                  j                        | j                  j                  z   dz         rYt        j                  t        | j                  j                  j                        | j                  j                  z   dz         d   }|| _        d| j                  _        | j                  ||| j                        j                   | _         t"        j$                  j&                  j)                  | j                  j                  | j                  j*                  d      j-                         }t/        |      sH|rFt1        |j(                        }t3        dd      }|j5                         D ]
  \  }}|||<    d	|_        | j                   S )
Nr   r   r   T)rN   r   r-   r   F)r1   rT   r   r,   rN   r   r   r#   rW   r   r   r   r   rQ   r   r   r   r   r   rY   rZ   r[   r]   r   r   r   r   r   )rc   r1   r   r   r   r   r   rg   s          rh   r   zHorillaCardView.get_queryset  s   }}w+-H  !\\--
#z'88-dllEBYY,,889DLL<M<MMPUU "'DLL00<<=,,++, " #	"$J '1#370 $ 1 1$,, !2 !"  "(!3!3!;!;!B!B**#||00# "C " %'	 
 J'N()>)>?D!*2t!<J&*jjl 0
U*/
30 +0J'}}ri   c                 <   t        |   di |}| j                         }| j                  |d<   | j                  |d<   | j
                  |d<   | j                  |d<   | j                  |d<   | j                  |d<   | j                  |d<   | j                  |d<   | j                  rt        | j                  j                               }t        | j                  |      }|j!                         D cg c]  \  }}|d	   d
dg| j"                  z   v r| }}}|dgz   D ]&  }||j%                         v s|j'                  |       ( ||d<   t)        |j+                  dd            }| j                  j-                  d      s)|D ]$  }	||	_        |j1                  |	j2                         & |t5        j,                  | j6                  j8                  j:                  dz         t<        <   | j6                  j>                  j-                  dd      }
|
r&ddjA                  |
jC                  d      dd        z   }
tD        jF                  jH                  jK                  | j6                  jL                  | j6                  jN                        tD        jF                  jH                  jK                  |
| j6                  jN                        z  jQ                         |d<   tS        || j6                  j>                  j-                  d      | jT                        |d<   |S c c}}w )Nr.   r3   rP  r6   rO  r@   rQ  rR  r   unknownonr   r   r   Tr   r   r   r-   r   r   r   r   r   r   r1   rS   )+rT   r   r   r.   r3   rP  r6   rO  r@   rQ  rR  r   r   r   r   rl   r   rB   r   r   r   r   r   r   r   r   rW   rN   r   r   rM  r   r   r   r   r   rY   rZ   rQ   r[   r   r   rD   )rc   rJ   r   r1   r   r   r   r   r   r   r   rg   s              rh   r   z HorillaCardView.get_context_data  s   '*4V4$$&!\\	 $ $!\\	!\\	&*&;&;"#'+'='=#$-1-I-I)*   !4!4!>!>!@AI)$**i@I #,//"3C8	4043M3MMM N  &4 ')..**MM#&' &/GM"8//4/@A""&&w/$ 0'2$""8;;/0 PW		$,,&&22U:;OL<<##''
B7SXXhnnS&9!"&=>>H&&--\\&&4<<3D3D .    ((//!dll.?.? 0  (* 	 ! ,dll&&**62D4I4I

 Cs   1"L)ro   r   r   r   r,   r   r  r   r.   r   r0   r  r3   rO  r   r6   r   rP  r@   r   rB   rD   r  rQ  rR  r   rU   r   r   r!  r"  s   @rh   rM  rM  N  s     #L)"!!E2GS2/M$JGT" GTJ!d!"$4$c#s#$&T&* * *"H2 2ri   rM  c                   &     e Zd ZdZdZ fdZ xZS )ReloadMessagesz
    Reload messages
    zgeneric/messages.htmlc                 &    t        |   di |}|S )NrS   )rT   r   r-  s      rh   r   zReloadMessages.get_context_data  s    '*4V4ri   )ro   r   r   r   r0   r   r!  r"  s   @rh   rY  rY    s     ,M ri   rY  rc   c                 :   t        t        dd      }|j                  d   }d}|rvt        t	        |       |   |i |}| j                  j                  }t        j                  |j                  j                  dz   |z   ||| j                  j                  d       |S )zG
    This method is used to super save the form using custom logic
    rN   Ndynamic_fieldr   r\  r   rl   )rV   r   r   rT   typer   r   r   rW   r   r   r   rm   rl   )rc   commitr   rJ   rN   r\  r  new_isntance_pks           rh   r   r     s     ni6GKK0MHdT/@@--**		OO''%/-?!.())	
 Ori   c            	       l    e Zd ZU dZ G d d      ZdZeed<    ed      Z	e
ed<   dZe
ed	<   dZej                  ed
<   dZdZe
ed<   dZe
ed<   dZe
ed<   dZe
ed<   dZe
ed<   dZeed<   g Zeed<   deddf fdZdddede
dedef fdZdddede
dedef fdZi i dddZ fd Zd! Z d#d"Z! xZ"S )$HorillaFormViewz
    HorillaFormView
    c            	       0    e Zd ZdZdg dfdedededefdZy)	HorillaFormView.HttpResponsez
        HttpResponse
        r-   contenttargets_to_reloadscriptrK   c                 |   t        t        |            }|j                  d       t        d      }d| ddj	                  dj                  |D cg c]  }d| d
 c}            z   d	| d
z   dz   dz   |z   dz   }t        |      j                  }t        |      j                  }t        ||z         }|} |S c c}w )z(
            __new__ method
            z#reloadMessagesButtonrM   z<script id='scriptTargetz'>z{}r-   z$(`z`).click();z$('#scriptTargetzD').closest('.oh-modal--show').first().removeClass('oh-modal--show');z$('.reload-record').click();z$('.reload-field').click();z	</script>)r   r   r   r   formatr   r   re  )	rc   re  rf  rg  r   targetreload_responseuser_responser  s	            rh   __new__z$HorillaFormView.HttpResponse.__new__  s     !%S):%; <$$%<=&q)I*9+R8++GGEVW6s6(+6WX %YK/st	u
 11 00    +62::O(199M#Om$CDHDO Xs   B9N)ro   r   r   r   r   r   r   rm  rS   ri   rh   r   rd    s6    	
 "$rQS		8<	KN		ri   r   Nrl   rM   r.   r-   
hx_confirm
form_classzgeneric/horilla_form.htmlru   r6  form_disaply_attrzAdd Newnew_display_titleclose_button_attrssubmit_button_attrsFis_dynamic_create_viewdynamic_create_fieldsrJ   rK   c                    t        |   di | t        t        dd       }|| _        | j
                  s| j                  j                  | _        t        |t        t               | j                  rt        | j                  dt               y y )NrN   r!   rS   )rT   rU   rV   r   rN   success_urlrQ   r"   rW   rb  ro  setattrr!   r'  s      rh   rU   zHorillaFormView.__init__5  sk    "6".)T:#||00DWe_=??DOO\:> ri   r   rN   r   c                2    |}t        |   |g|i |}|S N)rT   r   rc   rN   r   r   rJ   _pkr  rg   s          rh   r   zHorillaFormView.get@  s'     7;w888ri   c                R    |}| j                          t        |   |g|i |}|S rz  )get_formrT   postr{  s          rh   r  zHorillaFormView.postG  s0     7<9$9&9ri   r   filesr   c                P    |  | j                  |||| j                               }|S )z?
        method where first the form where initialized
        )r   initial)ro  get_initial)rc   r   r  r   r   rJ   r{   s          rh   	init_formzHorillaFormView.init_formO  s3     	%(D4D4D4F  
 ri   c                 >   t        |   di |}| j                         j                  j                  dz   | j
                  j                  j                  z   | _        | j                  |d<   | j                  |d<   | j                  |d<   | j                  |d<   d }| j
                  j                  r | j
                  j                  j                  }|rH| j                  j                  j                  | j                         rt#        t%        | j                  j                  j                  | j                                     }t'        | j                  j(                        }t+        |j,                  j/                               d   }|j0                  }|rt3        ||      \  }}	t5        |||	i      }
t5        |||i      }t%        |      | j
                  _        | j                   | j
                  _        |
| j
                  _        || j
                  _        |S )	N.ru  form_class_pathr.   rn  r   r:  rS   )rT   r   r~  rg   r   r{   ro   r  ru  r.   rn  r   r   rN   r   r   r6  r   r   r   rQ   r   rJ   r   r=  r   r   ru   r;  r<  )rc   rJ   r   r   ru   r>  r   r=  r?  r@  r;  r<  rg   s               rh   r   z HorillaFormView.get_context_dataZ  s   '*4V4MMO%%00369L9L9U9UU 	 ,0+E+E'(%)%9%9!"!\\	 $99##&&B$,,""&&t||4(T\\-=-=-A-A$,,-O)PQL$,,++,Cszz()!,C||H'6|R'H$W"8S'NC&xk8JK),\):		&$(LL		!%-		")5		&ri   c                     | j                   j                  d      }| j                  j                  j	                  |      j                         S )z9
        method to get the instance for the form
        r   r   )rJ   r   rl   rY   rZ   r]   )rc   r   s     rh   r   zHorillaFormView.get_querysetz  s=     [[__T"zz!!((B(/5577ri   c                 P   | j                   j                  d      }t        | d      sn| j                         }d }d }| j                  j
                  dk(  r,| j                  j                  }| j                  j                  }| j                  |||      }| j                  rddl
m}  |t        |      |_        | j                  j
                  dk(  rdt        fg | j                  D ]V  }|d	   }	d
|	_        |d   }
g }t!        |      dk(  r|d   }| j                  j"                  j$                  dz   |
z   }|j&                  j(                  j+                  |
      }|j,                  j                  |
g       }t.        j0                  }t3        |t4        j4                  j6                        rWt.        j8                  }|j&                  j:                  Rt=        t?        |j&                  |
      jA                  dd            }n!t?        tC        |j&                  |
      d|      }tE        jF                  ||
||j(                  jH                  d       ddl%m&} ddl'm(} |jS                   |d|
 d| j                  j"                  j$                   |	jU                         d|
 d| j                  j"                  j$                                |jV                  |
   jX                  }|D cg c]  }|jZ                  |f }}|j]                  dd       |jS                  d       |jV                  |
   j^                  j`                  }|D ]`  }|jV                  |   j^                  j`                  }d|
 d| d|j                  dd      vsB|j                  dd      d|
 d| dz   |d<   b  |||jV                  |
   jb                  |jV                  |
   jd                         |jV                  |
<   d!|jV                  |
   j^                  _3        ||jV                  |
   j^                  _0        ||j,                  |
<   Y | j                  D ]z  }|d   }
|jV                  |
   j^                  j`                  j                  dd      }|s>tE        jF                  | j                  j"                  j$                  dz   |
z   dz   |       | |rH|_        ti        |      }| jj                  rtC        || jj                        }|r-|| jl                  _7        n| jp                  | jl                  _7        | jr                  |_9        | jt                  |_:        |tE        j                  | j                  j"                  j$                  dz         tv        <   || _<        | jx                  S c c}w )"Nr   r{   r   r  r   )
MethodTyper   employee_idrR   Dynamic creater      r   r   Tr   r]  rQ   )r   zdynamic-path-r   r(   )r-   zSelect option)dynamic_creater  z$('#modalButtonzForm [name=z]').val(this.value);onchanger-   zt
                                if(this.value != 'dynamic_create'){
                                $('#modalButtonzS]').val(this.value);
                                }
                            )choiceslabelrequired)z"horilla_widgets/select_option.html)=rJ   r   hasattrr   rN   methodr   r   r  rt  typesr  r   r   ru  display_titler~   r   r   r   rm   	get_fieldr  r   ChoiceFieldr   r   ManyToManyFieldMultipleChoiceFieldr   r   rV   r   r&   rW   r   rl   django.urlsrQ   r   r   r   as_viewr   r1   r   insertwidgetattrsr  r  option_template_namer   rp  ro  rF   rq  rr  rs  rb  r{   )rc   ro  r   r   r   r  r{   r  dynamic_tupleviewr   additional_data_fieldsr   field_instancer   
form_fieldrQ   r   r1   r  r  
data_fielddata_field_attrr  r1  s                            rh   r~  zHorillaFormView.get_form  s   [[__T"tV$((*HDE||""f,||((**>>t58>LD**,&tT2	||""e+ &  &*%?%? H0M(+D)9D&)!,E-/*=)Q.1>q1A.,,..::UBUJC%)]]%8%8%B%B5%IN LL,,UB7E!&!2!2J!.&--2O2OP%*%>%>
==++7$( 'u = I I$(t !J !"%E !(T]]E(JDRW XII-2%*%)ZZ%5%5 18&&+E7!DLL4H4H4T4T3UV LLN#0q9M9M9Y9Y8Z![  ${{51::HGOP8X6PGPNN1&;<NN#GH KK.55;;E&< 
*.++j*A*H*H*N*N-eWK
|K_`#2#6#6z2#FG !0 3 3J C'005wk* N# !  ,J7  *4 '"kk%066!%U!3!<!<*DKK&
FDKK&--B 7<DKK&--3*/DLL'QH0R &*%?%? 
M)!,E#{{5188>>BB:rRH		 LL00<<#$#$ )) %	
  (H))(43I3IJE38DOO0/3/E/E,&*&=&=D#'+'?'?D$SWEIIdll**66>?PDIyyo Qs   -V#rz  )#ro   r   r   r   r   rl   r9  r  r   r.   r   rn  ro  r   	ModelFormr0   r6  rp  rq  rr  rs  rt  r   ru  r   r   rU   r
   r   r  r  r   r   r~  r!  r"  s   @rh   rb  rb    s!    B E6!!$GS$J"&J&/M!GS!s&s&$$%% $)D( #%4$	? 	? 	? 48"+.CF	 48"+.CF	 %'b4 	@8zri   rb  c                        e Zd ZU dZdZdZeed<   dZeed<   dZ	eed<   dZ
eed<   g Zeed<   g Zeed	<   g Zeed
<   dZeed<   dZeed<   dZeed<   dZeed<   g Zeed<   g Zeed<   dZeed<   deddf fdZ fdZ xZS )HorillaNavViewzG
    HorillaNavView

    filter form submit button id: applyFilter
    zgeneric/horilla_nav.htmlr-   	nav_titler3   search_swap_targetsearch_input_attrs	search_inr6   group_by_fieldsfilter_form_context_nameNfilter_instancefilter_instance_context_namefilter_body_templateempty_inputs
view_typescreate_attrsrJ   rK   c                 ~    t        |   di | t        t        dd       }|| _        t        |t        t               y r&  )rT   rU   rV   r   rN   r"   rW   r  r'  s      rh   rU   zHorillaNavView.__init__  rF  ri   c                    t        |   di |}| j                  |d<   | j                  |d<   | j                  |d<   | j
                  |d<   | j                  |d<   | j                  |d<   | j                  |d<   | j                  |d<   | j                  |d	<   | j                  |d
<   | j                  |d<   t        j                  | j                  j                   j"                  dz   | j                  j$                  z   i       }| j&                  dgz   |d<   t)        |      |d<   | j                  r#| j                  j*                  || j,                  <   t.        j0                  j2                  j5                  | j                  j$                        j7                         |d<   |t        j                  | j                  j                   j"                  dz         t8        <   |S )Nr  r3   r  r  r  r6   r  r  r  r  r  zlast-applied-filterr   r  last_filterr  active_viewr   rS   )rT   r   r  r3   r  r  r  r6   r  r  r  r  r  rW   r   rN   r   r   rQ   r  r   r{   r  r   
ActiveViewrY   rZ   r]   r  )rc   rJ   r   r  rg   s       rh   r   zHorillaNavView.get_context_data  s   '*4V4#~~ $(,(?(?$%(,(?(?$%%)%9%9!"!\\	*.*C*C&' $"&"3"3#~~262F2F./iiLL  ,,#$ll  	
 #'"3"3yk"A!%k!2595I5I5N5NGD112!'!2!2!:!:!A!A"" "B "

%' 	 OV		$,,&&22U:;NKri   )ro   r   r   r   r0   r  r   r  r3   r  r  r  r   r6   r  r  r  r   r  r  r  r  r  r   rU   r   r!  r"  s   @rh   r  r    s     /MIsJ    ItGTOT$&c&!%OY%(* #* "#"L$JL#= = = ri   r  c            
            e Zd ZU dZdZdZeed<   dZe	ed<   g Z
eed<   g Zeed<   ded	df fd
Zeddededed	dfd       Zded	ef fdZ xZS )HorillaProfileViewz#
    GenericHorillaProfileView
    z!generic/horilla_profile_view.htmlNr.   r,   r6   rD  rJ   rK   c                    t        | j                  j                  j                               | _        | j
                  st        d      | _        t        
|    di | t        t        dd       }|| _        t        |t        t               ddlm}m} | j$                  D ]Q  }|j'                  d      r| j                   d|d    }|j)                   ||dz   |d	                d
|z   dz   |d<   S t*        j,                  j.                  j1                  |j2                  |j4                        j7                         }| j$                  j9                         | _        | j:                  D cg c]  }|d   |d   f c}| _        |sg n|j>                  }tA        | j<                  |      | _!        | j<                  D ]B  }	|	d   |v s| j:                  D ])  }|d   |	d   k(  s| j:                  jE                  |       + D y c c}w )NrM   rN   r   r   r>  r   r1  z
/<int:pk>/r  r   z/{pk}/rO   rR   rS   )#r   rg   ro   rp   
url_prefixr.   r   rT   rU   rV   r   rN   r"   rW   r  r   rQ   r   rD  r   r   r   rX   rY   rZ   r[   r\   r]   r_   visible_tabs	tabs_listr^   r%   ra   rb   )rc   rJ   rN   rQ   r   tabr>  rd   hidden_tabsrf   rg   s             rh   rU   zHorillaProfileView.__init__M  s   dnn55;;=>||)!,DL"6".)T:We-?@299 		2C775>)3w<.9""l*F !3Y1E
		2 #//77>>LLw'8'8 ? 

%' 	 !IINN,BFBSBST33w<W6T (B->-O-O 	 ,NN
 nn 	6FayK',, 6C7|vay0))0056	6 Us   .Hr  indexc                     |r| j                   |z   | _         |r;|| j                   j                  |       y| j                   j                  ||       yy)aM  
        Tab adding method
        example tab arg look like
        tab = {
            "title":"About",
            "view" : views.about_tab,
            "accessibility": "path_to_your.accessibility", # path to your accessibility method

        }
        tabs = [tab,etc...]

        add_tab(tabs=tabs) / add_tab(tab=tab)
        N)rD  r   r  )clsr  r  rD  s       rh   add_tabzHorillaProfileView.add_tab{  sH     xx$CH}$HHNN5#&	 ri   c                    t        |   di |}|d   |d<   | j                  |d<   | j                  |d<   | j                  |d<   | j
                  |d<   t        j                  j                  j                  | j                  j                  | j                  j                        j                         }|r|j                  |d<   | j                  j                  j!                  d	      }|sd
}t#        |      }|r8t%        j&                  | j                  j(                  j*                   d|       n<t%        j                   | j                  j(                  j*                   d      }|r|ng }| j,                  j                  j                  |      }||d<   |j/                         dz
  }|dkD  rd}nd|cxk  rdk  rn n	|dz
   d}nd }t1        ||d   j2                        \  }	}
t5        | j                  j                        }t7        |j8                  j;                               d   }|j<                  }t?        |||
i      }t?        |||	i      }tA        |      |d	<   |r
||d<   ||d<   ||d<   | jB                  |d<   | jD                  |d<   |d   |d	   |d   |d   |d   d}t%        j&                  | j                  j(                  j*                   d|       |S )Nr9  r   rD  r  ra   r.   rH  r   ru   rv   zhpv-instance-idsr   	instances   	   z9+rR   +r   r:  r;  r<  display_countr6   r,   )r  ru   r,   r.   r9  search_in_instance_idsrS   )#rT   r   rD  r  ra   r.   r   rI  rY   rZ   rN   r[   rQ   r]   rJ  r   r   r   rW   r   r   r   rl   countr   r   r   r   rJ   r   r=  r   r   r6   r,   )rc   rJ   r   rK  instance_ids_strru   r  balance_countr  r?  r@  r>  r   r=  r;  r<  r   rg   s                    rh   r   z#HorillaProfileView.get_context_data  s   '*4V4%h/
))"&"3"3!%!1!1!\\	%%--44||((t||/@/@ 5 

%' 	 '1'<'<GO$<<++//?#$%56II<<''3344DE| !99<<''3344DEL ,8<RLJJ&&--\-B	(!)A-1 M#!#,Q/q1M M.|WZ=P=S=STWdll''(3::??$%a(<<8S'N;xk0BC"%l"3"*GJ&2GN##0 !\\	"&"3"3 -#N3#N3y)h'
 			T\\))5566LMuUri   )NNN)ro   r   r   r   r0   r.   r   r  r,   r   r6   r   rD  r   rU   classmethodr   r  r  r   r!  r"  s   @rh   r  r  ;  s     8MGS"L)" GTD$O,6 ,6 ,6\ '$ 'c ' 'PT ' ',: : : :ri   r  )T)Hr   r   typingr   urllib.parser   bs4r   djangor   django.contribr   django.core.cacher   rW   django.core.paginatorr	   django.httpr
   r   r   django.shortcutsr   r  r   r   django.utils.decoratorsr   django.utils.translationr   r   django.views.genericr   r   r   r   base.methodsr   r   r   horilla.filtersr   horilla.group_byr   horilla.horilla_middlewaresr   horilla_viewsr   horilla_views.cbv_methodsr   r   r   r    r!   r"   r#   horilla_views.formsr$   r%   3horilla_views.templatetags.generic_template_filtersr&   r+   r$  r/  rB  rM  rY  r  r   rb  r  r  rS   ri   rh   <module>r     s     !   # , & < < # ( 4 ; M M J J % . 6     H L %J7dh d 8dN @ %J7:* : 8:z %J7\  8@ %J7Hh H 8HV %J7	\ 	 8	u , %J7}h } 8}@ %J79\ 9 89x %J7P P 8Pri   