
    si8                        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 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# ddl$m%Z& ddl'm(Z(m)Z) ddl*m+Z+m,Z, ddl-m.Z.  eed       G d de             Z/ eed       G d de             Z0 eed       G d de             Z1 eed       G d de             Z2 e ed      d       eed       G d  d!e                    Z3 G d" d#e0      Z4 ejj                  d$e4jm                         d%d&d' e!jl                         d(d&d)ejn                  d*d&g+       y),z/
this page handles cbv methods of payslip page
    N)Any)messages)HttpResponse)render)reverse)method_decorator)gettext_lazy)views)EmployeeProfileView)login_requiredpermission_required)HorillaFormViewHorillaListViewHorillaNavViewTemplateView)notify)AllowanceDeductionTabView)PayslipFilter)component_forms)calculate_employer_contributionsave_payslip)ContractPayslip)payroll_calculationdispatch)namec                   ,     e Zd ZdZdef fdZdZ xZS )PayslipViewz
    payslip page
    kwargsc                     t        j                         }t        j                         }t        j                         }|d   }t        |   di |}||d<   ||d<   ||d<   |S )zH
        Return context for rendering payslip generation forms.
        
group_nameindividual_form	bulk_form )formsGeneratePayslipFormPayslipFormsuperget_context_data)selfr   formr"   r#   r!   context	__class__s          7/var/www/python-projects/worksol/payroll/cbv/payslip.pyr)   zPayslipView.get_context_data'   so     ((*++---/	,'
'*4V4%4!" *(    zcbv/payslip/payslip_home.html)__name__
__module____qualname____doc__r   r)   template_name__classcell__r-   s   @r.   r   r   !   s      4Mr/   r   c            
       L    e Zd ZdZdZg dZdeddf fdZ fdZe	Z
eZ ed	      d
df ed      df ed      df ed      df ed      df ed      df ed      df ed      dfgZg dZdZdZd ed      dfd  ed!      d"fd# ed$      d%fd& ed'      d(fgZd)Zd*Z xZS )+PayslipListz
    list view
    selectedInstances)status
start_dateend_dater   returnNc                 R    t        |   di | t        d      | _        d| _        y )Npayslip-listzpayslip-divr$   )r(   __init__r   
search_urlview_idr*   r   r-   s     r.   r@   zPayslipList.__init__E   s&    "6"!.1$r/   c                     t         |          }| j                  j                  j	                  d      s&|j                  | j                  j                        }|S )zS
        Return the queryset of Payslip objects based on user permissions.
        zpayroll.view_payslip)employee_id__employee_user_id)r(   get_querysetrequestuserhas_permfilter)r*   querysetr-   s     r.   rF   zPayslipList.get_querysetJ   sJ     7')||  ))*@AT\\EVEVWHr/   Employeeemployee_idemployee_id__get_avatar
Start dater;   End Dater<   Batchr!   	Gross Paygross_pay_display	Deductiondeduction_displayNet Paynet_pay_displayStatuscustom_status_col))rL   employee_id__get_full_namerN   )rO   r;   )rP   r<   )rR   rS   )rT   rU   )rV   rW   )rX   rY      custom_actions_colz
draft--dotDrafta[  
            onclick="
            $('#applyFilter').closest('form').find('[name=status]').val('draft');
            $('[name=review_ongoing]').val('unknown').change();
            $('[name=confirmed]').val('unknown').change();
            $('[name=paid]').val('unknown').change();
            $('#applyFilter').click();
            "
            zreview_ongoing--dotzReview Ongoinga[  
            onclick="
            $('#applyFilter').closest('form').find('[name=status]').val('review_ongoing');
            $('[name=draft]').val('unknown').change();
            $('[name=confirmed]').val('unknown').change();
            $('[name=paid]').val('unknown').change();
            $('#applyFilter').click();
            "
            zconfirmed--dot	Confirmeda[  
            onclick="
            $('#applyFilter').closest('form').find('[name=status]').val('confirmed');
            $('[name=draft]').val('unknown').change();
            $('[name=review_ongoing]').val('unknown').change();
            $('[name=paid]').val('unknown').change();
            $('#applyFilter').click();
            "
            z	paid--dotPaida[  
            onclick="
            $('#applyFilter').closest('form').find('[name=status]').val('paid');
            $('[name=draft]').val('unknown').change();
            $('[name=review_ongoing]').val('unknown').change();
            $('[name=confirmed]').val('unknown').change();
            $('#applyFilter').click();
            "
            z

                onclick="
                event.stopPropagation();
                window.location.href='{get_individual_payslip}'"

                z3status-{status} sent_to_employee-{sent_to_employee})r0   r1   r2   r3   selected_instances_key_idbulk_update_fieldsr   r@   rF   r   modelr   filter_class_columnssortby_mappingrecords_per_pageaction_methodrow_status_indications	row_attrsrow_status_classr5   r6   s   @r.   r8   r8   8   s2    !4% % %
 E L	
:'@A	
<,'	
:
#	
7\"	
;,-	
;,-	
9()	
8)*	GN (M gJ	
 "	
 kN	
 fI	
Q5nI Mr/   r8   c                   2    e Zd ZdZdeddf fdZ ed      ZdZ e	       Z
dZd	Zd
 ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd  ed!      fgZ xZS )"
PayslipNavz
    navbar
    r   r=   Nc                    t        |   di | t        d      | _        | j                  j
                  j                  d      rwdt        d       d| _        t        d      ddt        d	      d
t        d       ddt        d      ddt        d      dt        d       ddt        d      ddg| _	        y d | _        d | _	        y )Nr?   payroll.add_payslipzs
                data-target="#genericModal"
                data-toggle="oh-modal-toggle"
                hx-get="zpayroll-create-form-viewz<"
                hx-target="#genericModalBody"
            Generatez
                    data-toggle = "oh-modal-toggle"
                    data-target = "#bulkPayslipModal"
                    style="cursor: pointer;"
                )actionattrszPayslip Reportz
                            data-toggle = "oh-modal-toggle"
                            data-target = "#genericModal"
                            hx-target="#genericModalBody"
                            hx-get ="zpayslip-detailed-exportzG"
                            style="cursor: pointer;"
                zSend Via Mailzm
                   onclick="bulkSendViaMail()"
                    style="cursor: pointer;"
                Exportz
                    data-toggle = "oh-modal-toggle"
                    data-target = "#payslipExport"
                    hx-target="#payslipExportForm"
                    hx-get ="zpayslip-bulk-export-dataz?"
                    style="cursor: pointer;"
                Deletez
                            onclick="payslipBulkDelete()"
                            data-action ="delete"
                            style="cursor: pointer; color:red !important"
                             r$   )
r(   r@   r   rA   rG   rH   rI   create_attrsrd   actionsrC   s     r.   r@   zPayslipNav.__init__   s
   "6"!.1<<%%&;<% !!;<= >!D  
m   01"& '..G&H%I J		  0  k" &&@AB C		  k!I,DL\ !%DDLr/   r   zcbv/payslip/payslip_filter.htmlr+   z#listContainerrM   rL   r!   zPay Slip Batchr;   rO   r<   rP   	basic_payz	Basic Pay	gross_payrR   net_payrV   r:   rX   .employee_id__employee_work_info__department_id
Department0employee_id__employee_work_info__job_position_idzJob Position,employee_id__employee_work_info__job_role_idzJob Role+employee_id__employee_work_info__company_idCompany)r0   r1   r2   r3   r   r@   rd   	nav_titlefilter_body_templater   filter_instancefilter_form_context_namesearch_swap_targetgroup_by_fieldsr5   r6   s   @r.   rm   rm      s    :  :  : x )I<#oO%) 
*&	q)*+	q'	Qz]#	an%	an%	AiL!	1X;	91\?K	;Q~=NO	7:G	6)EOr/   rm   c                   ,     e Zd ZdZdZdef fdZ xZS )PayslipBulkExportz
    bulk export
    zcbv/payslip/payslip_export.htmlr   c                     t         j                  j                         }t        j                  }t        |      }t        |   di |}||d<   ||d<   |S )a/  
        Override the get_context_data method to add Payslip export related data to the context
        Args:
            **kwargs (Dict[str, Any]): Keyword arguments passed to the method
        Returns:
            Dict[str, Any]: Updated context dictionary containing export form and filter.
        )rK   export_columnexport_filterr$   )r   objectsallr%   PayslipExportColumnFormr   r(   r)   )r*   r   payslipr   r   r,   r-   s         r.   r)   z"PayslipBulkExport.get_context_data  sW     //%%'55%w7'*4V4#0 #0 r/   )r0   r1   r2   r3   r4   r   r)   r5   r6   s   @r.   r   r     s      6M  r/   r   ro   c                        e Zd ZdZeZej                  Z e	d      Z
dZ fdZdedef fdZdej                  def fdZ xZS )	PayrollCreateFormViewz(
    form view for creating payslip
    zCreate Payslipz%cbv/payslip/payslip_inherit_form.htmlc                 0    t        |   di |}d|d<   |S )NpayslipCreaterB   r$   )r(   r)   )r*   r   r,   r-   s      r.   r)   z&PayrollCreateFormView.get_context_data+  s$    '*4V4,	r/   r+   r=   c                     |j                         s>|j                  j                         }t        | j                  | j
                  ||d      S t        |   |      S )z'
        form invalid function
        )r+   errors)is_validr   as_datar   rG   r4   r(   form_invalid)r*   r+   r   r-   s      r.   r   z"PayrollCreateFormView.form_invalid1  sU     }}[[((*Fd00462R  w#D))r/   c                    |j                         r&|j                  d   }|j                  d   }|j                  d   }t        j                  j	                  |||      j                         }t        j                  j	                  |d      j                         }||j                  k  r|j                  }t        |||      }||d<   i }||d<   |d   |d<   |d   |d<   | j                  j                  j                  d	      d
n| j                  j                  d	   |d	<   |d   |d<   |d   |d<   |d   |d<   |d   |d<   |d   |d<   t        j                  |d         |d<   t        |       |d   |d<   t        d i ||d<   t!        j"                         }t%        j&                  | j                  t)        d             |d   }t+        j,                  | j                  j.                  j0                  |j2                  dddddt5        dd|j6                  i      d	       | j9                         S t:        	| y  |      S )!z%
        form valid function
        rM   r;   r<   )rM   r;   r<   active)rM   contract_statusr   employeer:   draftcontract_wagerw   rx   total_deductions	deductionry   	json_datapay_datainstallmentsinstancezPayslip Savedz#Payslip has been generated for you.u%   تم إصدار كشف راتب لك.u*   Gehaltsabrechnung wurde für Sie erstellt.u%   Se ha generado la nómina para usted.u.   La fiche de paie a été générée pour vous.zview-created-payslip
payslip_idr   close)	recipientverbverb_arverb_deverb_esverb_frredirecticonr$   )r   cleaned_datar   r   rJ   firstr   contract_start_dater   rG   GETgetjsonloadsr   r   r%   r'   r   successrd   r   sendrH   employee_getemployee_user_idr   pkr   r(   
form_valid)
r*   r+   r   r;   r<   r   contractpayslip_datadatar-   s
            r.   r   z PayrollCreateFormView.form_valid<  sc    ==?((7H**<8J((4Hoo,,$h - eg   ''..$h / eg  H888%99
.xXNL&-L#D'D!-l!;D+J7D <<##''19 \\%%h/ N
 %1$AD! ,[ 9D ,[ 9D ,-? @D*95DO#zz,{*CDD+D1#/#?D '3';d';L$$$&DT\\1_+=>":.GKK!!.."33:?D?H *L'**3M  $$&&w!$''r/   )r0   r1   r2   r3   r   rb   r%   r'   
form_classrd   new_display_titler4   r)   r   r   r   r   r5   r6   s   @r.   r   r     sa     E""J*+;M	* 	* 	*6(u00 6(\ 6( 6(r/   r   c            	           e Zd ZdZdZfdZdeddffdZej                  D  cg c]  }|d   t        d	      k7  s| c}}} Z	e	j                   e
d	      d
f       dZxZS c c}}} w )
PayrollTabz=
    class for rendering payroll tab in employee profile
       c                 ~    t         |          }| j                  j                  d      }|j	                  |      }|S )Nr   )rM   )r(   rF   r   r   rJ   )r*   rK   r   r-   s      r.   rF   zPayrollTab.get_queryset|  s7    7')[[__T"??r?2r/   r   r=   Nc                     t        |   di | | j                  j                  j                  j                  d      }t        dd|i      | _        y )Nr   zindividual-payslip-tab-listr   r$   )r(   r@   rG   resolver_matchr   r   r   rA   )r*   r   r   r-   s      r.   r@   zPayrollTab.__init__  sF    "6"\\((//33D9!"?r
Sr/   r   rX   
get_statusget_download_url)r0   r1   r2   r3   rg   rF   r   r@   r8   re   rd   appendrh   r5   ).0colrd   r-   s   000@r.   r   r   u  su     T T T
 *11KKsSVq{5JsKGNNAhK./&M Ls   A( A(r   Payrollz/payroll.cbv.accessibility.payroll_accessibility)titleviewaccessibilityzAllowance & Deductionz?payroll.cbv.accessibility.allowance_and_deduction_accessibilityzBonus Pointsz-payroll.cbv.accessibility.bonus_accessibility)tabs)8r3   r   typingr   django.contribr   django.httpr   django.shortcutsr   django.urlsr   django.utils.decoratorsr   django.utils.translationr	   rd   r   r
   employee_viewemployee.cbv.employee_profiler   horilla_views.cbv_methodsr   r   horilla_views.generic.cbv.viewsr   r   r   r   notifications.signalsr   payroll.cbv.allowance_deductionr   payroll.filtersr   payroll.formsr   r%   payroll.methods.methodsr   r   payroll.models.modelsr   r   payroll.views.component_viewsr   r   r8   rm   r   r   r   add_tabas_viewbonus_points_tabr$   r/   r.   <module>r      s     # $ #  4 6 + = I  ) E ) 2 Q 3 = .z24, 4 34, .z2rM/ rM 3rMj .z2T T 3Tn .z2  30 %&;<:N.z2Q(O Q( 3 OQ(h' '0     &&(N	
 -5-557^		
 $!22L	

r/   