403Webshell
Server IP : 65.108.144.40  /  Your IP : 216.73.217.165
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux ubuntu-8gb-hel1-1 5.15.0-173-generic #183-Ubuntu SMP Fri Mar 6 13:29:34 UTC 2026 x86_64
User : dev ( 1000)
PHP Version : 8.2.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/erp/payroll/forms/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/erp/payroll/forms/__pycache__/component_forms.cpython-310.pyc
o

hͦhԊ�@sdZddlZddlZddlZddlmZddlmZddlm	Z	ddl
mZddlm
Z
ddlmZddlZdd	lmZmZdd
lmZddlmZddlmZmZdd
lmZddlm Z ddl!m"Z"m#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z,ddlm-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5ddl6m7Z8e�9e:�Z;Gdd�dej�Z<Gdd�dej�Z=Gdd�de�Z>Gdd�de"�Z?Gdd�de�Z@d ed!�fd"ed#�fd$ed%�fd&ed'�fd(ed)�fd*ed+�fd,ed-�fd.ed/�fd0ed1�fd2ed3�fd4ed5�fd6ed7�fd8ed9�fd:ed;�fd<ed=�fd>ed?�fd@edA�fdBedC�fgZAGdDdE�dEej�ZBgdF�ZCGdGdH�dHej�ZDGdIdJ�dJe�ZEGdKdL�dLeE�ZFGdMdN�dNe�ZGGdOdP�dPe�ZHGdQdR�dReH�ZIGdSdT�dTejJ�ZKGdUdV�dVejL�ZMGdWdX�dXe�ZNGdYdZ�dZe�ZOGd[d\�d\e�ZPdS)]z�
These forms provide a convenient way to handle data input, validation, and customization
of form fields and widgets for the corresponding models in the payroll management system.
�N)�Any)�forms)�apps��render_to_string)�timezone)�gettext_lazy)�Form�	ModelForm)�reload_queryset)�EmployeeFilter)�
BonusPoint�Employee)�horilla_middlewares)�get_horilla_model_class)�HorillaForm�orginal_template_name)�HorillaMultiSelectField)�HorillaMultiSelectWidget)�notify)�
tax_models)	�	Allowance�Contract�	Deduction�LoanAccount�MultipleCondition�Payslip�PayslipAutoGenerate�
Reimbursement�ReimbursementMultipleAttachment)�component_widgetscs~eZdZdZejejdd�Zejdd�Z	e
d�ZGdd�d�Z�fdd	�Z
d
d�Z�fdd
�Zddedef�fdd�
Z�ZS)�
AllowanceFormz"
    Form for Allowance model
    F��widget�required�r$rc@�8eZdZdZejjjZdZdgZ	de
jddid�iZdS)	zAllowanceForm.Meta�3
        Meta class for additional options
        �__all__�	is_active�
one_time_date�type�date��attrsN)
�__name__�
__module__�__qualname__�__doc__�payroll�modelsr�model�fields�excluder�
DateTimeInput�widgets�r:r:�-/var/www/erp/payroll/forms/component_forms.py�Meta6�
�r<c	s�|�d�}ri}|jdurd|j�d�i}||d<t�j|i|��ttj��t	dt
dd|jd�d	d
�|jd<|jdj
j�d
di�t|j�t
j|d�|jd_
dS�N�instancer*z%Y-%m-%d�initial�employee-widget-filter�f�employee_filters.html)�filter_route_name�filter_class�filter_instance_contex_name�filter_template_pathr?zSpecific Employees)�querysetr#�label�specific_employees�if_condition�onchangezrangeToggle($(this)))�form�style)�getr*�strftime�super�__init__rr�objects�allrrr?r6r#r.�updater�StyleWidget)�self�args�kwargsr?r@��	__class__r:r;rRBs0
�����
zAllowanceForm.__init__cC�d|i}td|�}|S��S
        Render the form fields as HTML table rows with Bootstrap styling.
        rMzcommon_form.htmlr�rW�context�
table_htmlr:r:r;�as_pa�
zAllowanceForm.as_pcsTt�j|i|��}|j�d�}|j�d�}|j�d�}|j��D]6\}}t|t�rV|j	�
|d�|s?|dur?|s?t�|di��t���}|j|j
j|j�|�d�}	|	||<q t���}|�d�dkr�d|d	<|�d
�}
|�d�}|
r�|r�||
kr�t�ddi��|
s�|s�t�d
d
d���|
s�t�d
d
i��|s�t�dd
i��dSd|d
<d|d<dS)NrJ�include_active_employees�is_condition_based�This field is required��id__inrK�ranger�	if_amount�start_range�	end_range�*End range cannot be less than start range.�1This field is required when condition is "range".�rkrl)rQ�clean�data�getlistrOr6�items�
isinstancer�errors�popr�ValidationErrorrH�filter�rWrXrY�cleaned_datarJ�include_all�condition_based�
field_name�field_instancerqrkrlrZr:r;rpisZ
��

��


������zAllowanceForm.clean.�commit�returnc

��t��|�|j�d�}|j�d�}|j�d�}g}z/|jjr'|jj����|jj	rHt
|�D]\}}t|||||d�}|��|�|�q/Wnt
y_}	z
t|	�WYd}	~	nd}	~	ww|ri|jjj|�|S�N�other_conditions�other_fields�other_values��field�	condition�value)rQ�saverqrrr?�pkr�rT�deletere�	enumerater�append�	Exception�logger�add�
rWrr�r�r��multiple_conditions�indexr�r��erZr:r;r���2����zAllowanceForm.save�.)r/r0r1r2r�	CharFieldr#�AllowanceConditionalVisibility�loadrN�_�verbose_namer<rRrbrp�boolrr��
__classcell__r:r:rZr;r!-s 2r!cs~eZdZdZejejdd�Zejdd�Z	e
d�ZGdd�d�Z�fdd	�Z
�fd
d�Zdd
�Zddedef�fdd�
Z�ZS)�
DeductionFormz"
    Form for Deduction model
    Fr"r%rc@r&)	zDeductionForm.Metar'r(r)r*r+r,r-N)
r/r0r1r2r3r4rr5r6r7rr8r9r:r:r:r;r<�r=r<c	s�|�d�}ri}|jdurd|j�d�i}||d<t�j|i|��ttj��t	dt
dd|jd�d	d
�|jd<|jdj
j�d
di�t|j�t
j|d�|jd_
|j��D]\}}t|j
tj�rgt|j
_qXdSr>)rOr*rPrQrRrrrSrTrrr?r6r#r.rUrrVrsrtr�Selectr�option_template_name)rWrXrYr?r@r}r�rZr:r;rR�s:
�����
��zDeductionForm.__init__cst�j|i|��}|j�d�}|j�d�}|j�d�}|j��D]6\}}t|t�rV|j	�
|d�|s?|dur?|s?t�|di��t���}|j|j
j|j�|�d�}	|	||<q t���}|�d�dkr�d|d	<|�d
�}
|�d�}|
r�|r�t|�t|
�kr�t�ddi��|
s�|s�t�d
d
d���|
s�t�d
d
i��|s�t�dd
i��nd|d
<d|d<|j�d�du�r|j�d�dk�r|j�d�dur�t|j�d��dkr�t�dtd�i��|j�d�dur�|j�d�dkr�t�dtd�i��|j�d�du�r|j�d�dk�rt�dtd�i��|S)NrJrdrerfrgrKrirrjrkrlrmrnro�update_compensation�z You need to choose the employee.r*zThis field is required.�amount)rQrprqrrrOr6rsrtrrurvrrwrHrx�int�lenr�ryrZr:r;rp�sx
��

��


������
�
�$zDeductionForm.cleancCr\r]rr_r:r:r;rb5rczDeductionForm.as_p.rr�c

r�r�)rQr�rqrrr?r�r�rTr�rer�rr�r��printr�r�rZr:r;r�=r�zDeductionForm.saver�)r/r0r1r2rr�r#�DeductionConditionalVisibilityr�rNr�r�r<rRrprbr�rr�r�r:r:rZr;r��s"J r�cs.eZdZdZ�fdd�ZGdd�d�Z�ZS)�PayslipForm�
    Form for Payslip
    cs�t�j|i|��tjjdd�}dd�|D�|jd_|jdjj�	dddd	d
��|j
jdurFtj
��jdd�|jd
<tj
��|jd<dSdS)N�active)�contract_statuscSs"g|]
}|jjr|jj|jf�qSr:)�employee_idr)�id)�.0�contractr:r:r;�
<listcomp>^s��z(PayslipForm.__init__.<locals>.<listcomp>r��"/payroll/check-contract-start-date�#contractStartDateDiv�#payslipCreateForm�change delay:300ms)�hx-get�	hx-target�
hx-include�
hx-trigger���day�
start_date�end_date)rQrRrrSrxr6�choicesr#r.rUr?r��datetimer,�today�replacer@)rWrXrY�active_contractsrZr:r;rR[s ����zPayslipForm.__init__c@sReZdZdZejjjZgd�ZdgZ	e
jdddddd	�d
�e
jddid
�d�Zd
S)zPayslipForm.Metar')r�r�r�r)r,r�r�r�r�)r+r�r�r�r�r-r+�r�r�N)
r/r0r1r2r3r4rr5r6r7r�	DateInputr9r:r:r:r;r<os$
��	��
�r<)r/r0r1r2rRr<r�r:r:rZr;r�Vsr�cs�eZdZdZejddd�Zeej	�
�ededdd�d	dd
�Z
ejejddid
�d�Zejejddid
�d�Z�fdd�Z�fdd�ZGdd�d�Z�ZS)�GeneratePayslipFormr�z
Batch nameT)rIr$rArBrC)rDrErFrGr)rHr#rIr$r+r,r-�r#csnt���}|�d�}|�d�}tj��}||krt�ddi��||kr*t�ddi��||kr5t�ddi��|S)Nr�r�z=The end date must be greater than or equal to the start date.z'The start date cannot be in the future.z%The end date cannot be in the future.)rQrprOr�r,r�rrw)rWrzr�r�r�rZr:r;rp�s$



����zGeneratePayslipForm.cleancs�t�j|i|��tjjdddd�|jd_|jdjj�	dt
��d��|jdjj�	d	d
i�|jdjj�	d	d
i�|jdjj�	d	d
i�tj
��jd
d�|jd<tj
��|jd<dS)NTFr�)r)�contract_set__isnull�contract_set__contract_statusr�zoh-select oh-select-2)�classr�r�r��oh-input w-100�
group_namer�r�r�)rQrRrrSrxr6rHr#r.rU�uuid�uuid4r�r,r�r�r@�rWrXrYrZr:r;rR�s��zGeneratePayslipForm.__init__c@s2eZdZdZejddid�ejddid�d�ZdS)zGeneratePayslipForm.Metar'r+r,r-r�N)r/r0r1r2rr�r9r:r:r:r;r<�s

�r<)r/r0r1r2rr�r�rrrS�nonerrr��	DateFieldr�r�r�rprRr<r�r:r:rZr;r��s,���r�c@�eZdZdZGdd�d�ZdS)�PayrollSettingsFormz(
    Form for PayrollSettings model
    c@seZdZdZejZdZdS)zPayrollSettingsForm.Metar'r(N)r/r0r1r2r4�PayrollSettingsr5r6r:r:r:r;r<�sr<N�r/r0r1r2r<r:r:r:r;r���r�r�rr��Batchr�z
Start Dater�zEnd Date�
contract_wagez
Contract Wage�	basic_payz	Basic Pay�	gross_payz	Gross Pay�	deductionr�net_payzNet Pay�status�Status�-employee_id__employee_bank_details__bank_namez	Bank Name�*employee_id__employee_bank_details__branch�Branch�2employee_id__employee_bank_details__account_numberzAccount Number�3employee_id__employee_bank_details__any_other_code1zBank Code #1�3employee_id__employee_bank_details__any_other_code2zBank Code #2�+employee_id__employee_bank_details__country�Country�)employee_id__employee_bank_details__state�State�(employee_id__employee_bank_details__city�Cityc@s"eZdZejeejgd�d�ZdS)�PayslipExportColumnForm)r�r�r�r�r�r�r�r��r�r#r@N)r/r0r1r�MultipleChoiceField�
excel_columns�CheckboxSelectMultiple�selected_fieldsr:r:r:r;r��s
�r�)r��contract_documentr)�noter��
created_atc@s:eZdZej��Zdd�eD�Zej	eej
gd�d�ZdS)�ContractExportFieldFormcCs,g|]}t|d�r|jtvr|j|jf�qS)r�)�hasattr�name�exclude_fieldsr��r�r�r:r:r;r�s�

�z"ContractExportFieldForm.<listcomp>)�
contract_namer��contract_start_date�contract_end_date�	wage_type�wage�
filing_statusr�r�N)r/r0r1r�_meta�
get_fields�model_fields�
field_choicesrr�r�r�r:r:r:r;r�s
�
�r�csdeZdZdZejdd�Zeje��d�Z	ej
de��d�Zej
dd�Zdd
d�Z�fdd
�Z�ZS)�	BonusForm�
    Bonus Creating Form
    �d)�
max_lengthr�r)rIr#�Amount�rITcCst|jd}|jd}|jd}|jd}t�}||_||_d|_||_d|_|��d|_|j	�
|g�|��|S)N�titler,r�r�TF)rzrr	r*�only_show_under_employeer��is_fixedr�rdrJ�set)rWrr	r,r�r��bonusr:r:r;r�0s



zBonusForm.savecsVt�j|i|��|j��D]
\}}|jj�ddi�qtjddd�d�|jd_dS)Nr�r�r,�r+r�r-)	rQrRr6rsr#r.rUrr�)rWrXrYr}r�rZr:r;rRCs�zBonusForm.__init__)T)r/r0r1r2rr�r	r�r�r,�IntegerField�HiddenInputr��DecimalFieldr�r�rRr�r:r:rZr;r&s
rcseZdZ�fdd�Z�ZS)�PayslipAllowanceFormcs&t�j|i|��t��|jd_dS)Nr,)rQrRrrr6r#r�rZr:r;rRMszPayslipAllowanceForm.__init__)r/r0r1rRr�r:r:rZr;rLsrc@s.eZdZdZed�ZGdd�d�Zdd�ZdS)�PayslipDeductionFormrrc@s$eZdZeZgd�Zde��iZdS)zPayslipDeductionForm.Meta)r	r*r��is_tax�	is_pretaxrr��based_on�rate�
employer_rate�
has_max_limit�maximum_amountr*N)	r/r0r1rr5r6rrr9r:r:r:r;r<Ys
�r<cCr\)r^rMzone_time_deduction.htmlrr_r:r:r;rborczPayslipDeductionForm.as_pN)r/r0r1r2r�r�r<rbr:r:r:r;rRs
rcsFeZdZdZdZGdd�d�Zdd�Z�fdd�Z�fd	d
�Z�Z	S)�LoanAccountFormz
    LoanAccountForm
    zLoan / Advanced Sarlaryc@s>eZdZeZdZddgZejddid�ejddid�d�Z	dS)	zLoanAccountForm.Metar(r)�settled_dater+r,r-)�
provided_date�installment_start_dateN)
r/r0r1rr5r6r7rr8r9r:r:r:r;r<s
�r<cCr\r]rr_r:r:r;rb�rczLoanAccountForm.as_pcs�t�j|i|��ttj���|jd<ttj���|jd<|jjrY|jj	|_
ddg}tjj
t|jjjddd��d���rB|gd�}t|jj�|jd<|D]
}||jvrX|j|=qMdSdS)	Nrrr�r�T)�flat)�installment_ids__in)�loan_amount�installments�installment_amount)rQrR�strr�r,r�r@r?r�r	r�rrSrx�list�
deduction_ids�values_list�existsrr6)rWrXrY�fields_to_excluder�rZr:r;rR�s*
���
��zLoanAccountForm.__init__csbt�j|i|��}|jjs|�d�|�d�krt�d��|�d�dkr/|�d�dkr/t�d��|S)NrrzGInstallment start date should be greater than or equal to provided dater"rz+Installments needs to be a positive integer)rQrpr?r�rOrrw)rWrXrYrzrZr:r;rp�s����zLoanAccountForm.clean)
r/r0r1r2r�r<rbrRrpr�r:r:rZr;rxs	rcs$eZdZed�Z�fdd�Z�ZS)�
AssetFineFormz
Asset Finecsvt�j|i|��td��jd_td��jd_ddg}|D]}|�jvr*�j|=qgd�}�fdd	�|D��_dS)
NzFine Amountr!z	Fine Daterr�r+)r	r!r�descriptionr"rr#�settledcs"i|]
}|�jvr|�j|�qSr:)r6r��rWr:r;�
<dictcomp>�sz*AssetFineForm.__init__.<locals>.<dictcomp>)rQrRr�r6rI)rWrXrYr)r��field_orderrZr-r;rR�s�
�
�zAssetFineForm.__init__)r/r0r1r�r�rRr�r:r:rZr;r*�sr*c@seZdZdZdS)�MultipleFileInputTN)r/r0r1�allow_multiple_selectedr:r:r:r;r0�sr0cs*eZdZ�fdd�Zd�fdd�	Z�ZS)�MultipleFileFieldcs$|�dt��t�j|i|��dS)Nr#)�
setdefaultr0rQrRr�rZr:r;rR�szMultipleFileField.__init__NcsHt�j�t|ttf�r��fdd�|D�}n�|��g}|r"|dSdS)Ncsg|]}�|���qSr:r:)r��d�r@�single_file_cleanr:r;r��sz+MultipleFileField.clean.<locals>.<listcomp>r)rQrprtr%�tuple)rWrqr@�resultrZr5r;rp�s
zMultipleFileField.clean)N)r/r0r1rRrpr�r:r:rZr;r2�sr2cspeZdZdZdZGdd�d�Ze�d�rdd�Z�fdd	�Z	d
d�Z
�fdd
�Zddede
f�fdd�
Z�ZS)�ReimbursementFormz
    ReimbursementForm
    zReimbursement / Encashmentc@seZdZeZdZdgZdS)zReimbursementForm.Metar(r)N)r/r0r1rr5r6r7r:r:r:r;r<�s
r<�leavecCs"tddd�}|jj|ddd�}|S)Nr:�	leavetype��	app_labelr5r�T)�%employee_available_leave__employee_id�/employee_available_leave__total_leave_days__gte�
is_encashable)rrSrx)rW�employee�	LeaveType�leavesr:r:r;�get_encashable_leaves�s�z'ReimbursementForm.get_encashable_leavescsNt�j|i|��g}|jjsttj���|jd<t	t
jdd�}|r0|jjdur,|jj
n|jj}|j|jd<t�d�ratddd�}|�|�}|jj||d�|_||jd_d|jd_d|jd_|jd	jj}d
|d<|jd	jj�|�|jdjj}	d|	d<|jdjj�|	�tjd
dd�d�|jd_tdd�|jd<d|jdjjd<d}
|j r�|jjs�|j d	}
n	|jdur�|jj!}
|j�"d�s�|�#d�|
dkr�|jjr�|gd�}n/|jjr�|
dks�|j �$d	�dkr�|gd�}n|jjr�|
dk�s|j �$d	�dk�r
|gd�}|jj�r|d	dg}|D]
}||jv�r#|j|=�qdS)N�allowance_on�requestr�r:�availableleaver<)�leave_type_id__inr��
leave_type_idr+ztoggleReimbursmentType($(this))rLzgetAssignedLeave($(this))r,r�rr-�Attachementsr�
attachmentz.jpg, .jpeg, .png, .pdf�acceptzpayroll.add_reimbursement�
reimbursement)rI�
cfd_to_encash�ad_to_encash�bonus_to_encash�leave_encashment)rKr�rP�bonus_encashment)rKr�rIrNrO)%rQrRr?r�r$r�r,r�r@�getattrr�_thread_locals�user�employee_getr�r�r�is_installedrrDrSrx�assigned_leavesr6rH�empty_labelr#r.rUrr�r2rqr+�has_permr�rO)rWrXrYr�rFrA�AvailableLeaverX�	type_attr�
employee_attrr+r�rZr:r;rRsv��
�
��

��

��zReimbursementForm.__init__cCr\r]rr_r:r:r;rbWrczReimbursementForm.as_pc
s�t���}ttjdd�}|jjr|jj}|jj}n|j	j
}|d}tjj
|d���}|dkrR|jjr7|jj}n|d}|j|krGt�ddi��|dkrRt�ddi��|d	kr�|jjrg|jj}|jj}|jj}	n|d
}|d}|d}	|�|�}
|dur�t�d
d
i��||
vr�t�d
di��tddd�}|jj
||d���}|dkr�t�dtd�i��|	dkr�t�dtd�i��||jkr�t�dtd�i��|	|jkr�t�dtd�i��dSdS)NrFr+)r�rRrPz!Not enough bonus points to redeemrz+Points must be greater than zero to redeem.rQrIrNrOrfz!This leave type is not encashabler:rGr<)rIr�zValue can't be negative.z&Not enough carryforward days to redeemz#Not enough available days to redeem)rQrprSrrTr?r�r�r+rUrVr
rSrx�firstrP�pointsrrwrIrNrOrDrr��carryforward_days�available_days)
rWrzrFr�r+�available_pointsrPrIrNrO�encashable_leavesr[�available_leaverZr:r;rp_sz



��

����
�
�

�

��#zReimbursementForm.clean.rr�c
s*|jj}g}g}d}|j�d�r4|j�d�}|d|j_g}|D]}t�}||_|��|�|j�q!t	��|�}|j
j|�tj
j|jdd�}z5|r{tj||jjjd|�d�d|�d�d|�d�d	|�d�d
|�d�dd|j��d
�	W||fSW||fSty�}	z	WYd}	~	||fSd}	~	ww)NrKrr�)r�z4You have a new reimbursement request to approve for �.ufلديك طلب استرداد نفقات جديد يتعين عليك الموافقة عليه لـ uBSie haben einen neuen Rückerstattungsantrag zur Genehmigung für z:Tienes una nueva solicitud de reembolso para aprobar para uBVous avez une nouvelle demande de remboursement à approuver pour �informationz/payroll/view-reimbursement?id=)�	recipient�verb�verb_ar�verb_de�verb_es�verb_fr�icon�redirect)r?r��filesrr�
attachemntrrKr�r�rQ�other_attachmentsr�rrSrOr@r�send�employee_work_info�reporting_manager_id�employee_user_idr�r�)
rWr�is_newrp�multiple_attachment_ids�attachemnts�
file_instancer?�empr�rZr:r;r��sJ






���
��zReimbursementForm.saver�)r/r0r1r2r�r<rrWrDrRrbrpr�rr�r�r:r:rZr;r9�s
	W Br9c@r�)�
ConditionFormz!
    Multiple condition form
    c@�eZdZeZgd�ZdS)zConditionForm.Metar�N)r/r0r1rr5r6r:r:r:r;r<��r<Nr�r:r:r:r;r{�r�r{c@s"eZdZGdd�d�Zdd�ZdS)�PayslipAutoGenerateFormc@r|)zPayslipAutoGenerateForm.Meta)�generate_day�
company_id�
auto_generateN)r/r0r1rr5r6r:r:r:r;r<�r}r<cCr\r]rr_r:r:r;rb�rczPayslipAutoGenerateForm.as_pN)r/r0r1r<rbr:r:r:r;r~�sr~)Qr2r��loggingr��typingr�djangor�django.appsr�django.template.loaderr�django.utilsr�django.utils.translationrr��payroll.models.modelsr3�
base.formsr	r
�base.methodsr�employee.filtersr�employee.modelsr
r�horillar�horilla.methodsr�horilla_widgets.formsrr�2horilla_widgets.widgets.horilla_multi_select_fieldr�&horilla_widgets.widgets.select_widgetsr�notifications.signalsr�payroll.modelsrr4rrrrrrrrr�payroll.widgetsr r#�	getLoggerr/r�r!r�r�r�r�r�r�r�r�rrrrr*�ClearableFileInputr0�	FileFieldr2r9r{r~r:r:r:r;�<module>s�,
#7J

















�&&@`

Youez - 2016 - github.com/yon3zu
LinuXploit