
    si$'                     &   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 ddlmZ ddlmZmZmZmZmZmZ ddlmZ  G d dej<                        Z G d dej@                        Z! G d dej<                        Z"y)z
horilla_views/forms.py
    N)forms)ContentFile)default_storage)transaction)render_to_string)SafeText)gettext_lazy)_thread_locals)models)BOOLEAN_CHOICESFIELD_WIDGET_MAPMODEL_FORM_FIELD_MAPget_field_class_mapget_original_model_field
structured)getattributec                   4     e Zd ZdZdef fdZdefdZ xZS )ToggleColumnFormz
    Toggle column form
    hidden_fieldsc                     t        t        di       }|| _        t        	|   |i | |D ]A  }d}|d   |v rd}|s|r||vrd}t        j                  |d   |      | j                  |d   <   C y )NrequestT   Fr   )labelinitial)getattrr
   r   super__init__r   BooleanFieldfields)
selfcolumnsdefault_columnsr   argskwargsr   columnr   	__class__s
            7/var/www/python-projects/worksol/horilla_views/forms.pyr   zToggleColumnForm.__init__!   s     .)R8$)&) 		FGayM) "v_'D#G%*%7%7Qi&DKKq	"		    returnc                 <    | | j                   d}t        d|      }|S )zA
        Render the form fields as HTML table rows with.
        formr   zgeneric/as_list.html)r   r   )r    context
table_htmls      r'   as_listzToggleColumnForm.as_list7   s%      DLL9%&<gF
r(   )	__name__
__module____qualname____doc__listr   r   r/   __classcell__r&   s   @r'   r   r      s#     	, r(   r   c                        e Zd ZdZ ej
                   ej                  dddd            Z G d d	      Zd
 Z	 fdZ
 xZS )SavedFilterFormz
    SavedFilterForm
    oh-input w-100colorzChoose a color)classtypeplaceholderattrs)widgetc                   ,    e Zd Zej                  Zg dZy)SavedFilterForm.Meta)title
is_defaultr:   N)r0   r1   r2   r   SavedFiltermodelr    r(   r'   MetarB   O   s    ""1r(   rH   c                 J    t        t        dd      }| |d}t        d|      }|S )zS
        Render the form fields as HTML table rows with Bootstrap styling.
        r   Nr+   zcommon_form.html)r   r
   r   )r    r   r-   r.   s       r'   r   zSavedFilterForm.structuredS   s4     .)T:
 &&8'B
r(   c                     t        |   |i | | j                  d   j                  j                  }d|d<   d|d<   | j
                  j                  r| j
                  j                  | _        y y )NrC   r9   r;   zSaved filter titler=   )	r   r   r   r@   r?   instancepkrC   verbose_name)r    r#   r$   r?   r&   s       r'   r   zSavedFilterForm.__init___   sf    $)&)G$++11)g3m== $ 3 3D r(   )r0   r1   r2   r3   r   	CharField	TextInputr:   rH   r   r   r5   r6   s   @r'   r8   r8   @   sO     EOOu)/
E2 2
4 4r(   r8   c                   ~     e Zd ZdZ ed      Zdg g ddej                  j                  dedef fdZ	d	 Z
d
 Z xZS )DynamicBulkUpdateFormz
    DynamicBulkUpdateForm
    zBulk UpdateN)
root_modelbulk_update_fieldsidsrR   rS   rT   c          	         || _         || _        t        |d       | _        t        | _        t        ||      }t        t        d      | _        t        | (  |i | |j                         D ]X  \  }}t        j                  t        |            }	t        j                  t        |            }
|	sF|
sIt!        |t"        j"                  j$                        rat'        j(                  t*        |	|j,                  j/                         d      | j0                  |<   d| j0                  |   j2                  _        t        |d      st!        |t"        j"                  j6                        r|j8                  rt'        j(                  dg|j8                  D cg c]  }|d	   d
k7  s| c}z   t'        j:                  ddi      |j,                  j/                         d      | j0                  |<   d| j0                  |   j2                  _         |
|	|j,                  j/                         d      | j0                  |<   d| j0                  |   j2                  _        |j<                  j>                  jA                         } |
|	||j,                  d      | j0                  |<   d| j0                  |   j2                  _        [ y c c}w )Nc                 $    | j                  d      S )N__)count)xs    r'   <lambda>z0DynamicBulkUpdateForm.__init__.<locals>.<lambda>z   s    aggdm r(   )keyr   F)choicesr@   r   required)z"horilla_widgets/select_option.htmlrelated_model) z--------r   r_   r;   zoh-select oh-select-2 w-100r>   )r@   r   r]   )r@   querysetr   r]   )!rT   rR   sortedrS   r   r   r   r
   r   r   r   itemsr   getr<   r   
isinstancer   r   r   ChoiceFieldr   rM   
capitalizer   r@   option_template_namerN   r\   Selectr^   objectsall)r    rR   rS   rT   r#   r$   mappingsr[   valr@   fieldchoicer`   r&   s                r'   r   zDynamicBulkUpdateForm.__init__o   se    $"($;#
 %&z3EF#NI>$)&) ( 0	HC%))$s)4F(,,T#Y7E%c6==#=#=>','8'8 /%!..99;!&	(DKK$DDKK$++@ %c?;!#v}}'>'>?CKK+0+<+<%5$647KKS&6!9PR?vS%T#(<<'.0M&N$ #&"2"2"="="?%*,C(HC(//D !',%!..99;!&(DKK$
DDKK$++@ ,,4488:#(!%**"	$C @C ''<]0	& Ts   K&Kc                 
   d}	 t        j                         5  | j                          t        d      # 1 sw Y   |S xY w# t        $ r8}dt	        |      vr d}| j                  d dt	        |              Y d }~|S d }~ww xY w)NT	no_errorsFzForm not valid: )r   atomicsave	Exceptionstr	add_error)r    valides      r'   is_validzDynamicBulkUpdateForm.is_valid   s    
	B##% -		,,	-   	B#a&(t'7Ax%@A	Bs)   A 4>A A 	B
-A==Bc           	      j	   t        | j                  | j                        }i }i }i }i }i }| j                  }	|j                         D ]  \  }
}|j                  j
                  j                  d      rt        |j                        |_        t        j                  t        |            }|sg|j                  |j                        si ||j                  <   |j                  |j                        si ||j                  <   |j                  |j                        si ||j                  <   |j                  |j                        s|j                  | j                  k(  rd||j                  <   np|
j                  d      d   }t        |	|      }t        |d      sW|j                  j                  j                   dz   ||	   z   ||j                  <   |j                  }	| j"                  j%                  |
      }| j&                  j%                  |
      }|r|d   s|s|
j                  d      d   }
t        |j                  |
      j                  }t)        |t*        j*                  j,                        r|||j                     |
<   F|rt)        |t*        j*                  j.                  t*        j*                  j0                  f      r`t2        j4                  j7                  |j8                  |d   j                         }|||j                     |
<   |d   ||j                     |<   |d   ||j                     |
<    |j                         D ]  \  }}||vr |j:                  j<                  d
i ||   | j>                  i} |j@                  d
i | |||<   ||   }|sU|j                         D ]a  \  }}tC        ||      j                  jD                  j:                  j=                  |      }|D ]  }tC        ||      jG                  |        c  |j                         D ]  \  }}|s	|j                         D ]f  \  }}t2        j4                  j7                  |j8                  |j                         }tI        jJ                  |tM        |jO                                      h  y	)z"
        Bulk save method
        
Historicalid__inrW   relatedr   )r{   NrG   )(r   rR   rS   rb   rF   r0   
startswithr   r   rc   r<   splitr   hasattrr}   rm   namefilesgetlistdatard   r   ManyToManyField	FileField
ImageFieldospathjoin	upload_tori   filterrT   updater   r^   setr   rr   r   read)r    r#   r$   rk   	data_mappdata_m2m_mapprelation_mappmap_querysetfiels_mappingparent_modelr[   rl   rm   related_keyr   valuemodel_field	file_pathrF   r   r`   m2m_datarT   related_objectsrK   files                             r'   rr   zDynamicBulkUpdateForm.save   s
    't8O8OP	 ( .	5HCyy!!,,\:4SYY?	(,,T#Y7E$((3/1M#)),$((3/1M#)), }}SYY/+-Icii((,,SYY79977?M#))4*-))D/"*=K$0{$KE#*5)#< ( % 3 3 8 8"&!'"/"=!> *#))4
 ,/99L

**3/		))#.U1Xuiiob)*399c:@@k6==+H+HI49M#)),S1Z//00 !#[-B-BE!HMM RI09Icii(-<A!HM#)),[9,1!H	#))$S)].	5` %??, 	FKE4M)+u}}++O}U/CTXX.NOH HOO#d#"*L$U+H"*.."2 FJE3&-u'eMM''&&&2D $ %- F%044_EF	F	F" *//1 	NLE5#(;;= NKE4 "U__dii HI#((K		4LMN	Nr(   )r0   r1   r2   r3   _rM   r   Modelr4   r   rx   rr   r5   r6   s   @r'   rQ   rQ   h   s]     ]#L
 +/#%B MM''B !	B
 BHPNr(   rQ   )#r3   r   djangor   django.core.files.baser   django.core.files.storager   	django.dbr   django.template.loaderr   django.utils.safestringr   django.utils.translationr	   r   horilla.horilla_middlewaresr
   horilla_viewsr   horilla_views.cbv_methodsr   r   r   r   r   r   3horilla_views.templatetags.generic_template_filtersr   Formr   	ModelFormr8   rQ   rG   r(   r'   <module>r      sp    
  . 5 ! 3 , 6 6    M!uzz !H%4eoo %4PjNEJJ jNr(   