
    n^j                        d 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 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mZmZmZ  eed       e ed      d       G d de                    Z eed       e ed      d       G d de                    Z eed       e ed      d       G d de                    Z eed       e ed      d       G d de                    Z y)u}  
budget/cbv/head.py
==================
CBV views for BudgetHead CRUD.

Pattern (mirrors payroll/cbv/salary_structure.py):
  BudgetHeadViewPage  → TemplateView that extends index.html
  BudgetHeadNavView   → HorillaNavView (topbar with search/filter/create)
  BudgetHeadListView  → HorillaListView (records table)
  BudgetHeadFormView  → HorillaFormView (create/edit modal)
    )Any)messages)HttpResponse)reversereverse_lazy)method_decorator)gettext_lazy)BudgetHeadFilter)BudgetHeadForm)
BudgetHead)login_requiredpermission_required)HorillaFormViewHorillaListViewHorillaNavViewTemplateViewdispatch)namezbudget.view_budgetheadc                       e Zd ZdZdZy)BudgetHeadViewPagez2Full-page host that loads the nav + list via HTMX.zcbv/head/head_home.htmlN)__name__
__module____qualname____doc__template_name     3/var/www/python-projects/worksol/budget/cbv/head.pyr   r   !   s     =-Mr   r   c                   N     e Zd Zdeddf fdZ ed      Z e       ZdZ	dZ
 xZS )BudgetHeadNavViewkwargsreturnNc                 z    t        |   di | t        d      | _        d| _        dt        d       d| _        y )Nbudget-head-listz#listContainerzhx-get="zbudget-head-createzY" hx-target="#genericModalBody" data-target="#genericModal" data-toggle="oh-modal-toggle"r   )super__init__r   
search_urlsearch_swap_targetr   create_attrsselfr!   	__class__s     r   r&   zBudgetHeadNavView.__init__,   sH    "6"!"45"2|$89: ;, , 	r   zBudget Headszcbv/head/filter.htmlform)r   r   r   r   r&   _	nav_titler
   filter_instancefilter_body_templatefilter_form_context_name__classcell__r,   s   @r   r    r    )   s6    	
 	
 	
 .!I&(O1%r   r    c                        e Zd ZeZeZdeddf fdZ e	d      df e	d      df e	d	      d
f e	d      dfgZ
ddgZdddddZdZdZ xZS )BudgetHeadListViewr!   r"   Nc                    t        |   di | d| _        t        d      | _        g | _        | j                  j                  j                  d      r(| j
                  j                  t        d      ddd       | j                  j                  j                  d      r)| j
                  j                  t        d	      d
dd       y y )Nzbudget-head-containerr$   zbudget.change_budgetheadEditzcreate-outlineaA  
                        class="oh-btn oh-btn--light-bkg w-100"
                        hx-get='{get_update_url}?instance_ids={ordered_ids}'
                        hx-target="#genericModalBody"
                        data-toggle="oh-modal-toggle"
                        data-target="#genericModal"
                    )actioniconattrszbudget.delete_budgetheadDeleteztrash-outlineai  
                        class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100"
                        hx-get="{get_delete_url}?model=budget.BudgetHead&pk={pk}"
                        data-toggle="oh-modal-toggle"
                        data-target="#deleteConfirmation"
                        hx-target="#deleteConfirmationBody"
                    r   )r%   r&   view_idr   r'   actionsrequestuserhas_permappendr.   r*   s     r   r&   zBudgetHeadListView.__init__C   s    "6".!"45<<%%&@ALLi,
 <<%%&@ALLk+
 Br   CodecodeNamer   z	Sub-Headssub_head_countActive	is_active)rC   rD   )rE   r   z  style="width:140px !important" z  style="width:120px !important" z  style="width:100px !important" z  style="width:160px !important" )rD   rF   rH   r9   z4
        id="budgetHeadTr{get_delete_instance}"
       )r   r   r   r   modelr
   filter_classr   r&   r.   columnssortby_mappingheader_attrs	row_attrsrecords_per_pager3   r4   s   @r   r6   r6   =   s     E#L! ! !H 
6F	
6F	
;)*	
8k"	G 	N 7@;8	LI r   r6   zbudget.add_budgetheadc                   D     e Zd ZeZeZ ed      ZdZ	dede
f fdZ xZS )BudgetHeadFormViewzAdd Budget Headzcbv/head/head_form.htmlr-   r"   c                 T   |j                         r|j                  j                  r*t        j                  | j
                  t        d             n)t        j                  | j
                  t        d             |j                          | j                         S t        | )  |      S )NzBudget head updated.zBudget head created.)is_validinstancepkr   successr?   r.   saver   r%   
form_valid)r+   r-   r,   s     r   rY   zBudgetHeadFormView.form_valid   su    ==?}}  q1G/HI  q1G/HIIIK$$&&w!$''r   )r   r   r   r   rJ   r   
form_classr.   new_display_titler   r   rY   r3   r4   s   @r   rR   rR      s8     EJ+,-M(~ (, ( (r   rR   N)!r   typingr   django.contribr   django.httpr   django.urlsr   r   django.utils.decoratorsr   django.utils.translationr	   r.   budget.filtersr
   budget.formsr   budget.modelsr   horilla_views.cbv_methodsr   r   horilla_views.generic.cbv.viewsr   r   r   r   r   r    r6   rR   r   r   r   <module>rg      s  
  # $ - 4 6 + ' $ I  .z2%&>?jQ. . R 3. .z2%&>?jQ& & R 3&$ .z2%&>?jQ> > R 3>B .z2%&=>ZP( ( Q 3(r   