
    si(w                       d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZm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  ddl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z3 ddl4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZFmGZG ddlHmIZI ddlJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZU ddlVmWZWmXZX ddlYmZZZ  ej                  e\      Z] e0ePd        G d! d"e7             Z^ G d# d$e8      Z_ e0ePd        G d% d&e5             Z` e0ePd        G d' d(e8             Za e0ePd        G d) d*e7             Zb e0ePd        G d+ d,e8             Zcd5d-ej                  fd.Ze e0ePd        G d/ d0e6             Zf e0ePd        G d1 d2e8             Zg e0ePd        G d3 d4e5             Zhy)6z
horilla/generic/views.py
    N)Any)parse_qs	parse_qsl	urlencodeurlparse
urlunparse)BeautifulSoup)forms)messages)cache)FieldDoesNotExist)Page)transaction)	CharFieldF)Cast)HttpRequestHttpResponseJsonResponse	QueryDict)render)render_to_string)resolvereverse)method_decorator)gettext_lazy)
DetailViewFormViewListViewTemplateView)pisa)closest_numberseval_validateget_key_instances)	FilterSet)group_by_queryset)_thread_locals)post_generic_importpre_generic_import)models)assign_relatedexport_xlsxgenerate_import_excelget_short_uuid get_verbose_name_from_field_pathhx_request_requiredpaginator_qrysortbysplit_by_import_reference
structuredupdate_saved_filter_cache)DynamicBulkUpdateFormToggleColumnForm)getattributedispatchnamec                   6    e Zd ZU dZdZeed<   dZeed<   dZ	eed<   g dZ
eed	<   d
Zeed<   dZ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<   dZeed<   g Zeed<   dZeed<   dZeed<   i Zeed<   i Zeed<   i Zeed<   i Zeed<   i Zeed<   i Zeed<   g Z eed<   d Z!eed!<   i 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d0<   dZ/eed1<   g Z0eed2<   d3Z1e2ed4<   g Z3eed5<   dZ4eed6<   g Z5eed7<   d8Z6eed9<   dZ7eed:<   i Z8eed;<   e9d<        Z:d= Z;d>e<d?df fd@Z=d?efdAZ>d?efdBZ?dCe@d?eAfdDZBdCe@d?e@fdEZCdF ZDdG ZEdH ZFdM fdI	ZGd>e<f fdJZHdK ZIdL ZJ xZKS )NHorillaListViewz
    HorillaListView
    Nfilter_class view_idquick_exportexport_file_name))xlsxExcel)jsonJson)csvCSV)pdfPDFexport_formatszgeneric/horilla_list_table.htmltemplate_namequerysetcolumnsdefault_columns
search_urlTbulk_select_optionfilter_selectedbulk_updateimport_fieldszQuick Importimport_file_namepkupdate_reference#import_related_model_column_mappingprimary_key_mapping$import_related_column_export_mapping$reverse_model_relation_to_base_model
fk_mappingimport_helpfk_o2o_field_in_base_modelFindividual_updateo2o_related_name_mappingcustom_empty_templateaction_methodactionsoption_methodoptions	row_attrsrow_status_classrow_status_indicationsr2   
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records_count_in_tabheader_attrsc                       fd}|S )Nc                 v    i |} di |}| |_         ||_        ||_         |j                  | g|i |S N requestargskwargsr9   r}   r~   r   initkwargs_with_urlselfcls
initkwargss        C/var/www/python-projects/worksol/horilla_views/generic/cbv/views.pyviewz%HorillaListView.as_view.<locals>.view   Q    ":Z":6":-,-D"DLDI DK 4==:4:6::    r{   r   r   r   s   `` r   as_viewzHorillaListView.as_view       	; r   c                 .     | j                   | g|i |S )z8
        POST method to handle post submissions
        )getr   r~   r   s      r   postzHorillaListView.post   s     txx.t.v..r   r   returnc                    | j                   st        d      | _         t        	|   di | d| j                  j
                  j                          | _        t        t        dd       }|| _
        t        | j                        | _        g }d }|r[t        j                  j                   j#                  |j$                  |j&                        j)                         }|r|j*                  }| j,                  s| j                  | _        t/        | j                  | j,                  |      | _        |r6| j                  D ch c]   }|d   |v rt3        |t4              r|d   n|" c}n+| j                  D ch c]  }|| j,                  vs|d    c}}| j                  D cg c]  }t3        |t4              r|d   n||vr| c}| _        g }| j	                         j6                  j8                  }| j                  D ]H  }t3        |t:              r%	 |j=                   ||      j>                  |f       8|j=                  |       J || _        y c c}w c c}w c c}w # t@        $ r |j=                  |       Y ~w xY w)N   ordered_ids_r}   user_idpath   r{   )!r@   r.   super__init__model__name__lowerordered_ids_keygetattrr'   r}   listrN   visible_columnr*   ToggleColumnobjectsfilteruser	path_infofirstexcluded_columnsrO   r7   toggle_form
isinstancetuple_meta	get_fieldstrappendrs   r   )
r   r   r}   hidden_fieldsexisting_instancecolhidden_field_namesupdated_columnr   	__class__s
            r   r   zHorillaListView.__init__   sG   ||)!,DL"6"!-djj.A.A.G.G.I-JK.)T:"4<<0  & 3 3 ; ; B B7+<+< !C !eg  ! 1 B B###'<<D +LL$..
 !  <<q6]* %S%0Ac9 %)LLTSCt?S?S4S#a&T 	 **
$S%0AcBTT 
 JJL&&00	&& 	+C#s#/"))9S>+F+F*LM %%c*	+ -5 U
 ) /"))#./s*   ?%I5I	I!"I#II<;I<c                     | j                   j                  j                  | j                  j                  j
                   d| j                  j                  j                                S )z6
        Accessibility method for bulk update
        z.change_r}   r   has_permr   r   	app_labelr   r   r   s    r   bulk_update_accessibilityz)HorillaListView.bulk_update_accessibility   sT     ||  ))zz))*(4::3F3F3L3L3N2OP
 	
r   c                     | j                   j                  j                  | j                  j                  j
                   d| j                  j                  j                                S )z7
        Accessibility method for bulk importz
        z.add_r   r   s    r   import_accessibilityz$HorillaListView.import_accessibility   sT     ||  ))zz))*%

0C0C0I0I0K/LM
 	
r   r}   c                 F   | j                         st        d      S t        |j                  j	                  dd            }| j                         }|j                  dt        |       dt        d       dz   |_        t        || j                  || j                  |d      S )	z(
        Bulk form serve method
        You dont have permissioninstance_ids[]z ( Records))formpost_bulk_pathr   )r   r   r#   POSTr   get_bulk_formrs   len_r   ru   r   )r   r}   idsr   s       r   serve_bulk_formzHorillaListView.serve_bulk_form   s    
 --/ :;;GLL,,^TBC!!# --"S#ZL!I,q0QQT-@-@RUV
 	
r   c           	      Z   | j                         st        d      S |j                  j                  dd      }t	        |      }t        |j                  |j                  | j                  | j                  |      }|rk|j                         r[|j                          t        j                  |t        d             t        dd      }t        d	| d
| d| j                   d      S |st        j                   |t        d             t#        || j$                  || j&                  d      S )zC
        This method to handle bulk update form submission
        r   r   r   )
root_modelrt   r   zSelected Records updated   bulk)lengthprefixz
                <script id="z">
                    $("#zU").closest(".oh-modal--show").removeClass("oh-modal--show");
                    $("#z").attr("data-ids", "[]");
                    $(".reload-record").click()
                    $("#reloadMessagesButton").click()
                </script>
                zNo records selected)r   r   )r   r   r   r   r#   r6   FILESr   rt   is_validsaver   successr   r.   rl   infor   ru   r   )r   r}   r   r   	script_ids        r   handle_bulk_submissionz&HorillaListView.handle_bulk_submission   s    --/ :;;||''=$\2$LLMMzz#66
 DMMOIIKWa(B&CD&a?I&K (" $778 9	 	 MM'1%:#;<T-@-@A
 	
r   c                 D    t        | j                  | j                        S )z-
        Bulk from generating method
        )r   rt   )r6   r   rt   r   s    r   r   zHorillaListView.get_bulk_form"  s     
 %zzd6M6M
 	
r   c           	         | j                         s*t        j                  |d       t        j	                         S t        |j                  d         }t        | j                  | j                  | j                  | j                  | j                  j                  j                  |            }t	        d      }| j                   d}d| d	|d
<   |j                  |       |S )z3
        Method to serve bulk import sheet
        r   selected_idsid__in)reference_fieldimport_mappingrM   zAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetcontent_typez.xlsxattachment; filename=""Content-Disposition)r   r   r   HorillaFormViewr   r#   r   r-   r   rT   rW   rZ   r   r   rU   r   )r   r}   r~   r   r   wbresponsefilenames           r   serve_import_sheetz"HorillaListView.serve_import_sheet+  s     ((*MM'#=>"//11GLL89"JJ 11DDZZ''..c.:
  \
 ++,E2,B8*A*N&'
r   c                 )   	 | j                         st        j                  |d       | j                  D ci c]$  }|t	        | j
                  || j                        & }}t	        | j
                  | j                  | j                         d}| j                   d}||| j                   d<   |j                  j                  d      }|st        ddid      S t        j                  |      }	g }
i }|	j                         D ]b  \  }}i }|j                         D ]5  \  }}||v s||   }|t        | j                   j#                               t        | j                  j#                               z   v rCt        j$                  |      s.|j                  |t'        i             j)                  |h      ||<   t        j$                  |      rd	}t+        |t,              r|j/                         }|j1                  d
      }|}|d	d D ]  }|j3                  |i       } t+        |t4              r|j7                         rt9        |      }|||d   <   8 |
j;                  |       e t=        |
      \  }}g }g }i }i }|j                         D ]  \  }}| j                  |   }|| j                   v rz| j                   |   }t?        |j@                  d      rI |j@                  jC                         jD                  d%i | dt        |      ijG                  d|      }n: |j@                  jD                  d%i | dt        |      ijG                  d|      }|jI                  tK        tM        |      tO                           jQ                  dd      }|D cg c]  }t-        |      |vr
 |d%i ||i }}|rKtS        jT                  |||        |j@                  jW                  |       tY        jT                  |||        |j                  |g       t        |      z   ||<   || jZ                  v s| jZ                  |   }| j                  |   } |j@                  jD                  d%i | dt        |      ijG                  d|      }|jQ                  |d      }|D cg c]  }||vr
 |d%i ||i }}|rKtS        jT                  |||        |j@                  jW                  |       tY        jT                  |||        |j                  |g       t        |      z   ||<    |rit]        j^                         5  g } |D ]  }	 t        | j`                  j#                               | jb                  z   D ]  }!|!t        | j                   j#                               t        | j`                  j#                               z   v rte        ||!|| j                         }"|"||!<   j|!| jZ                  v sy|jg                  ||!   D #ci c]%  }#ti        |#| jZ                  |!   d	      ||!   k(  r|!|#' c}#        | j;                  |        i }%i }&g }'g }(t        | j`                  j#                               })| jb                  }*| D ].  }|j                  |      r||= |jq                         }+||+v r|+|= |)D ]
  },|,|+v s|+|,=  | jb                  D ]  }-|-|+v s|-| jZ                  vs|+|-=   | j
                  d%i |+}.|)D ]G  },||,   }/|.|/| j`                  |,   <    | j                  |,   d%i |/}0|&j                  |,g       |0gz   |&|,<   I |*D ]U  }-||-   }1t+        |1tr              r | j                  |-   d%i |1}2n|1}2|%j                  |-g       |2gz   |%|-<   tu        |.|-|2       W |'j;                  |.       1 | jb                  D ]  }-|-| jZ                  vs|%j                         D ]  \  },}(tS        jT                  | j                  |-   |(|        |,| jZ                  vs:tS        jT                  | j                  |-   |(|        | j                  |-   j@                  jW                  |(       tY        jT                  | j                  |-   |(|          |(s|'}(tS        jT                  | j
                  |(|        | j
                  j@                  jW                  |'       tY        jT                  | j
                  |(|        |&j                         D ]w  \  }3}(tS        jT                  | j                  |3   |(|        | j                  |3   j@                  jW                  |(       tY        jT                  | j                  |3   |(|        y 	 d	d	d	       |r|D 4cg c]  }4|4d   	 }5}4t        | j`                        dgz   | jb                  z   }6  | j
                  j@                  jE                  |5      jF                  |6 jv                  |6 }7|7D 48ci c]V  }4|4d   t        | j`                  j#                               | jb                  z   D 8ci c]  }8|8| jZ                  vr|8|4|8    c}8X }9}4}8i }:g };i }<t]        j^                         5  g }=|D ]}  }	 t        | j`                  j#                               | jb                  z   D ]4  }!|!t        | j                   j#                               t        | j`                  j#                               z   v rte        ||!|| j                         }"t        |"j#                               d   | jZ                  vr|!| jb                  v r|d   |"d<   |"||!<   t        |"jw                               d   |t        |"j#                               d   <   |!| jZ                  v s|jg                  ||!   D #ci c]%  }#ti        |#| jZ                  |!   d	      ||!   k(  r|!|#' c}#       7 |=j;                  |        i }%i }>i }?g }@t        | j`                  j#                               })| jb                  }*i }A|=D ]   }|jq                         }+|)D ]
  },|,|+v s|+|,=  | jb                  D ]  }-|-|+v s|-| jZ                  vs|+|-=  |+d   |+d<   |+d   |+d<   |+d=  | j
                  d%i |+}.|)D ]  },||,   j#                         A|,<    |)D ]  },||,   }/|.|/| j`                  |,   <   |9|.j                     |,   |/d<   |9|.j                     |,   |/d<    | j                  |,   d%i |/}0|0j                  |>j                  |,g       |0gz   |>|,<   |>j                  |,g       |0gz   |?|,<    |*D ]  }-|-| jZ                  vs||-   }1|9|1d      |-   }B|1d= |BW| j                  B|B      |1| j                  |-   <    | j                  |-   d%i |1}Ctu        |.|-|C       |;j;                  |C       ~B|1d<   |B|1d<   |-|:vrt        |1j#                               |:|-<    | j                  |-   d%i |1}2|%j                  |-g       |2gz   |%|-<   tu        |.|-|2        @j;                  |.       # 	 d	d	d	       |r@r%j                         D ]e  \  }D}E:|D   D cg c]  }|dvr|
 }:}| j                  D   }tS        jT                  |E|        | j                  sj|j@                  j                  E|:       ;rtS        jT                  ||;|        |j@                  jW                  |;       tY        jT                  ||;|        n;rKtS        jT                  ||;|        |j@                  jW                  |;       tY        jT                  ||;|        ED ]B  }F|j@                  j                  |Fj                  |:D ci c]  }|ti        F|       c}       D tY        jT                  |E|        h +j#                         D 8cg c]	  }8|8dvs|8 c}8| j                  D 8cg c]  }8|8 c}8z   }GtS        jT                  | j
                  @|        | j                  s'| j
                  j@                  j                  @G       nQ@D ]L  }H| j
                  j@                  j                  |Hj                  GD ci c]  }|ti        H|       c}       N tY        jT                  | j
                  @|        |rAr)D ]  }| j                  |   }|>v rA|   D 8cg c]  }8|8dvr|8
 }I}8tS        jT                  ||>|   |        | j                  s |j@                  j                  |>|   I       nJ|>|   D ]B  }J|j@                  j                  |Jj                  ID ci c]  }|ti        J|       c}       D tY        jT                  ||>   |        |?v sA|   D 8cg c]  }8|8dvr|8
 }I}8tS        jT                  ||?|   |        | j                  s|j@                  jW                  |?|          nJ|?|   D ]B  }J|j@                  j                  |Jj                  ID ci c]  }|ti        J|       c}       D tY        jT                  ||?   |         d}K|rd}Kt        |d | j                  Kt        |      t        |      |d	d! |t        |      d!kD  d"#      S c c}w c c}w c c}w c c}#w # tj        $ rJ}$|j;                  |j                  tm        to        |            d      t-        |$      d       Y d	}$~$d	}$~$ww xY w# 1 sw Y   	xY wc c}4w c c}8w c c}8}4w c c}#w # tj        $ rl}$tx        j{                  t}        j~                                |j;                  |t        |j#                               d      t-        |$      d       Y d	}$~$	\d	}$~$ww xY w# 1 sw Y   xY wc c}w c c}w c c}8w c c}8w c c}w c c}8w c c}w c c}8w c c}w # tj        $ r }$t}        j~                         }L|$}MY d	}$~$nd	}$~$ww xY wt        |d | j                  ddddMLd$#      S )&z*
        Method to import records
        r   z | Reference_import_referencefileerrorzNo file uploadedi  statusN__entire__inrV   )field_as_strr   Tflat)senderrecordsr   Unknown)recordr   id_import_reference)pk__inr   main_instance_idid)rV   r   )r   defaults)r   rV   SuccesszError Foundzcbv/import_response.html
   )r@   r   importedupdatederrorstotal_errors
more_errorcontext)r@   r   r  r  r  error_messagetraceback_messager{   )Ir   r   r   rT   r/   r   rX   rW   r   r   r   pd
read_exceliterrowsitemsr   rY   keysisnasetunionr   r   stripsplit
setdefaultfloat
is_integerintr   r3   hasattrr   r   r   onlyannotater   r   r   values_listr)   sendbulk_creater(   r\   r   atomicr[   r^   r+   updater   	Exceptionnextitercopydictsetattrvaluesloggerr   	traceback
format_excr   rV   r`   r_   rS   update_or_creater   r@   r   )Nr   r}   r~   r   fieldfield_column_mappingrW   update_reference_key
excel_filedf
serializedfield_column_mapping_valuesr   rowr   model_field	excel_colvaluepartscurrentpartwith_refwithout_referror_recordspk_values_mappingfk_values_mappingmappingr'  related_modelexisting_objectsexisting_values	to_createrecords_to_importreverse_fieldresultdataebulk_base_fk_grouping$bulk_create_reverse_related_groupingbulk_create_base_groupingr  related_fields	fk_fieldsinstance_recordrelationfk_fieldinstancerelated_recordrelated_instance	fk_recordfk_instancerelateditembase_instance_idsfieldsmapped_ids_querysetkeymapped_ids_with_reversefield_to_update_o2oo2o_to_createo2o_create_base_mappingrecords_to_update$bulk_update_reverse_related_grouping0bulk_create_from_update_reverse_related_groupingbulk_update_base_groupingrelated_update_fieldsrV   o2o_related_instance	o2o_fieldr   o2o_instancefield_to_update	model_objupdate_fieldsreverse_related_objr   r
  r   sN                                                                                 r   import_recordszHorillaListView.import_recordsE  s   w		,,.g'AB
 "//	$  7JJt'O'O $  $ #C4::tOdOdfj  gO  gO  #P  "Q  Q]   ^&*&;&;%<<M#N   !D$9$9#::K!LM !**62J#W.@$A#NNz*BJ*,'++- *3.B.H.H.J 3*K C' #I& !9!9!>!>!@A"4#K#K#P#P#RST #%''%. ; ? ?$/R!""'%. 8D
 775>$(E%eS1$)KKME + 1 1$ 7"($)#2J CD&-&8&8r&BGC%eU38H8H8J$'JE-2b	*-3. !!&)3*4 %>j$I!HkMM " "#>#D#D#F B/ $ H H Qd666 44W=E}44h?$M1188:#VF*/~tF|&DF!T$. ) ,H=+@+@+G+G ,"'~tF|<,$tU+ ) '7&?&?%)!E(IK%@ '@ '!k.tk< $ &,!!u:_< &77!I ! !*//#0$-!%
 &--99)D+00#0$-!%
 2C1F1F2-.2/%g. / OOG4E$($L$LW$UM'C}'<'<'C'C (#WD>4<8(d4' % '7&B&B5t&B&TO &,!! 7 &77!I !
 !*//#0$-!%
 &--99)D+00#0$-!%
 2C1F1F2-.2/%g.AB/F  '') [(*%"- '& $T%N%N%S%S%U V"&"A"A!B& $1D$($<$<$A$A$C5"$($($M$M$R$R$T%"5" $"
 .<(.(5(9(,(@(@	.&F =CF=$9%2doo%E$*MM 9J-8X	)*04/604040N040.
 06m/D0E -:4,?	)*%&#&: .44V<?'P -/);=802-E%)AAFFH&N !% ? ?I"3 +C!::&:; &'; <*0++-/?B /0D E(6 >H'?:$3H$=> )-(G(G >H (O ;$,DOO$C$3H$=> $.4::#@#@(6 H-3H-=N !) + $ I I( S0t/W/W (0 00 .00, !E H HSU V#3"4!5 AJ )2 EH(.x(8I))T:/"d.V.V$,/" //$-// /8>S>W>W ("?!,?.1(; $HhDE 288BW+CZ %)$C$C &#4??:3H3N3N3P &% 2 7 7+/+S+S(0,& -2)-!" $,4??#B$6$;$;/3/W/W,40* 16-1%& %)$L$L(0%&&-gkk%.@$7$<$</3/W/W,40* 16-1%&)&&< ! 9&++#zz %! JJ&&223LM',,#zz %!
 +O*T*T*V *//#'#K#KG#T$)!%
 @@#!'++e"4+00#'#K#KG#T$)!%][x MU$VTT*?%@$V!$VBBCf556  DJJ&&--5F-GT6#VV% $ !4
+  J#' EEJJL$ 99$:! doo5 T#Y! 
+' 
+ ')# "*,' '') SC(*%"* 43 $T%N%N%S%S%U V"&"A"A!B(& $1D$($<$<$A$A$C5"$($($M$M$R$R$T%"5" $"
 .<(.(5(9(,(@(@	.&F (,FKKM':1'=T__'T,9/3/N/N-O JP0EJ.F3E,F AG}(=IM,2MMOJ**+J-tFKKM/B1/E(F &3doo%E$*MM 9J-8X	)*04/604040N040.
 06m/D0E -:4,?	)*%&;(&R .44V<W4j -/);=8GID02-%)AAFFH&N !% ? ?I,.)"3 RC*0++-(6 >H'?:$3H$=> )-(G(G >H (O ;$,DOO$C$3H$=> 1@@U0V-0?@U0V-+,AB#-4::#@#@(6 VH>DX>N>S>S>U1(;V )7 "H-3H-=N !) + $ I I( S 4K8;;3W (4N40 4K8;;3W (4N400t/W/W (0 00 .00,  022>$H$L$L(0"%& (8&8%9 !EX N %I$L$L$,b%" %5%"%" !Q$,!"-"< )2  IH't>,28,<	%<$-.@$A&""*&, %..@$A#%: )-

bR
(@ %.(,(E(Eh(O%&)*(P(P,4)* )7,5)7 %9
 %,Hh@T$U$1$8$89M$N$,24	$24	$#+3F#FDH(1(8E&$7$A/"d.V.V$,/" //$-// %:$=$=h$K'2m%4 !6h ? !((K HA IB 288BeRCCSCh 5*?*E*E*G 6&Iw &9%C+! 4 +' +
 %)$L$LY$WM&++, '!
  11%--99#/ ).33'4(5%)
 *11==mL/44'4(5%) ).33'4(5%)
 *11==mL/44'4(5%)
 -4 L)11BB#/?? 2E*"(- %*7<+G$G*" C  (,,, '!e6p $3#7#7#9#S=TC#$($A$ABSSB#C #''::5
 --JJ&&221? &? 	

**;;(|| .=&$) !&wy%'@ @& <  $((::5 1+ HE$($L$LU$SM DD (=U'C) #",6  ) )
 +//#0$H$O!%
  $55)11== DU K - "Fe!L	" 3 - 5 5 F F':'='= 6C.&,1 ).w7JE/R(R.& !G !"	" ,00#0$H$O!% "RR (=U'C) #",6  ) )
 +//#0$T %% "&  $55)11== PQV W "R %"" 3
 !. 5 5 F F':'='= 6C.&,1 ).w7JE/R(R.& !G !"" ,00#0$T %% "&EHR F&*#||$ #K 0"8}+CR0$1"%m"4r"9 K$R!8!V	)*  ) )00.4jjd6l9KY.W-0V!" G[ [z %W!
+`	)*  ) "LL)=)=)?@)00.4T&++-5H5K.L-0V!" _SC SCl+X*"#B&)*.&)2.&:  	 ) 4 4 6E	 &<<'!&%6
 	
sr  4AP> )AL A<AP> AAP> *I6AP>  AL>B AP>  A/AP> /AL
B
AP> 	AM*B(ALAL*AL=ALA4AM*AM*%AM*4C.AM*#A	AM*-E-AM*AP> *AM76A-AP> #;ANAM<9AN>AP> 	AP%D!ANAN*ANANAAP:APAP"C6APC'AP,AP> -AP:DAP> AP#7AP> @	AP@$AP@(AP> @8	AP ABAP> CAP%C"AAP> D4AP*EA5AP> F6AP/G
*AP> G5AP> G<AP4H	A4AP> I=AP9JA.AP> L AP> LALL	AM'L?AM"MAM*M"AM'M'AM*M*AM4M/AP> M<ANNAP> NANN	APNA!AO<O6APO<APPAPPAPP	5AP> P>	AQ'QAQ"Q"AQ'c                  	   | j                   su|st        | 	         n|| _         t        dd      | _        | j
                  r?| j                  j                  }t        | j                  j                  j                  dd            }| j                  j                  j                  d      r| j                  j                  j                  d      | j                  j                  k7  rHg }|| j                  j                  d<   | j                  j                  | j                  j                  d<   |ro|| j                  j                  j                  dg       k7  rF|| j                  j                  d<   | j                  j                  | j                  j                  d<   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/                         }t1        |      sH|rFt        |j*                        }t        dd      }|j3                         D ]
  \  }	}
|
||	<    d|_        || _        d| j                  _        |s8| j                  || j                   | j                        j8                  | _         n|| _         | j                  j                  j                  d      dk(  r<| j                  j                  j                  d      r| j                  j                  d= | j                  j                  j                  d      rmt;        | j                   j=                  dd            | j                  _        | j                   j+                  | j                  j                  d         | _         | j                   S )Nr?   Tmutabler   r   	prev_pathhlv_selected_idsfilter_appliedcbv
query_dictr   
created_by
is_defaultF)rG  rM   r}   show_alltruer   r   r   ) rM   r   get_querysetr   _saved_filtersr>   r}   GETr#   r   r   sessionr   r  r5   CACHEr   session_keyr*   SavedFilterr   r   r   r   boolr  _mutableexclude_filter_formqsr   r  
actual_ids)r   rM   filteredr~   r   rt  r   default_filterrG  r[  r6  r   s              r   rz  zHorillaListView.get_queryset  s   }}:BEG02DM"+B"=D  !\\--
,LL%%)).$? 
 LL((,,[9,,00=ARARR#%L?KDLL(();<8<8I8IDLL((5LDLL4H4H4L4L&5 % @LDLL(();<8<8I8IDLL((5#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$($5$5'$-- %6 %b M %-DM<<##'' $ 4 4 8 89K L,,-?@<<''++,>?.211$T1B/DLL+ %)MM$8$8#||334FG %9 %DM }}r   c                    t        |   dIi |}| j                  s| j                  j                  | _        | 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<   | j0                  |d<   | j2                  |d<   | j4                  |d<   | j6                  |d<   | j8                  |d<   | j:                  s| j<                  j>                  | _        | j:                  |d<   | j@                  |d<   | jB                  |d<   | jD                  |d<   | j                  jF                  jI                  dd      }|r&ddjK                  |jM                  d      dd        z   }tN        jP                  jR                  jU                  | j                  j                  | j                  jV                         tN        jP                  jR                  jU                  || j                  jV                  !      z  jY                         |d"<   | jZ                  |d#<   | j2                  jI                  d$      rtN        j\                  jR                  jU                  | j                  jV                  | j                  j                  | j2                  d$   %      j_                         }|r|j`                  |d&<   | jc                         }| j$                  rte        | j2                  jg                               }ti        | j<                  |      }|jk                         D cg c]  \  }}|d'd(g| jl                  z   v r| }	}}|	dd(gz   | jl                  z   D ]&  }||jo                         v s|jq                  |       ( ||d)<   |	|d*<   | j                  }
d+}| j                  jF                  }|
jF                  jI                  | j*                        s%| j2                  jI                  | j*                        rJ|
jF                  jI                  | j*                        s3| j2                  jI                  | j*                        rd,}| j2                  }|jI                  | j*                        rts        ||| j*                  |-      }g }| j2                  jI                  d$      s"|D ]  }|ju                  |jv                          || j                  jx                  | jz                  <   t}        || j2                  jI                  d.      | j~                        |d/<   |
r| j2                  jI                  d$      r| j2                  jI                  d$      }d0| _@        t        |t              rS| j                  |
jF                  |j                  j<                  jR                  j                         1      j                  }t        ||| j2                  jI                  d.      d.      }t}        || j2                  jI                  d.      d2      |d3<   d4d5lHm}mI} t        d6d7| j
                  i8      d9| j<                  j                   d:| j<                  j                   z   | _M        | j                  |d;<   | j                  rd<| j
                   d=| j                  jx                  j                   d}d>| j
                   d=| j                  jx                  j                   d}|ju                   ||| j                               |ju                   ||| j                               | j                  jx                  j                  }||d?<   ||d@<   | j                  |dA<   | j                  r| j                         rdB| j
                   d=| j                  jx                  j                   d}dC| j
                   d=| j                  jx                  j                   d}|| _T        |ju                   ||| j                               |ju                   ||| j                               | j                  |dD<   ||dE<   | j                  |dF<   | j                  |dG<   | j                         |dH<   |S c c}}w )JNr@   rN   hidden_columnsr   rn   rP   rb   rc   rd   re   rf   rw   rm   rQ   rg   ri   rj   rl   rh   saved_filtersrA   rR   rS   
model_namerr   ra   rv   referrerr?   /r   r   rv  r  rv  stored_filtersselect_all_idsr,  )rv  r   group_by_fieldactive_targetrr  nav_urlfilter_dictkeys_to_removeFT)is_first_sortpagerM   zgeneric/group_by_table.html)rM   r  groupsr   r   urlpatternszexport-listshort_idr   z?model=.export_pathzget-import-sheet--zpost-import-sheet-get_import_sheet_pathpost_import_sheet_pathrT   zget-bulk-update-zpost-bulk-update-rt   	bulk_pathrK   r]   r   r{   )Zr   get_context_datarP   r}   r   r@   r   r   r  rN   r   rn   rb   rc   rd   re   rf   rw   rm   rQ   rg   ri   rj   rl   rh   r{  rA   rR   rS   rs   r   r   rr   ra   rv   r|  r   joinr  r*   r  r   r   r   distinct
select_allActiveGroupr   group_targetrz  r   r   r$   r  ro   r  popr2   r   rV   r}  r   r1   rq   rL   r   r   r>   object_listallr  r&   horilla.urlsr  r   
__module__r   r  rT   r  r   rl  rt   r   r   r   r   rK   r]   r   )r   r   r  r  active_grouprM   	data_dictr[  r6  r  r}   r  rt  ordered_idsrQ  r,  r  r   r  r  r  r  get_bulk_pathr   r   s                           r   r  z HorillaListView.get_context_data  s   '*4V4"ll//DO!\\	!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 "&"3"3%)%9%9!"!%!1!1   $

 4 4D $ 1 1#'#5#5 +/+E+E'(*.*C*C&'<<##''
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  *i!884;U;UU' )..**MM#&	'
 &/GM"(6G$%,,\\%%
0''++DOO<0##''8 M,,J>>$//*Hdoo]H ""&&w/$ 0""8;;/05@T112+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 	3 M:t||*DE

--.a

0C0C/DEF 	 "&!1!1#DLL>4<<3G3G3S3S2TTUV " %T\\N!DLL4H4H4T4T3UUVW # )++ *'' ,,..::K/DG+,0FG,-#'#5#5 ""t'E'E'G"4<<.$,,2F2F2R2R1SSTU  $DLL>4<<3G3G3S3S2TTUV  #1D!(( "// -1,C,CG()#0GK $($7$7 !!%!1!1*.*C*C*E&'os    e+c                 |    t        j                  t        | j                         j	                  dd                  S )z#
        Select all method
        r   Tr   )rE   dumpsr   rz  r  r   s      r   r  zHorillaListView.select_all  s1     zz$t002>>t$>OPQQr   c                 n   ddl mm} t        t        dd      }t        |j                  d         }t        |j                  d         |j                  j                  dd      }| j                  j                  j                  |	      }| j                   G fd
d|j                        } |       }	|	j                  |      }
t        j                  |
j                  d            }g }D ]  t              dk(  rht!        fd| j"                  D              }|r6	 t%        fd| j"                  D        i       }|j)                  g |       g|j)                         y|j)                          g }|D ][  }t        |      dk\  r"t+        |d   t,              r|d   |d   |d   f}nt        |      dk\  r
|d   |d   f}|j)                  |       ] |dk(  r7t/        t        j0                  |d      d      }d| j2                   d|d<   |S |dk(  r3|
j                  d      }t/        |d      }d| j2                   d|d<   |S |dk(  r|
j4                  }|
j,                  }t7        d||d      }t9        j:                         }t=        j>                  ||      }|j@                  rt/        d d!"      S t/        |jC                         d#      }d| j2                   d$|d<   |S tE        ||| j2                  %      S # t&        $ r}|j)                         Y d}~:d}~ww xY w)&z2
        Export list view visible columns
        r   )rY  	resourcesr}   Nr   rN   formatrC   r   c                      e Zd ZdZW j	                  d      Z G  fdd      Zd ZW  D ]M  Zded    d	ed    d
e dZ	 e
e	        e       ded       ZW j	                  ed          e       ed   <   O d Zy);HorillaListView.export_data.<locals>.HorillaListViewResorcez0
            Instant Resource class
            ID)column_namec                   P    e Zd ZdZW ZW D  cg c]  }|d   	 c}} Zyc c}} w )@HorillaListView.export_data.<locals>.HorillaListViewResorce.MetazB
                Meta class for additional option
                r   N)r   r  __qualname____doc__r   rY  ).0r,  _columns_models   00r   Metar    s&     089u%(99s   "r  c                     |j                   S )z?
                Dehydrate method for id field
                rV   )r   rQ  s     r   dehydrate_idzHHorillaListView.export_data.<locals>.HorillaListViewResorce.dehydrate_id  s      {{"r   zdef dehydrate_r   zI(self, instance):return self.remove_extra_spaces(getattribute(instance, 'z'),r   
dehydrate_r   c                    t        t        |      d      }|j                  d      }|r4|j                  dd      }|r|d   S |j                  d      }|r|d   S dS |j                  d      }|r|j                  dd      S |j                  d	      }|r|j                  j                         S |j                  d
      D ]#  }	|	j                  d       |	j                          % |j                         }|j                         }
|
D cg c]#  }|j                         s|j                         % }}dj                  |      }|S c c}w )a'  
                Clean the text:
                - If it's a <select> element, extract the selected option's value.
                - If it's an <input> or <textarea>, extract its 'value'.
                - Otherwise, remove blank spaces, keep line breaks, and handle <li> tags.
                zhtml.parserselectoptionT)selectedr6  r?   inputtextareali
)r	   r   findr   textr  find_allinsert_beforeunwrapget_text
splitlinesr  )r   r  field_tuplesoup
select_tagselected_optionfirst_option	input_tagtextarea_tagr  lineslinenon_blank_linescleaned_texts                 r   remove_extra_spaceszOHorillaListView.export_data.<locals>.HorillaListViewResorce.remove_extra_spaces  s8    %SY> "YYx0
&0ooho&NO&.w77'1x'@8D|G4L"L !IIg.	$=="55  $yy4',,2244 ---  B$$T*IIK  }})<A"RDTZZ\4::<"R"R#yy9## #Ss   
E EN)r   r  r  r  Fieldr   r  r  r  dynamic_fn_strexeclocals
dynamic_fnr  )r  r  rY  s   r   HorillaListViewResorcer    s     $/B: :#  ( T#1+a.1A  BK  LW  XY  LZ  K[  [^  _j  ^k  kl  "m^$#X
;q>2B&CD
+1<<KPQN<+SQ(	T&$r   r  rE      c              3   N   K   | ]  }|d    d    k(  xr |d   d   k(    yw)r   r   Nr{   r  export_itemrW  s     r   	<genexpr>z.HorillaListView.export_data.<locals>.<genexpr>9  s;      "#  Nd1g-K+a.DG2KK"s   "%c              3   T   K   | ]  }|d    d    k(  r|d   d   k(  r|d    ! yw)r   r   r  Nr{   r  s     r   r  z.HorillaListView.export_data.<locals>.<genexpr>B  s=      $/#.q>T!W#<$/Nd1g$= !,As   %(r   r   r   )indentzapplication/jsonr   r   z.json"r   rG   ztext/csvz.csv"rI   zgeneric/export_pdf.html)headersrows)destzPDF generation failedi  r   zapplication/pdfz.pdf")	file_name)#import_exportrY  r  r   r'   r#   r   r   r   r   r   ModelResourceexportrE   loadsr   anyrr   r"  r!  r   r   r%  r   r  rB   r  r   ioBytesIOr!   	CreatePDFerrgetvaluer,   )r   r~   r   r  r}   r   export_formatrM   r  book_resourcedataset	json_datamergedmatch_foundmetadatarH  rN   columnr   csv_datar  r  html_stringrF  pisa_statusr  r  rY  rW  s                            @@@@r   export_datazHorillaListView.export_data  s=    	4.)T:GLL/0 i!89((6:::%%,,C,8A	$ A	$Y%<%< A	$F /0  &&x0 JJw~~f56	 	$D4yA~! "'+'9'9" 
 !#'373E3E $ MM"3D"3("34MM$'d#;	$<  	#F6{aJvay$$? )VAYq	:V! )VAY/NN6"	# F"#

9Q/>PH ))>)>(?vF *+ Oe#~~e,H#H:FH()>)>(?uE *+ Oe#ooG<<D +)& K ZZ\F..6BK#$;CHH $FOO$5DUVH()>)>(?uE *+ O9g9N9NOOy % !d+ !s   'L	L4L//L4)NF)Lr   r  r  r  r>   r%   __annotations__r@   r   rB   rK   r   rL   context_object_namerN   rO   rP   rQ   r  rR   rA   rS   rT   rU   rW   rX   r%  rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rl   rm   rn   ro   rq   r  rr   rs   rt   ru   rv   rw   classmethodr   r   r   r   r   r   r   r   r   r   r   r   rl  rz  r  r  r	  __classcell__r   s   @r   r=   r=   8   s    #L)"GS*c*ND  ;M3:$GTOTJ## OT L$KM4*c* c 02'2 ""13($313($3JK'))#t#%'d'!#3#M3" GTM3GTIs"c"#%D%JND%8s8!d!!d!"$4$cM4L#!!1M31!%$%L$
 
/7- 7- 7-r
4 

d 

{ 
| 
 %
k %
k %
N
4H

TBHx xtRsPr   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ed        Z xZS )HorillaSectionViewz
    Worksol Template View
    r   r   Nc                 T    t        |   di | t        t        dd       }|| _        y Nr}   r{   )r   r   r   r'   r}   r   r   r}   r   s      r   r   zHorillaSectionView.__init__  s(    "6".)T:r   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  r{   )r   r  r  r  r  r  r  r   r   r  r   s      r   r  z#HorillaSectionView.get_context_data  si    '*4V4!\\	"mm
'+'='=#$)-)A)A%&(,(?(?$%r   c                       fd}|S )Nc                 v    i |} di |}| |_         ||_        ||_         |j                  | g|i |S rz   r|   r   s        r   r   z(HorillaSectionView.as_view.<locals>.view  r   r   r{   r   s   `` r   r   zHorillaSectionView.as_view  r   r   )r   r  r  r  r   r   r  r   r
  r  r  r  r   r  rL   r%  r  r  r   r  r  s   @r   r  r    sy       GSHc  s ""!!2MD  
 
r   r  c                        e Zd ZU dZdZdZd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dZdZeed<   d fd	Z fdZ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WorksolzWorksol Detailed Viewr?   )titlesubtitleavatarheaderbodyrb   rc   colsNr   ids_keyc                     	 t         |   |      | _        | j                  S # t        $ r-}t        j                  d|        Y d }~| j                  S d }~ww xY w)NzError getting object: )r   
get_objectrQ  r!  r(  r   )r   rM   rH  r   s      r   r'  zHorillaDetailedView.get_object  sX    	7!G.x8DM }}  	7LL1!566}}	7s   # 	AAAc                    t        |   |g|i |}| j                  s2| j                  r&t	        || j                  | j                               S | j                  s!t        j                  |d       t        d      S |S )Nr  zNo record found...z)<script>window.location.reload()</script>)	r   r   rQ  empty_templater   r  r   r   r   )r   r}   r~   r   r   r   s        r   r   zHorillaDetailedView.get  so    7;w888}}!4!4'4#6#6@U@U@WXXMM'#78 KLLr   r   r   c                    t        |   di | d| j                  j                  j	                          | _        t        t        dd       }|| _        g }| j                         j                  j                  }| j                  D ]H  }t        |t              r%	 |j                   ||      j                  |f       8|j                  |       J || _        y # t         $ r |j                  |       Y ow xY w)Nr   r}   r{   )r   r   r   r   r   r   r   r'   r}   r   r   r#  r   r   r   rs   r   )r   r   r}   updated_bodyr   r#  r   s         r   r   zHorillaDetailedView.__init__  s    "6"!-djj.A.A.G.G.I-JK.)T: JJL&&00	II 	*D$$. ''4)E)Et(LM ##D)	* !	 ) . ''-.s   #CC76C7c           
      v   t        |   di |}|j                  d      }|s|S |j                  }| j                  j
                  j                  | j                  g       }t        | j                  j                        }|j                  }t        t        |j                        d      }||d<   | j                  |d<   | j                  |d<   | j                  |d<   | j                   |d<   | j"                  |d<   | j$                  |d	<   |rt'        ||      \  }	}
|j)                  t+        |      | j,                  t/        |||
i
      t/        |||	i
      d       | j                  j0                  j3                         }|j5                  | j,                  d        |j7                         |d<   |S d|d<   |S )NobjectrV   rQ  r  r"  r#  rc   rb   r$  r  )r   r%  next_urlprevious_urlextra_queryr?   r{   )r   r  r   rV   r}   r}  r   r   r   url_namer"  r#  r   r  r"  r#  rc   rb   r$  r"   r   r   r%  r   r|  r$  r  r   )r   r   r  objrV   r   url_infor1  r[  prev_idnext_id
get_paramsr   s               r   r  z$HorillaDetailedView.get_context_data  s   '*4V4kk(#NVV||++//0D0DbI4<<,,-$$4($/!
:: KK))!\\	#'#5#5 )).|R@GWNN$'$5#|| '#w H$+Hc7^$L	 ))..0JNN4<<.%/%9%9%;GM"  &(GM"r   N)r   r  r  r  r  rL   r"  r%  r
  r#  r   rb   rc   r$  rQ  r)  r%  r   r'  r   r   r   r  r  r  s   @r   r  r    s     E8M+FD 
 D$OM4GTD$OHN!GS!! ! !*' ' 'r   r  c                   z     e Zd ZU dZ edd      Zeed<   dZdZ	g Z
eed<   ed        Zd	ed
df fdZ fdZ xZS )HorillaTabViewz
    HorillaTabView
    r   htvr@   zgeneric/horilla_tabs.htmlFtabsc                       fd}|S )Nc                 v    i |} di |}| |_         ||_        ||_         |j                  | g|i |S rz   r|   r   s        r   r   z$HorillaTabView.as_view.<locals>.view*  r   r   r{   r   s   `` r   r   zHorillaTabView.as_view(  r   r   r   r   Nc                 b    t        |   di | t        t        dd       }|| _        i | _        y r  )r   r   r   r'   r}   query_paramsr  s      r   r   zHorillaTabView.__init__5  s0    "6".)T:r   c                 .   t        
|   d
i |}| j                  j                  rrt        j
                  j                  j                  | j                  j                  | j                  j                        j                         }|r|j                  |d<   i }| j                  j                  j                         D ]
  \  }}|||<    | j                  j                  j                  dd      |d<   | j                  D ]s  }t!        |j                  dd            }t#        t%        |j&                              }	|	j)                  |       t+        |j-                  t/        |	                  |d<   u | j                  |d<   | j0                  |d	<   |S )Nrv  r   r  HTTP_REFERERr?   r  urlqueryr;  r@   r{   )r   r  r}   r   r*   	ActiveTabr   r   r   r   
tab_targetr|  r  METAr   r;  r   r%  r   rE  r   r   _replacer   r@   )r   r   r  
active_tabextra_paramsr[  valtabparsedcombined_queryr   s             r   r  zHorillaTabView.get_context_data<  s`   '*4V4<<))1188<<,,4<<3D3D 9 eg  +5+@+@(((..0 	$HC #L	$ $(<<#4#4#8#8#LZ 99 	VCcggeR01F!)FLL"9:N!!,/#FOO)N:SO$TUCJ	V ))!\\	 r   )r   r  r  r  r.   r@   r   r
  rL   rm   r;  r   r  r   r   r   r  r  r  s   @r   r9  r9    s^     "!U+GS+/MD$O
 
   r   r9  c                       e Zd ZU dZdZe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Zeed<   deddf fdZ fdZ fdZed        Z xZS )HorillaCardViewz
    HorillaCardView
    Nr>   r@   zgeneric/horilla_card.htmlrM   r?   rP   detailsrc   
card_attrsTrm   ro   rp   rq   card_status_classcard_status_indicationsra   r   r   c                    t        |   di | t        t        dd       }|| _        t               | _        d| j                  j                  j                          | _
        | j                  st        dd      | _        y y )Nr}   r   r   hcv)r   r{   )r   r   r   r'   r}   r   r{  r   r   r   r   r@   r.   r  s      r   r   zHorillaCardView.__init__  so    "6".)T:'k!-djj.A.A.G.G.I-JK||)!E:DL r   c                 b   | 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                        j                   | _         t"        j$                  j&                  j)                  | j                  j                  | j                  j*                  d      j-                         }t/        |      sH|rFt1        |j(                        }t3        dd      }|j5                         D ]
  \  }}|||<    d	|_        | j                   S )
Nrr  rs  rt  T)rM   r}   ru  r?   rn  F)rM   r   rz  r>   r}   r|  r  r5   r~  r   r   r}  r  r   r{  r  r  r*   r  r   r   r   r   r  r#   r   r  r  )r   rt  r  rG  r[  r6  r   s         r   rz  zHorillaCardView.get_queryset  s   }}!G02DM  !\\--
#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'}}r   c                 8   t        |   di |}| j                         }| j                  |d<   | 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dgz   | j$                  z   D ]&  }||j'                         v s|j)                  |       ( ||d<   t+        |j-                  dd            }g }| j                  j/                  d      s"|D ]  }	|j1                  |	j2                          || j4                  j6                  | j8                  <   | j4                  j:                  j/                  dd      }
|
r&ddj=                  |
j?                  d      dd        z   }
t@        jB                  jD                  jG                  | j4                  jH                  | j4                  jJ                        t@        jB                  jD                  jG                  |
| j4                  jJ                        z  jM                         |d<   tO        || j4                  j:                  j/                  d      | jP                        |d<   |S c c}}w )Nr@   rP   rS  rc   rR  rm   rT  rU  ra   r   unknownonr  r  r  r   Tr   r,  r?   r  r   r  r  r  r  rM   r{   ))r   r  rz  r@   rP   rS  rc   rR  rm   rT  rU  ra   r   r{  r   r$   r   r  ro   r  r  r   r  r   r   rV   r}   r}  r   r|  r  r  r*   r  r   r   r   r   r  r1   rq   )r   r   r  rM   r  r[  r6  r  r  rQ  r  r   s              r   r  z HorillaCardView.get_context_data  s   '*4V4$$&!\\	 $ $!\\	!\\	&*&;&;"#'+'='=#$-1-I-I)*+/+E+E'(   !4!4!>!>!@AI)$**i@I #,//"3C8	4043M3MMM N  *i!884;U;UU' )..**MM#&	' &/GM"8//4/@A""&&w/$ 0""8;;/05@T112 <<##''
B7SXXhnnS&9!"&=>>H&&--\\&&4<<3D3D .    ((//!dll.?.? 0  (* 	 ! ,dll&&**62D4I4I

 Ks    "Lc                       fd}|S )Nc                 v    i |} di |}| |_         ||_        ||_         |j                  | g|i |S rz   r|   r   s        r   r   z%HorillaCardView.as_view.<locals>.view  r   r   r{   r   s   `` r   r   zHorillaCardView.as_view  r   r   ) r   r  r  r  r>   r%   r
  r@   r   rL   r  rP   rR  r%  rc   r   rS  rm   r  ro   rq   r  rT  rU  ra   r   r   rz  r  r  r   r  r  s   @r   rQ  rQ  [  s     #L)"GS/M$JGT" GTJ!d!"$4$c#s#$&T&!#3#	; 	; 	;"H7r 
 
r   rQ  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 rz   )r   r  r  s      r   r  zReloadMessages.get_context_data  s    '*4V4r   )r   r  r  r  rL   r  r  r  s   @r   r_  r_    s     ,M r   r_  r   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
    r}   Ndynamic_fieldrs  rb  r6  r   )r   r'   r|  r   typer   rQ  rV   r~  r  r}  r  r   r   )r   commitr~   r   r}   rb  r   new_isntance_pks           r   r   r     s     ni6GKK0MHdT/@@--**		OO''%/-?!.())	
 Or   c            	       |    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!e"d#        Z# xZ$S )%r   z
    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scriptr   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#reloadMessagesButtonr   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.   r  r  r   rj  )	r   rj  rk  rl  r   targetreload_responseuser_responser   s	            r   __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)r   r  r  r  r   r   r   rq  r{   r   r   r   ri  '  s6    	
 "$rQS		8<	KN		r   r   Nr   r   r@   r?   
hx_confirm
form_classzgeneric/horilla_form.htmlr   r%  form_disaply_attrzAdd Newnew_display_titleclose_button_attrssubmit_button_attrsFis_dynamic_create_viewdynamic_create_fieldsr   r   c                 J   t        |   di | t        t        dd       }d| j                  j
                  j                          | _        || _        | j                  s| j                  j                  | _	        | j                  rt        | j                  dt               y y )Nr}   r   r4   r{   )r   r   r   r'   r   r   r   r   r}   success_urlr   rs  r&  r4   r  s      r   r   zHorillaFormView.__init__Y  s    "6".)T:!-djj.A.A.G.G.I-JK#||00D ??DOO\:> r   r  r}   r~   c                2    |}t        |   |g|i |}|S r7  )r   r   r   r}   rV   r~   r   _pkr   r   s          r   r   zHorillaFormView.gete  s'     7;w888r   c                R    |}| j                          t        |   |g|i |}|S r7  )get_formr   r   r}  s          r   r   zHorillaFormView.postl  s0     7<9$9&9r   rG  filesrQ  c                P    |  | j                  |||| j                               }|S )z?
        method where first the form where initialized
        )rQ  initial)rs  get_initial)r   rG  r  rQ  r~   r   r   s          r   	init_formzHorillaFormView.init_formt  s3     	%(D4D4D4F  
 r   c                 n   t        |   di |}| j                         j                  j                  dz   | j
                  j                  j                  z   | _        | j                  |d<   | j                  |d<   | j                  |d<   | j                  |d<   | j                  j                  j                  dd      |d<   d }| j
                  j                  r | j
                  j                  j                  }|r7| j                  j                   j                  | j"                        r| j                  j$                  j                  | j&                  g       }t)        | j                  j*                        }t-        |j.                  j1                               d	   }|j2                  }|rt5        ||      \  }}	t7        |||	i
      }
t7        |||i
      }t9        |      | j
                  _        | j"                  | j
                  _        |
| j
                  _        || j
                  _        |S )Nr  ry  form_class_pathr@   rr  HTTP_HX_TARGETthis	hx_targetr   r  r{   ) r   r  r  r   r  r   r   r  ry  r@   rr  r}   rH  r   rQ  rV   r|  r%  r}  r   r   r   r   r   r  r1  r"   r   r   r   r.  r/  )r   r   r  rV   r   rC  r[  r1  previous_idr5  r.  r/  r   s               r   r  z HorillaFormView.get_context_data  s   '*4V4MMO%%00369L9L9U9UU 	 ,0+E+E'(%)%9%9!"!\\	 $#||00445EvN99##&&B$,,""&&t||4<<//33D4H4H"ML$,,++,Cszz()!,C||H'6|R'H$W"8S'NC&xk8JK),\):		&$(LL		!%-		")5		&r   c                     | j                   j                  d      }| j                  j                  j	                  |      j                         S )z9
        method to get the instance for the form
        rV   r  )r   r   r   r   r   r   )r   rV   s     r   rz  zHorillaFormView.get_queryset  s=     [[__T"zz!!((B(/5577r   c                 
   | j                   j                  d      }t        | d      s1| 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                  |_:        || _;        | jv                  S c c}w )"NrV   r   r   r  r   )
MethodTyper|  employee_idr   Dynamic creater   r  rs  r   Tr   rc  r   )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)<r   r   r  rz  r}   methodr   r   r  rx  typesr  r   r   ry  display_titler   r}  r  rQ  r   r   r  r
   ChoiceFieldr   r*   ManyToManyFieldMultipleChoiceFieldrV   r   r   r  r8   r~  r  r   django.urlsr   r  r  r   r   rY  rM   r   insertwidgetattrsr  r  option_template_namer   rt  rs  rs   ru  rv  rw  r   )r   rs  rV   rQ  rG  r  r   r  dynamic_tupler   r,  additional_data_fieldsr[  field_instancer6  
form_fieldr   r  rM   r  r  
data_fielddata_field_attrr  r  s                            r   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$DIyyo Qs   -U&c                       fd}|S )Nc                 v    i |} di |}| |_         ||_        ||_         |j                  | g|i |S rz   r|   r   s        r   r   z%HorillaFormView.as_view.<locals>.view%  r   r   r{   r   s   `` r   r   zHorillaFormView.as_view#  r   r   r7  )%r   r  r  r  r   r   r-  r
  r.   r@   r   rr  rs  r
   	ModelFormrL   r%  rt  ru  rv  rw  rx  r  ry  r   r   r   r   r   r   r  r  rz  r  r  r   r  r  s   @r   r   r   !  s6    B E6!!$GS$J"&J&/M!GS!s&s&$$%% $)D( #%4$
? 
? 
? 48"+.CF	 48"+.CF	 %'b4 	B8zx 
 
r   r   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Zdeddf fdZddZ fdZed        Z xZS )HorillaNavViewzG
    HorillaNavView

    filter form submit button id: applyFilter
    zgeneric/horilla_nav.htmlr?   	nav_titlerP   search_swap_targetsearch_input_attrs	search_inrc   group_by_fieldsfilter_form_context_nameNfilter_instancefilter_instance_context_namefilter_body_templateempty_inputs
view_typescreate_attrsTr   r   c                 t    t        |   di | | j                          t        t        dd       }|| _        y r  )r   r   "_initialize_model_and_group_fieldsr   r'   r}   r  s      r   r   zHorillaNavView.__init__K  s4    "6"//1.)T:r   c                    | j                   sy| j                   j                  j                  }|sy |       }| j                  xs |j                  j                  | _        	 | j                   j                         | _         | j                  sy|j                  j                  }g }|j                  }| j                  D ]8  }t        |t              r	  ||      j                  } |||f       1 ||       : || _        y#  Y xY w# t        $ rO d|v r@t        |d      r4	 |j                  |      } |||f       Y # t        $ r
}Y d}~nd}~ww xY w ||       Y w xY w)z
        Initialize model_class and reinitialize filter_instance if model exists
        for updating group_by_fields with verbose names.
        Nr   get_verbose_name_related_field)r  r   r   r  verbose_name_pluralr   r  r   r   r   r   rs   r   r  r  r!  )	r   model_class_refmodel_instancer   updated_fieldsr   r,  rs   rH  s	            r   r  z1HorillaNavView._initialize_model_and_group_fieldsR  sc   
 ##..44::(*S>+?+?+S+S	#'#7#7#A#A#CD  ##"((22	&&)) 	E%%"#,U#3#@#@LE<01  u)	,  .A	 ) "u}')I*! / N Nu U ) #E<#89$( ! !5M"s<   "D DDE "D??	EE EE E 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<   i }| j                  j8                  j;                         D ]
  \  }}|||<    | j                  j<                  j                  dd      |d<   | j>                  D ]s  }tA        |j                  dd            }t)        tC        |jD                              }	|	jG                  |       tI        |jK                  tM        |	                  |d<   u | j>                  |d<   | j                  rttA        tO        | j                              }
t)        tC        |
jD                              }|jG                  |       tI        |
jK                  tM        |                  |d<   |S )Nr  rP   r  r  r  rc   r  r  r  apply_first_filterr  zlast-applied-filterr  r  last_filterr  active_viewrB  r?   r  rC  rD  r  r{   )(r   r  r  rP   r  r  r  rc   r  r  r  r  r  r~  r   r}   r}  r  r   r  r%  r   r  r*   
ActiveViewr   r   r   r|  r  rH  r  r   r   rE  r   r   rI  r   r   )r   r   r  r  rK  r[  rL  r   rN  rO  parsed_searchparsed_search_urlr   s               r   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 "

%' 	 ((..0 	$HC #L	$ $(<<#4#4#8#8#LZ  OO 	WDdhhub12F!)FLL"9:N!!,/$V__9^;T_%UVDK	W !%??$S%9:M $Y}/B/B%C D$$\2$.&&Y7H-I&J%GL!
 r   c                       fd}|S )Nc                 v    i |} di |}| |_         ||_        ||_         |j                  | g|i |S rz   r|   r   s        r   r   z$HorillaNavView.as_view.<locals>.view  r   r   r{   r   s   `` r   r   zHorillaNavView.as_view  r   r   )r   N)r   r  r  r  rL   r  r   r
  rP   r  r  r  r   rc   r  r  r  r%   r  r  r  r  r  r  r   r   r  r  r  r   r  r  s   @r   r  r  1  s     /MIsJ    ItGTOT$&c&!%OY%(* #* "#"L$JL#  0.d:x 
 
r   r  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
<   deddf fdZeddeded
eddfd       Zed        Zdedef fdZ xZS )HorillaProfileViewz#
    GenericHorillaProfileView
    z!generic/horilla_profile_view.htmlNr@   r>   push_urlrV   key_namerc   r;  r   r   c                 D   t        | j                  j                  j                               | _        | j
                  st        d      | _        t        
|    di | t        t        dd       }|| _        d| j                  j                  j                          | _        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,                  j/                  |j0                  |j2                        j5                         }| j"                  j7                         | _        | j8                  D cg c]  }|d   |d   f c}| _        |sg n|j<                  }t?        | j:                  |g       | _         | j:                  D ]B  }	|	d   |v s| j8                  D ])  }|d   |	d   k(  s| j8                  jC                  |       + D y c c}w )Nr   r}   r   r   r  rC  r  r  z
/<int:pk>/r   r  z/{pk}/r   )r   r   r{   )"r   r   r   r   
url_prefixr@   r.   r   r   r   r'   r}   r   r   r  r   r  r;  r   r   r*   r   r   r   r   r   r   r$  visible_tabs	tabs_listr   r7   r   remove)r   r   r}   r   r  rM  rC  r   hidden_tabsr  r   s             r   r   zHorillaProfileView.__init__  s   dnn55;;=>||)!,DL"6".)T:!-djj.A.A.G.G.I-JK 	3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rM  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)r;  r   r  )r   rM  r  r;  s       r   add_tabzHorillaProfileView.add_tab	  sH     xx$CH}$HHNN5#&	 r   c                       fd}|S )Nc                 v    i |} di |}| |_         ||_        ||_         |j                  | g|i |S rz   r|   r   s        r   r   z(HorillaProfileView.as_view.<locals>.view+	  r   r   r{   r   s   `` r   r   zHorillaProfileView.as_view)	  r   r   c                 h   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!                  | j"                  g       }|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 }t/        ||d   j0                        \  }}	t3        | j                  j                        }
t5        |
j6                  j9                               d   }|
j:                  }t=        |||	i      }t=        |||i      }t=        | j>                  | j@                  |	i      }t=        | j>                  | j@                  |i      }tC        |      |d<   |r||d<   ||d<   ||d<   ||d<   ||d<   | jD                  |d<   | jF                  |d<   |d   |d   |d   |d   |d   d}t%        j&                  | j                  j                  j(                   d|       |S )Nr-  rQ  r;  r  r   r@   rA  r  zhpv-instance-idsr   	instances   	   z9+r   +r   r  r   r.  r/  push_url_nextpush_url_prevdisplay_countrc   r>   )r  r   r>   r@   r-  search_in_instance_idsr{   )$r   r  r;  r  r   r@   r*   rF  r   r   r}   r   r   r   rG  r}  r   r   r~  r  r  r   countr"   rV   r   r   r   r  r1  r   r  r  r   rc   r>   )r   r   r  rJ  r   r  balance_countr  r  r5  rC  r[  r1  r.  r/  r  r  r   r   s                     r   r  z#HorillaProfileView.get_context_data6	  s   '*4V4%h/
))"&"3"3!%!1!1!\\	%%--44||((t||/@/@ 5 

%' 	 '1'<'<GO$||++//0D0DbI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t}}g6NOt}}k6RS"%l"3"*GJ&2GN#'4GO$'4GO$#0 !\\	"&"3"3 -#N3#N3y)h'
 			T\\))5566LMuUr   )NNN)r   r  r  r  rL   r@   r   r
  r>   r%   r  r  rc   r   r;  r   r   r  r%  r  r  r   r  r  r  s   @r   r  r    s     8MGS"L)"HcHc GTD$O.6 .6 .6` '$ 'c ' 'PT ' ', 
 
= = = =r   r  )T)ir  r  rE   loggingr)  typingr   urllib.parser   r   r   r   r   pandasr  bs4r	   djangor
   django.contribr   django.core.cacher   r~  django.core.exceptionsr   django.core.paginatorr   	django.dbr   django.db.modelsr   r   django.db.models.functionsr   django.httpr   r   r   r   django.shortcutsr   django.template.loaderr   r  r   r   django.utils.decoratorsr   django.utils.translationr   r   django.views.genericr   r   r   r    	xhtml2pdfr!   base.methodsr"   r#   r$   horilla.filtersr%   horilla.group_byr&   horilla.horilla_middlewaresr'   horilla.signalsr(   r)   horilla_viewsr*   horilla_views.cbv_methodsr+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   horilla_views.formsr6   r7   3horilla_views.templatetags.generic_template_filtersr8   	getLoggerr   r(  r=   r  r  r9  rQ  r_  r  r   r   r  r  r{   r   r   <module>r     s   
     M M    # , 4 & ! ) + J J # 3 ( 4 6 M M  J J % . 6 C      H L			8	$ %J7MPh MP 8MP`** *Z %J7b* b 8bJ %J7;\ ; 8;| %J7_h _ 8_D %J7	\ 	 8	u , %J7Lh L 8L^ %J7Y\ Y 8Yx %J7d d 8dr   