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/views/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

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

hͦh�@s�dZddlZddlmZddlmZmZmZddlmZddl	m
Z
ddlZddl
Z
ddlmZddlmZmZdd	lmZmZmZdd
lmZmZmZddlmZddlmZdd
lm Z ddl!m"Z#ddl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ddl,m-Z-ddl.m/Z/m0Z0ddl1m2Z2m3Z3m4Z4m5Z5ddl6m7Z7ddl8m9Z9ddl:m;Z;ddl<m=Z=ddl>m?Z?m@Z@mAZAddlBmCZCmDZDmEZEddlFmGZGmHZHddlImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQddlRmSZSe#d�e#d�e#d�e#d�d �ZTd!d"�ZUe3e5d#�d$d%���ZVe3e5d&�d'd(���ZWe3e2e5d&�d)d*����ZXe3e5d&�d+d,���ZYe3e5d&�d-d.���ZZe3e2e5d/�d0d1����Z[e3e5d2�d3d4���Z\e3e4d2eJ�d5d6���Z]e3e2e5d2�d7d8����Z^e3e5d9�d:d;���Z_e3e5d<�d=d>���Z`d?d@�Zae3e5d<�dAdB���Zbe3dCdD��Zce3e5dE�dFdG���Zde3e5dH�dIdJ���Zee3e5d#�dKdL���Zfe3e5d2�dMdN���Zge3dOdP��ZhdQdR�Zie3dSdT��ZjdUdV�ZkdWdX�Zle3e5dH�dYdZ���Zme3e5d<�d[d\���Zne3e5d#�d]d^���Zoe3e5d/�d_d`���Zpdadb�Zqd�ddde�Zrdfdg�Zse3e5d2�dhdi���Zte3djdk��Zue3dldm��Zve3dndo��Zwe3dpdq��Zxe3e2drds���Zye3dtdu��Zze3dvdw��Z{e3e5dx�dydz���Z|e3e5d{�d|d}���Z}e3e2e5d~�d�dd�����Z~e3e5d~�d�d����Ze3e2e5d��d�d�����Z�dS)�zM
views.py

This module is used to define the method for the path in the urls
�N)�defaultdict)�date�datetime�	timedelta)�groupby)�parse_qs)�messages)�ProtectedError�Q)�HttpResponse�HttpResponseRedirect�JsonResponse)�get_object_or_404�redirect�render)�render_to_string)�reverse)�timezone)�gettext_lazy)�closest_numbers�
eval_validate�export_data�generate_colors�generate_pdf�get_key_instances�sortby)�Company)�Employee�EmployeeWorkInformation)�hx_request_required�login_required�owner_can_enter�permission_required)�group_by_queryset)�HORILLA_DATE_FORMATS)�notify)�get_active_employees)�ContractFilter�ContractReGroup�
PayslipFilter)�ContractExportFieldForm�PayrollSettingsForm�PayslipAutoGenerateForm)�
paginator_qry�save_payslip)�Contract�FilingStatus�PayrollGeneralSetting�Payslip�PayslipAutoGenerate�
Reimbursement�ReimbursementFile�ReimbursementrequestComment)�PayrollSettings�DraftzReview Ongoing�	Confirmed�Paid)�draft�review_ongoing�	confirmed�paidcCs"td�}td�}||d�}t|�S)NzName of Employees�Amount)�scale_x_text�scale_y_text)�_r
)�requestr@rA�response�rE�#/var/www/erp/payroll/views/views.py�get_language_codeJs
rGzpayroll.add_contractcCsbddlm}|�}|jdkr)||j|j�}|��r)|��t�|t	d��t
t�St|dd|i�S)z
    Contract create view
    r��ContractForm�POSTzContract Created�payroll/common/form.html�form)
�payroll.forms.formsrI�methodrJ�FILES�is_valid�saver�successrBr�
contract_viewr)rCrIrLrErErF�contract_createQs
rTzpayroll.change_contractcKs�ddlm}tjj|d���}|st�|td��t	t
�S||d�}|jdkrD||j|j
|d�}|��rD|��t�|td��t	t
�St|dd	|i�S)
a3
    Update an existing contract.

    Args:
        request: The HTTP request object.
        contract_id: The ID of the contract to update.

    Returns:
        If the request method is POST and the form is valid, redirects to the contract view.
        Otherwise, renders the contract update form.

    rrH��idz The contract could not be found.��instancerJzContract updatedrKrL)rMrIr/�objects�filter�firstr�inforBrrSrNrJrOrPrQrRr)rC�contract_id�kwargsrI�contract�
contract_formrErErF�contract_updatecs$

��racCstddlm}|j��}|jdkr�tjj|d�}|j�d�r�|j�d�}|t	|j
���vrud}|dvrctjjd	|j
d
���}tjjd|j
d
���}|d	krN|sT|dkrc|rcd}t�|td
��||j
��|rt||_|��t�|td��nt�|td��td|���S||j|j|d�}	|	��r�|	��t�|td��td�S|	j��D]
}
|
D]}t�||�q�q�td�SdS)NrrHrJrU�view�statusT��activer;re��contract_status�employee_idr;F�$An {} contract already exists for {}�2The contract status has been updated successfully.z2You selected the wrong option for contract status.�/payroll/contract-filter?rWzContract status updatedz3<script>$('#reloadMessagesButton').click()</script>)rMrI�GET�	urlencoderNr/rY�getrJ�dict�CONTRACT_STATUS_CHOICES�keysrZrh�existsrr\rB�formatrgrQrR�warningrrOrP�errors�values�errorr)rCr]rI�
previous_datar_rcrQ�active_contract�draft_contractr`rurwrErErF�contract_status_update�sd

������������r{c	Cs�|j�d�}t|j�d��}tj��}|j|d�}|D]H}d}|dvrR|jd|jd���}|jd|jd���}|dkr=|sC|dkrR|rRd	}t	�
|td
��||j��|rc||_
|��t	�|td��qtd�S)
Nrc�ids��id__inTrdrerfr;FrirjrR)rJrnrr/rY�allrZrhrrrr\rBrsrgrQrRr)	rCrcr|�
all_contracts�	contractsr_rQryrzrErErF�bulk_contract_status_update�sD
��������r�c
Cs�|jdkrItt|d�}|j�d�}z|rtjjt|�d�nd}||_t	�
|td��Wntt
tjfy@t	�|td��Ynw|��tt�SdS)NrJrU�
filing_statusz9The employee filing status has been updated successfully.z0You selected the wrong option for filing status.)rNrr/rJrnr0rY�intr�rrRrB�
ValueError�
OverflowError�DoesNotExistrtrQr�contract_filter)rCr]r_�filing_status_idr�rErErF�update_contract_filing_status�s(
������r�zpayroll.delete_contractcCs0zltjj|d���t�|td��|j�d�}d|vrb|j	�d�}r]|j	�
�}|�dd�|��}t
�|�}t||�\}}||vrH|�|�d|�d�}	d|�d	|��}
t|	|
�WStd
�WStd|j	�����WStjy~t�|td��Ynty�t�|td
��Ynwt|j�dd��S)z�
    Delete a contract.

    Args:
        contract_id: The ID of the contract to delete.

    Returns:
        Redirects to the contract view after successfully deleting the contract.

    rUzContract deleted�/zdelete-contract-modal�
instances_idsNz/payroll/single-contract-view/�?z&instances_ids=�*<script>window.location.reload();</script>rk�Contract not found.z You cannot delete this contract.�HTTP_REFERER)r/rYrn�deleterrRrB�path�splitrl�copy�poprm�json�loadsr�removerrr�rwr	r�META)rCr]�request_pathr��get_datarx�instances_list�previous_instance�
next_instance�urls�paramsrErErF�contract_delete�s4

�

�r�zpayroll.view_contractcCsjtj��}|��rd}nd}t||j�d��}t�dd�|j	D��}t
|j�}|||tjd�}t
|||�S)z
    Contract view method
    z#payroll/contract/contract_view.htmlz$payroll/contract/contract_empty.html�pagecS�g|]}|j�qSrErU��.0rXrErErF�
<listcomp>2�z!contract_view.<locals>.<listcomp>)r��f�contract_ids�	gp_fields)r/rYrrrr-rlrnr��dumps�object_listr'r(�fieldsr)rCr��template�contract_ids_json�filter_form�contextrErErFrS$s

�rSc
Cs�|j��}|�dd�|��}|j�dd�}|j�dd��d�}d|vs(d|vr*d	nd
}t�|�}||||d�}|j�d�}	|	rUt	�
|	�}
t|
|�\}}|�|||	d��t
|d
|�S)z.
    Renders a single contract view page.
    r�N�	dashboard�r�r�z
employee-viewzemployee-profilez#personal_targetz#objectDetailsModalTarget)r_r��delete_hx_target�pd)�previous�nextr�z*payroll/contract/contract_single_view.html)rlr�r�rmrnr�r�r/�findr�r�r�updater)
rCr]r�rxr��
HTTP_REFERERSr�r_r�r�r��previous_id�next_idrErErF�view_single_contract>s4
��
�
��r�c	CsF|j��}t|j�}d}|j}|j�d�}|dkrL|durLt|||j�d�d�}dd�|D�}g}|D]}|jD]}	|�|	j�q8q3t	�
t|��}
d}nt||d	�}t
||j�d��}t	�
d
d�|jD��}
t|�}tt|�dd�|��D�}|D]}
|�|
�qzd|vr�|d}t|�d
kr�|dg|d<t||||||
|d��S)z�
    Filter contracts based on the provided query parameters.

    Args:
        request: The HTTP request object containing the query parameters.

    Returns:
        Renders the contract list template with the filtered contracts.

    z#payroll/contract/contract_list.html�fieldr�Nr�cSsg|]}|d�qS��listrE)r��entryrErErFr�~sz#contract_filter.<locals>.<listcomp>zpayroll/contract/group_by.html�orderbycSr�rErUr�rErErFr��r�cSsg|]\}}|dgkr|�qS)�unknownrE)r��key�valuerErErFr��srg����)r�r��filter_dictr�r�)rlrmr'�qsrnr#r��appendrVr�r�r�rr-rrr/�itemsr��lenr)rC�query_string�contracts_filterr�r�r��list_values�id_listr�rXr��	data_dict�keys_to_remover��status_listrErErFr�hsN


��
��r�zpayroll.view_payrollsettingscCs�tj��}t|d�}|j�d�}|dks|stj��}ntjj|d�}|j	dkrHt|j
|d�}|��rH|��t
�|td��t|j�dd��St|d	|||d
��S)z9
    This method is used to render settings template
    rW�selected_companyrrUrJzPayroll settings updated.r�r�z&payroll/settings/payroll_settings.html)�
currency_form�	companies�selected_company_id)r7rYr[r+�sessionrnrrrZrNrJrPrQrrRrBrr�r)rCrXr�r�r�rErErF�settings�s(


��r�zpayroll.change_payslipcCs�|j�d�}|j�d�}tjj|d���}|r'||_|��t�	|t
d��nt�|t
d��|r;ddlm
}t|�S|j}|j|d<||d	<|��|d
<|jj|d
d<|j|d
d	<||d<t|d|�S)
�G
    This method is used to update the payslip confirmation status
    rcrbrUzPayslip status updatedzPayslip not foundr���filter_payslip�employee�payslip�	json_datarXz/payroll/payslip/individual_payslip_summery.html)rJrnr2rYrZr[rcrQrrRrBrw�component_viewsr�r�
pay_head_datarhr�rVr)rC�
payslip_idrcrbr�r��datarErErF�update_payslip_status�s&
r�cCshddd�}|jdkr0|jd}t�|�}|jd}tjj|d�}|j|d�d|���d	�d�}t	|�S)
r�rRzPayslip status updated.��type�messagerJr|rcr}�rcz Payslips status updated.)
rNrJr�r�r2rYrZr��countr
)rCr��ids_jsonr|rc�slipsrErErF�update_payslip_status_no_id�s




�r�cCs�|jd}t�|�}|jd}|D]`}t�|�}|d}tjj|d�}||d|dd�}tjjdi|����}	|	dur>|	nt�}
||
_	|d|
_
|d|
_||
_|d	|
_
|d
|
_|d|
_|d|
_|d
|
_||
_|
��qtddd��S)zr
    This method is used to update payslip status when generating payslip through
    generate payslip method
    r�rcr�rU�
start_date�end_date)rhr�r�N�	basic_pay�
contract_wage�	gross_pay�total_deductions�net_payrRzPayslips status updatedr�rE)rlr�r�rrYrnr2rZr[rhr�r�rcr�r�r��	deductionr�r�rQr
)rCr��pay_datarc�
json_entryr��emp_idr��payslip_kwargs�filtered_instancerXrErErF�bulk_update_payslip_status�s2



�







r�cCs�ddlm}tjj|d����r@tjj|d�}tjjdd���}|j	�
d�s.|jj|j	k�r<|j	}|j
}tjj|d�}|��r]|D]}|j}	qAtjj|	d�}
|
��}|rZ|jrZ|jnd	}nd	}|j}|d
}
|d}t�|
d���}t�|d���}|�d
�}|�d
�}t��D]
\}}||kr�|�|�}q�t��D]
\}}||kr�|�|�}q�||d<||d<||d<||d<|j|d<||d<|��|d<|jj|dd<|j|dd<||d<tj��j|d<g|d<|d|d|d|d|d|dfD]	}|d�|�q�|d��|d<t|d|d�t|d|d�|d <|��|d!<|� ��r-d"nd#|d$<||d%<t!|d&|d'�St"|�St!|d(�S))Nr�r�rUT��hq�payroll.view_payslip�rh��company�MMM. D, YYYYr�r��%Y-%m-%d�	%B %d, %Y�month_start_name�month_end_name�formatted_start_date�formatted_end_dater�r�r�rX�currency�all_deductions�basic_pay_deductions�gross_pay_deductions�pretax_deductions�post_tax_deductions�tax_deductions�net_deductions�
allowances�all_allowances�zipped_data�host�https�http�protocolr�payroll/payslip/test_pdf.html�r��405.html)#r�r�r2rYrZrrrnrr[�user�has_permrh�employee_user_id�employee_getr�
company_id�date_formatr�r�strptimer�strftimer$r�r�rVr7�currency_symbol�extend�equalize_lists_length�zip�get_host�	is_securerr)rCr�r�r�rrr�r\r��employee_company�company_name�emp_companyr�start_date_str�end_date_strr�r�rr�format_name�
format_stringrr�deduction_listrErErF�view_payslip_pdfs�
����


�
�
�
r0r�cKs�tjj|d���}|durE|j�d�s|jj|jkrE|j}|j|d<||d<|�	�|d<|jj
|dd<|j
|dd<||d<t|d|�St|d	�S)
z8
    This method is used to view the saved payslips
    rUNr�r�r�r�rXz'payroll/payslip/individual_payslip.htmlz404.html)r2rYrZr[rrrhrr�r�rVr)rCr�r^r�r�rErErF�view_created_payslipqs
�

r1zpayroll.delete_payslipcCs�ddlm}ztjj|d���t�|td��Wn"tj	y+t�
|td��Ynty;t�
|td��Ynwtj��sEt
d�St|�S)zw
    This method is used to delete payslip instances
    Args:
        payslip_id (int): Payslip model instance id
    r�r�rUzPayslip deleted�Payslip not found.zSomething went wrong�)<script>window.location.reload()</script>)r�r�r2rYrnr�rrRrBr�rwr	rZrr)rCr�r�rErErF�delete_payslip�s�
r4c	Cs�|jd}tjj|d���}|jdur|jjnd|jdur!|jjnd|jdur+|jjnd|j	dur5|j	jnd|j
dur?|j
jnd|j|jrH|jnd|j
rO|j
ndd�}t|�S)zb
    This is an ajax method to return json response to auto fill the contract
    form fields
    rhr�Nr�)�
department�job_position�job_role�shift�	work_type�wage�contract_start_date�contract_end_date)rlrrYrZr[�
department_idrV�job_position_id�job_role_id�shift_id�work_type_id�basic_salary�date_joiningr<r
)rCrh�	work_info�
response_datarErErF�contract_info_initial�s

��rFcCshddlm}tjjdd�}tjjdd�}tjjdd�}tjjdd�}|�}|||||d�}t|d	|d
�S)z#
    Dashboard rendering views
    r)�DashboardExportr>r�r=r<r;)r>�postedr<r;�export_formzpayroll/dashboard.htmlr)rMrGr2rYrZr)rCrGr>rHr<r;rIr�rErErF�view_payroll_dashboard�s�rJcs�|j�d�}|�d�d}|�d�d}g}|j�d�dk}|r�|jdkr�tj�t|d�t|d	�@�}g}|D]}|�	|j
�q7gd
�}	ttj|	�D]\}
}|�	|
dg|d��qJdd
�|D�}t
t|��}tdd���|D]}
|j|
d�}|D]}�|j|
t|jd�7<qyqo|D]}|d���fdd
�|D�|d<q�g}|D]}|�	|j�d|j���q�t|tj�D]\}}
|d|
dkr�|
d|d<q�t
tj�ddd��}|||td�d�}t|�SdSdS)z/
    payroll dashboard employee chart data
    �period�-rr��X-Requested-With�XMLHttpRequestrl��start_date__month��start_date__year)zrgba(255, 99, 132, 1)zrgba(255, 206, 86, 1)zrgba(54, 162, 235, 1)zrgba(75, 242, 182, 1)��labelr��backgroundColorcSr�rEr�)r�r�rErErFr��r�z,dashboard_employee_chart.<locals>.<listcomp>cSstt�S�N)r�floatrErErErF�<lambda>��z*dashboard_employee_chart.<locals>.<lambda>r��rTcsg|]}��|�qSrErE)r�rT��
dataset_label�total_pay_with_statusrErFr�	s�r�� rV�employee_first_name�employee_last_name�%No payslips generated for this month.)�dataset�labels�	employeesr�N)rlrnr��headersrNr2rYrZr
r�rhr%�status_choicesr��setrrc�roundr�r_r`r�values_listrBr
)rCr�year�monthrb�is_ajax�
employee_listrcr��colors�choice�colorrdrT�payslipsr�r��employee_labelr��list_of_employeesrDrEr[rF�dashboard_employee_chart�sp���
���������rtcCs||j�d�}|�d�d}|�d�d}g}tj�t|d�t|d�@�}d}|D]}||j7}q(t|�t	|d�d�}t
|�S)	z0
    payroll dashboard payslip details data
    rKrLrr�rOrQrZ)�	no_of_emp�total_amount)rlrnr�r2rYrZr
r�r�rhr
)rCrrjrkrmrvr�rDrErErF�payslip_details%s��rwcCst|j�d�}|�d�d}|�d�d}dggd�d�g}g}g}|j�d�d	k}|r�|jd
kr�tj�t|d�t|d�@�}|D]}	|�	|	j
jjj
�q@tt|��}|D]
}
|�	|
dd
��qT|D]}	|	j
jjj
}|D]}
|
d|kr|
dt|	jd�7<qkqatt|��}dg|d�g}t||�D]\}
}
|
|
dkr�|dd�	|
d�q�|||td�d�}t|�SdSdS)z1
    payroll dashboard department chart data
    rKrLrr�r�)z#8de5b3z#f0a8a6z#8ed1f7z#f8e08ez#c2c7ccrSrMrNrlrOrQ)r5�amountr5rxrZr�ra)rbrc�department_totalr�N)rlrnr�rerNr2rYrZr
r�rh�employee_work_infor=r5r�rgrhr�rr�r%rBr
)rCrrjrkrbr5ryrlrmr��depart�employee_departmentrn�depart_totalrDrErErF�dashboard_department_chart<s^���
�
��������r~cCs�|j�d�}|�d�d}|�d�d}|j�d�dkr7|dkr(d}t|�d}tjjt|�dt|�d�}ntjjt|�t|�d�}g}|D]}|�|j|j	d	��qG|t
d
�d�}t|�S)z8
    payroll dashboard contract ending details data
    rKrLr�r�initialLoad�true�12)�contract_end_date__month�contract_end_date__year)�
contract_namer]zNo contracts ending this month)�contract_endr�)rlrnr�r�r/rYrZr�r�rVrBr
)rCrrkrjr��ending_contractr_rDrErErF�contract_ending~s,����r�c9CsN
|j�d�}|j�d�}|j�d�}|j�d�}|j�d�r$|j�d�n
td�djdd	d
�}g}d}g}g}	g}
g}g}tj��}
|rJ|
j|d�}
|rR|
j|d
�}
|rZ|
j|d�}
|rb|
j|d�}
|D]�}tjj|d�}|rwtjj||d�}|r�tjj||d�}|r�|j|d
�}|jdd	d
�}g}|D]c}|dD]}|�d�r�|�	|�q�|dD]}|�d�r�|�	|�q�|dD]}|�d�r�|�	|�q�|dD]}|�d�r�|�	|�q�|dD]}|�d�r�|�	|�q�|dD]}|�	|�q�q�|j
dd�d�dd�t|d d�d�D�}|��D]3\}}t
d!d"�|D��}zt
d#d"�|D��}Wnd}Y|dk�rC|�	tjj|d$�||d%���qqd|jj}|
�r�|
D]�}tjj|d&���}|�rv|j}tjj|d'���}|�rs|j�rs|jnd(}nd(}t|j�}t|j�} t�|d)���}t�| d)���}t��D]\}!}"|!|k�r�|�|"�}#�q�t��D]\}!}"|!|k�r�|�|"�}$�q�|�	|jj�d*|jj ��|#|$t!|j"d+�t!|j#d+�t!|j$|j"d+�t!|j$d+�t!|j%d+�t&�|j'�d,�	��qOn|�	d-d-d-d-d-d-d-d-d-d,�	�|
D]}|�	|jj(j)j*��qt+t,|��}|D]}%|	�	|%dd.���q|
D]"}|jj(j)j*}&|	D]}%|%d/|&k�rC|%d0t!|j%d+�7<�q.�q$|
�sR|	�	d-dd.��t-j��}'|�sp|�sp|'�t.t�/�j0d1�t.t�/�j1d2�@�}'|�ry|'j|d3�}'|�r�|�s�|'�t.|d4�t.t�/�d3�@�}'n|'j|d4�}'d5gi}
|'D]}(|
d5�	|(j2��q�|'�s�|
d5�	d-�|
D]}|t!|j%d+�7}�q�t3|
�|gd6�}t4�5|�})t4�5|	�}*t4�5|
�}+t4�5|�},t4�5|�}-|)j6d7d8d9d:d;d<d=d>d?�d@�})|+j6d5|�r|�rdA|�dB|��ndCid@�}+|,j6dDdEd6�d@�},|-j6d5|�r|�rdF|�dB|��ndCid@�}-t7dGdH�}.dI|.dJ<t4j8|.dKdL�}/|)j9|/dMdNdOdP�|*j9|/dMdNt3|)�dOdOdP�|+j9|/dMdNt3|)�dOt3|*�dQdP�|-j9|/dMdNt3|)�dOt3|*�t3|+�dRdP�|,j9|/dMdNt3|)�dOt3|*�t3|+�t3|-�dSdP�|/j:}0|/j;dM}1t<t3|)j=�t3|*j=�t3|+j=�t3|,j=�t3|-j=��}2|0�>d	dTdUdVdWdXdY��}3|1�?ddZ�|1�@ddd|2d[|�r�|�r�d\|�dB|��nd]|3�|0�>dWd	d	d^��}4tA|)j=jB�D]2\}5}6|1�CdO|5|6|4�tDd_|5�}7t<t3|6�d+t3|)|6�Et��<��d+�}8|1�F|7�d`|7��|8��q�tA|*j=jB�D]8\}5}6|1�Ct3|)�dOdO|5|6|4�tDd_|5�}7t<t3|6�d+t3|*|6�Et��<��d+�}8|1�F|7�d`|7��|8��q$tA|+j=jB�D]<\}5}6|1�Ct3|)�dOt3|*�dQ|5|6|4�tDd_|5�}7t<t3|6�d+t3|+|6�Et��<��d+�}8|1�F|7�d`|7��|8��qctA|-j=jB�D]!\}5}6|1�Ct3|)�dOt3|*�t3|+�dR|5|6|4�tDd_|5�}7�q�tA|,j=jB�D]D\}5}6|1�Ct3|)�dOt3|*�t3|+�t3|-�dS|5|6|4�tDd_|5�}7t<t3|6�d+t3|,|6�Et��<��d+�}8|1�F|7�d`|7��|8��q�|1�?t3|)�t3|*�dRdZ�|/�G�|.S)az�
    payroll dashboard exporting to excell data

    Args:
    - request (HttpRequest): The HTTP request object.
    - contract_id (int): The ID of the contract to view.

    r�r�rdrc�
contributionsNr&rVT)�flatr)�start_date__gte)�
end_date__lte)�employee_id__inr�)�employee_id__id)r�r�)r�r�r�r�deduction_idr
rr
rrcS�|dS�Nr�rE��xrErErFrX�rYz payslip_export.<locals>.<lambda>)r�cSsi|]	\}}|t|��qSrEr�)r�r��grouprErErF�
<dictcomp>�s��z"payslip_export.<locals>.<dictcomp>cSr�r�rEr�rErErFrX�rYcs��|]}|dVqdS)rxNrE�r��itemrErErF�	<genexpr>�s�z!payslip_export.<locals>.<genexpr>csr�)�employer_contribution_amountNrEr�rErErFr��s�
�rU)rzEmployer ContributionzEmployee Contributionr�r�rrr^rZ)	r�r�r�r�r��	allowancer�r�rc�None)�
Departmentr?r�r?)r�)r�)�contract_end_date__lte)�contract_end_date__gter�)�no_of_payslip_generatedrvrz
Start DatezEnd Date�	Deduction�	Allowancez	Gross PayzNet Pay�Status)r�r�r�r�r�r�r�rc)�columnszContract Ending � to zContract EndingzNumber of payslips generatedzTotal Amountz"Employee - Employer Contributions zAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet��content_typez!attachment; filename=payslip.xlsx�Content-Disposition�
xlsxwriter)�enginezPayroll Dashboard detailsF�)�
sheet_name�index�startrow��	���center�vcenterz#eb7968�)�bold�	font_size�align�valign�bg_colorr��r�zPayroll details zPayroll details)r�r��	text_wrap�A�:)HrJrn�getlistr&rir2rYrrZr��sortrr��sumrrrrr[rrr�strr�r�rr rr$r!rhr_r`rhr�r�r�r�rfrcrzr=r5r�rgr/r
�nowrkrjr�r�r��	DataFrame�renamer�ExcelWriter�to_excel�book�sheets�maxr��
add_format�set_row�merge_range�	enumeraterv�write�chr�astype�
set_column�close)9rCr�r�r�rcr�r5rv�table1_data�table2_data�table3_data�table4_data�table5_data�employee_payslip_list�employrq�	pay_heads�
deductions�headr��grouped_deductionsr�r��employee_contribution�employer_contribution�empr�r\r(r)rr+r,r-r.rrr{r|r�r_�	df_table1�	df_table2�	df_table3�	df_table4�	df_table5rD�writer�workbook�	worksheet�max_columns�heading_format�
header_format�col_numr��
col_letter�header_widthrErErF�payslip_export�s�

���
��

�

�

�

�

����
�����
��



�

�




���,��
�
���
�����




��
����
������
�����������
������
�((�(�&�(r�c
Cs�|jd}t�|�}|D]L}z$tjj|d�}|j�d|j��}|��t	�
|td�j|j
|d��WqtjyDt	�|td��YqtyXt	�|td�j|d��Yqwtd	d
i�S)z8
    This method is used to bulk delete for Payslip
    r|rUr�z${employee} {period} payslip deleted.)r�rKr2zYou cannot delete {payslip})r�r��Success)rJr�r�r2rYrnr�r�r�rrRrBrsrhr�rwr	r
)rCr|rVr�rKrErErF�payslip_bulk_delete)s,

����r�cCs:|jd}|jd}tjj|d�j|d�tdd|d��S)z@
    This method is used to update the group of the payslip
    �newName�previousName)�
group_namerRzBatch name updated.)r�r��new_name)rJr2rYrZr�r
)rCr�r�rErErF�slip_group_name_updateFs


�r�cCsF|j�d�}|rt�}t�}||d�}t|d|d�St|tttdd�S)N�HTTP_HX_REQUEST)�
export_filter�
export_columnz,payroll/contract/contract_export_filter.htmlr�Contract_export)rC�model�filter_class�
form_class�	file_name)r�rnr'r*rrr/)rC�
hx_requestr�r��contentrErErF�contract_exportTs&���rc
Cs�|jd}t�|�}|D]E}ztjj|d�}|j�}|��t�	|t
d�j|d��Wqtj
y=t�|t
d��YqtyQt�|t
d�j|d��Yqwtdd	i�S)
z5
    This method is used to bulk delete Contract
    r|rUz{name} deleted.)�namer�zYou cannot delete {contract})r_r�r�)rJr�r�r/rYrnr�r�rrRrBrsr2r�rwr	r
)rCr|rVr_rrErErF�contract_bulk_deletems(

���rcCsht|�}t|�}||kr|�ddd��|d7}||ks||kr0|�ddd��|d7}||ks ||fS)a=
    Equalize the lengths of two lists by appending empty dictionaries to the shorter list.

    Args:
    deductions (list): List of dictionaries representing deductions.
    allowances (list): List of dictionaries representing allowances.

    Returns:
    tuple: Tuple containing two lists with equal lengths.
    r�)�titlerxr�)r�r�)rr��num_deductions�num_allowancesrErErFr$�s��r$Fc
Cs�z-t||�}|rt|dd�WSdddddddd�}tj|d|d	�}t|d
d�}d|d<|WStyJ}ztd
t|���dd�WYd}~Sd}~ww)ae
    Generate a PDF file from an HTML template and context data.

    Args:
        template_path (str): The path to the HTML template.
        context (dict): The context data to render the template.
        html (bool): If True, return raw HTML instead of a PDF.

    Returns:
        HttpResponse: A response with the generated PDF file or raw HTML.
    z	text/htmlr��A4�10mmzUTF-8N)z	page-sizez
margin-topz
margin-bottomzmargin-leftzmargin-right�encodingzenable-local-file-accessF)�optionszapplication/pdfzinline; filename=payslip.pdfr�zError generating PDF: i�r�)rr�pdfkit�from_string�	Exceptionr�)�
template_pathr��html�html_content�pdf_options�pdfrD�erErErF�generate_payslip_pdf�s(
�"��rcCs�ddlm}tjj|d���r�tjj|d�}tjjdd���}|j	�
d�s,|jj|j	kr�|j	}|j
}tjj|d�}|��rZ|D]}|j}	q?tjj|	d�}
|
��}|rX|jrX|jnd	}|j}|d
}
|d}t�|
d���}t�|d���}t��D]\}}||kr�|�|�}|�|�}qy|�|�d
�|�d
�|||j||��tj��jg|d��|��|��r�dnd|d�
�|d|d|d|d|d|dfD]	}|d�|�q�t|d|d�t |d|d�|d<d}t!||dd�St"|�St#|d�S)a
    Generate the payslip as a PDF and return it in an HttpResponse.

    Args:
        request (HttpRequest): The request object.
        id (int): The ID of the payslip to generate.

    Returns:
        HttpResponse: A response containing the PDF content.
    r�r�rUTr�r�r�r�rr�r�rrrrr)
rrrrr�r�r�rr	rrrrr
rrr
rrr	rrF)r�rr)$r�r�r2rYrZrrrnrr[rrrhrrrrrr�rr rr$r�r!r�r�r7r"r&r'r#r$r%rrr)rCrVr�r�rrr�r\r�r(r)r*rr+r,r�r�r-r.rrr/rrErErF�payslip_pdf�sz
����

�

���
rcCsJ|j�d�}|dkrtj��}dd�|D�}|��}||d�}t|dd�S)Nr�rcS�g|]}t|j��qSrE�r�rV�r�r�rErErFr�0�z#contract_select.<locals>.<listcomp>�r��total_countF��safe)rlrnr/rYrr�r
)rC�page_numberrdr�rr�rErErF�contract_select(s

rc	C�v|j�d�}|j�d�}|rt�|�ni}|dkr9t|tj��d�}|j}dd�|D�}|�	�}||d�}t
|�SdS)Nr�rZr��querysetcSrrErrrErErFr�Drz*contract_select_filter.<locals>.<listcomp>r)rlrnr�r�r'r/rYrr�r�r
)	rCr�filtered�filtersr��filtered_employeesr�rr�rErErF�contract_select_filter8�
�r&cCsh|j�d�}|dkr|j�d�rtj��}ntjj|jd�}dd�|D�}|��}||d�}t	|dd	�S)
Nr�rr���employee_id__employee_user_idcSrrErrrErErFr�Xrz"payslip_select.<locals>.<listcomp>��payslip_idsrFr)
rlrnrrr2rYrrZr�r
)rCrrdr+rr�rErErF�payslip_selectLs�
r,c	Cr )Nr�rZrr!cSrrErrrErErFr�lrz)payslip_select_filter.<locals>.<listcomp>r*)rlrnr�r�r)r2rYrr�r�r
)	rCrr#r$�payslip_filterr%r+rr�rErErF�payslip_select_filter`r'r.c	Cs4ddlm}tjj|d���}|jj}||j|d�d�}|j	dk�r||j
�}|���r||j_
||j_|��tjj|d��d�}d	}|��sJd
}||j|d�d�}t�|td��|j
jjdur�|jjj|j
jkr�|j
jjj}tj|jj||j
�d
�d|j
�d�|j
�d�d|j
�d�d|j
�d�td�dd�	nl|jjj|j
jjjkr�|j
j}tj|jj|dddddtd�dd�	nJ|j
j|j
jjjg}tj|jj||j
�d
�d|j
�d�|j
�d�d|j
�d�d|j
�d�td�dd�	n|j
j}tj|jj|dddddtd�dd�	t|d|||d��St|d||d��S) zX
    This method renders form and template to create Reimbursement request comments
    r)�ReimbursementRequestCommentFormrU)rh�
request_id)�initialrJ�r0�-created_atFTzComment added successfully!Nz0's reimbursement request has received a comment.u*تلقى طلب استرداد نفقات u تعليقًا.u6s Rückerstattungsantrag hat einen Kommentar erhalten.z'La solicitud de reembolso de gastos de z ha recibido un comentario.z(La demande de remboursement de frais de u a reçu un commentaire.zview-reimbursementzchatbox-ellipses)�	recipient�verb�verb_ar�verb_de�verb_es�verb_frr�iconz2Your reimbursement request has received a comment.u;تلقى طلب استرداد نفقاتك تعليقًا.u8Ihr Rückerstattungsantrag hat einen Kommentar erhalten.z4Tu solicitud de reembolso ha recibido un comentario.u6Votre demande de remboursement a reçu un commentaire.�0payroll/reimbursement/reimbursement_comment.html)�comments�no_commentsr0)rLr0)rMr/r4rYrZr[rrrVrNrJrPrXrhr0rQr6�order_byrrrrRrBrz�reporting_manager_idrr%�sendrr)	rC�
payroll_idr/�payrollr�rLr<r=�recrErErF�create_payrollrequest_commentts�
�

��
�
�

�
��
�

����	�rDcCs�tjj|d��d�}tjj|d�}d}|��sd}|jrJ|j�d�}|j	d}tjj|d�}g}|D]}	t
�}
|	|
_|
��|�
|
�q2|jj|�t|d||||d	��S)
zD
    This method is used to show Reimbursement request comments
    r2r3rUFT�files�
comment_idr;)r<r=r0�req)r6rYrZr>r4rnrrrOr�rlr5�filerQr�rE�addr)rCrAr<rGr=rErF�comment�attachmentsrH�
file_instancerErErF�view_payrollrequest_comment�s:��
��rMcCs2d}tjj|d�}|��t�|td��t|�S)zF
    This method is used to delete Reimbursement request comments
    r�rUzComment deleted successfully!)r6rYrZr�rrRrBr)rCrF�scriptrJrErErF�delete_payrollrequest_comments
rOcCsXd}|j�d�}tjj|d�}|j�d�s|j|jd�}|��t�	|t
d��t|�S)z#
    Used to delete attachment
    r�r|r}zpayroll.delete_reimbursmentfiler(zFile deleted successfully)rlr�r5rYrZrrr�rrRrBr)rCrNr|�recordsrErErF�!delete_reimbursement_comment_filesrQz!payroll.add_payrollgeneralsettingcCsnt|jd�}tj��}|r|nt�}t|d�|_|��t�	|t
d��|j�d�r.t
�St|j�dd��S)z@
    This method is used to set initial value notice period
    �
notice_periodrz8The initial notice period has been successfully updated.r�r�r�)rrlr1rYr[r�rRrQrrRrBr�rnrr)rCrRr�rErErF�initial_notice_period"s
�rSz payroll.view_PayslipAutoGeneratecCstj��}d|i}t|d|�S)N�payslip_auto_generatez+payroll/settings/auto_payslip_settings.html)r3rYrr)rCrTr�rErErF�auto_payslip_settings_view8s
rUz"payroll.change_PayslipAutoGeneratecCs�d}|rtjj|d�}t|d�}|jdkr<t|j|d�}|��r<|��}|jr*|jnd}t	�
|td|�d���td�St
|dd	|i�S)
NrUrWrJ�All companyzPayslip Auto generate for z created successfully r3z3payroll/settings/auto_payslip_create_or_update.htmlrL)r3rYrnr,rNrJrPrQrrrRrBrr)rC�auto_id�auto_paysliprLrrErErF�create_or_update_auto_payslipAs"

��
�rYcCsh|j�d�}|j�d�}tjj|d�}|dkr"d|_dtd�d�}n
d	|_dtd
�d�}|��t|�S)z�
    ajax function to update is active field in PayslipAutoGenerate.
    Args:
    - isChecked: Boolean value representing the state of PayslipAutoGenerate,
    - autoId: Id of PayslipAutoGenerate object
    �	isChecked�autoIdrUr�TrRz,Auto paslip generate activated successfully.r�Fz.Auto paslip generate deactivated successfully.)rJrnr3rY�
auto_generaterBrQr
)rCrZr[�payslip_autorDrErErF�activate_auto_payslip_generateYs	��r^z"payroll.delete_PayslipAutoGeneratecCs�z0tjj|d�}|js$|jr|jnd}|��t�|td|�d���nt�	|td��t
d�WStjyBt�|td��Ynwt
|j�dd	��S)
z�
    Delete a PayslipAutoGenerate object.

    Args:
        auto_id: The ID of PayslipAutoGenerate object to delete.

    Returns:
        Redirects to the contract view after successfully deleting the contract.

    rUrVzPayslip auto generate for z deleted successfully.z-Active 'Payslip auto generate' cannot delete.r�z Payslip auto generate not found.r�r�)r3rYrnr\rr�rrRrBr\rr�rwrr�)rCrWrXrrErErF�delete_auto_payslipus��
�r_)FrV)��__doc__r��collectionsrrrr�	itertoolsr�urllib.parser�pandasr�r�django.contribr�django.db.modelsr	r
�django.httprrr
�django.shortcutsrrr�django.template.loaderr�django.urlsr�django.utilsr�django.utils.translationrrB�base.methodsrrrrrrr�base.modelsr�employee.modelsrr�horilla.decoratorsrr r!r"�horilla.group_byr#�horilla.horilla_settingsr$�notifications.signalsr%�payroll.context_processorsr&�payroll.filtersr'r(r)�payroll.forms.component_formsr*r+r,�payroll.methods.methodsr-r.�payroll.models.modelsr/r0r1r2r3r4r5r6�payroll.models.tax_modelsr7rfrGrTrar{r�r�r�rSr�r�r�r�r�r�r0r1r4rFrJrtrwr~r�r�r�r�rrr$rrrr&r,r.rDrMrOrQrSrUrYr^r_rErErErF�<module>s*$	(
�#3"''9 %
T 
M
A#
+\



l$



Youez - 2016 - github.com/yon3zu
LinuXploit