
    MBj$                        d Z ddlZddlZddlZddlmZ ddlmZmZ ddl	m
Z
mZ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mZmZmZmZmZmZm Z  e ed      d               Z!e ed      d               Z"e ed      d               Z#ed        Z$ed        Z%e ed      d               Z&e ed      d               Z'e ed      d               Z(y)u  
payroll/views/salary_structure_views.py
=========================================
Module 5 — FBV views still wired to salary_urls.py.

List/Nav/Form pages are handled by CBVs in payroll/cbv/salary_structure.py.
This file contains only the FBVs that remain active:
  - salary_structure_clone
  - grade_step_matrix + grade_step_matrix_save
  - ajax_grades_for_structure + ajax_steps_for_grade
  - progression_decision + progression_bulk_decision + progression_export
    N)messages)HttpResponseJsonResponse)get_object_or_404redirectrender)timezone)gettext_lazy)login_requiredpermission_required)CloneSalaryStructureFormGradeProgressionDecisionForm)PROGRESSION_PENDINGPROGRESSION_REJECTED
GradeLevelGradeProgressionProposalGradeStepComponentIncomeComponentSalaryStructure	StepLevelzpayroll.add_salarystructurec                 `   t        t        |      }t        | j                  xs d       }| j                  dk(  rf|j                         rV|j                  |j                  d         }t        j                  | t        d|j                   d             t        d      S t        | d||d      S )	NpkPOSTnew_namezStructure cloned as 'z'.zsalary-structure-viewz(payroll/salary_structure/clone_form.html)formsource)r   r   r   r   methodis_validclonecleaned_datar   success_namer   r   )requestr   r   r   r    s        H/var/www/python-projects/worksol/payroll/views/salary_structure_views.pysalary_structure_cloner'   ,   s     26F#GLL$8D9D~~DMMOT..z:;!&;EJJ<r$J"KL/00'EPT`fGghh    zpayroll.view_gradestepcomponentc                 H   t        t        |      }|j                  j                  d      j	                  d      }t
        j                  j                  d      j	                  d      }t        j                  j                  |      D ci c]%  }|j                  |j                  f|j                  ' }}t        j                  |j                         D 	ci c]  \  \  }}}	d| d| t        |	       c}	}}      }
t        | d	|||||
d
      S c c}w c c}	}}w )z8Matrix view: rows=steps, cols=components, cells=amounts.r   T	is_activesteporder)gradeamount_r#   z/payroll/salary_structure/grade_step_matrix.html)r.   steps
componentsvaluesmatrix_values_json)r   r   r0   filterorder_byr   objectsr   step_idcomponent_idamountjsondumpsitemsstrr   )r%   grade_pkr.   r0   r1   gscr2   r7   comp_idr9   r3   s              r&   grade_step_matrixrA   :   s%    jX6EKK.77?E ((//$/?HHQJ &--4454A 
c&&'3F  *0,,.% %&Wg '!G9%s6{2% 
 'L 0O  %s   *DDz!payroll.change_gradestepcomponentc           	      `   t        t        |      }| j                  dk7  rt        d|      S |j                  j                  d      }t        j                  j                  d      }|D ]  }|D ]}  }d|j                   d|j                   }| j                  j                  |d	      j                         xs d	}	 t        |      }	t        j                  j                  |||d|	i         t!        j"                  | t%        d             t        d|      S # t        $ r d
}	Y bw xY w)zBulk-save the matrix via POST.r   r   zgrade-step-matrix)r>   Tr*   r/   r#   0r   r9   )r.   r,   	componentdefaultszGrade-step values saved.)r   r   r   r   r0   r4   r   r6   r   r   getstripfloat
ValueErrorr   update_or_creater   r"   r#   )
r%   r>   r.   r0   r1   r,   rD   keyvalr9   s
             r&   grade_step_matrix_saverM   T   s*    jX6E~~+h??KK.E ((//$/?J # 
	IDGG9Aill^4C,,""3,224;Cs &&77$)"F+ 8 
	 Wa :;<'(;;  s   ?DD-,D-c                     | j                   j                  d      }g }|rJt        t        j                  j                  |d      j                  d      j                  ddd            }t        d|i      S )Nstructure_idT)rO   r+   levelidr$   grades)	GETrF   listr   r6   r4   r5   r2   r   )r%   rO   rR   s      r&   ajax_grades_for_structurerU   r   si    ;;??>2LF%%<4%PXgVD'6*

 6*++r(   c                     | j                   j                  d      }g }|rJt        t        j                  j                  |d      j                  d      j                  ddd            }t        d|i      S )Ngrade_idT)rW   r+   r,   rQ   descriptionr0   )	rS   rF   rT   r   r6   r4   r5   r2   r   )r%   rW   r0   s      r&   ajax_steps_for_graderY      si    {{z*HE$$h$$GXfVD&-0

 %())r(   z'payroll.change_gradeprogressionproposalc                    t        t        |t              }t        | j                  xs d      }| j
                  dk(  r9|j                         r(|j                  d   }|j                  j                  dd      }|t        j                  k(  rT|j                  | j                         t        j                  | t        d|j                   d	             t5        d      S t         |_        | j                  |_        t'        j(                         j+                         |_        ||_        |j1                  g d
       t        j2                  | t        d|j                   d	             t5        d      S t7        | d||d      S )z)HR approves or rejects a single proposal.r   statusNr   decisionnotes approved_by_userzProgression approved for .r\   approved_bydecision_dater^   update_fieldszProgression rejected for grade-progression-viewz2payroll/salary_structure/progression_decision.html)proposalr   )r   r   r   r   r   r   r   r!   rF   APPROVEapplyuserr   r"   r#   employeer   r\   rd   r	   nowdatere   r^   saveinfor   r   )r%   r   ri   r   r]   r^   s         r&   progression_decisionrr      sF    !!9bI\]H'(<=D~~DMMO$$Z0!!%%gr23;;;NNGLLN9Wa*CHDUDUCVVW(X&YZ 011 3HO#*<<H %-\\^%8%8%:H""HNMM([M\MM'1'@ARAR@SST%U#VW011'O'68 8r(   c                    | j                   dk7  rt        d      S | j                  j                  d      }| j                  j	                  d      }| j                  j	                  dd      }d}|D ]  }	 t
        j                  j	                  |t              }|d	k(  r|j                  | j                  
       nc|dk(  r^t        |_        | j                  |_        t        j                         j                         |_        ||_        |j%                  g d       |dz  } t)        j*                  | t-        | d             t        d      S # t
        j&                  $ r Y w xY w)z*Bulk approve or reject selected proposals.r   rh   proposal_idsactionr^   r_   r   r[   approver`   rejectrc   rf      z proposal(s) processed.)r   r   r   getlistrF   r   r6   r   rk   rl   r   r\   rd   r	   rn   ro   re   r^   rp   DoesNotExistr   r"   r#   )r%   pksru   r^   countr   ri   s          r&   progression_bulk_decisionr}      s?    ~~011
,,

~
.C\\h'FLLWb)EE 	/77;;rJ];^H"=8#"6'.||$)1)<)<)>&!&,_`QJE Wa5')@ ABC,--	 (44 		s   5B/EE)(E)z%payroll.view_gradeprogressionproposalc                    t        j                         }|j                  }d|_        |j	                  g d       t
        j                  j                  ddddd      j                  d      }| j                  j                  d	      }|r|j                  |
      }|D ]   }d}	 t        |j                  j                  j                        }|j	                  t        |j                        t#        t#        |j                  dd      dd      |t        |j$                        d|j&                  j(                   t        |j*                        d|j,                  j(                   |j/                         t        |j0                        |j3                         g
        t5        j6                         }|j9                  |       |j;                  d       t=        |d      }d|d<   |S # t         $ r Y *w xY w)zExport progressions as Excel.zGrade Progressions)
EmployeezEmployee No.
Departmentz
From Gradez	From StepzTo GradezTo StepTypezProposed DateStatus+employee__employee_work_info__department_id
from_grade	from_stepto_gradeto_stepemployee__employee_first_namer\   )r\   r_   employee_work_infoNemployee_idzStep r   zAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet)content_typez.attachment; filename="grade_progressions.xlsx"zContent-Disposition)openpyxlWorkbookactivetitleappendr   r6   select_relatedr5   rS   rF   r4   r=   rm   r   department_id	Exceptiongetattrr   r   r,   r   r   get_progression_type_displayproposed_dateget_status_displayioBytesIOrp   seekr   )	r%   wbws	proposalsstatus_filterpdeptbufresponses	            r&   progression_exportr      s    
			B	B#BHII V W )00??5k:y h./ 
 KKOOH-M$$M$:	 	qzz44BBCD 			

OGAJJ(<dC]TVWq{{'7'7&89

OuQYY^^$45**,   "	
 		" **,CGGCLHHQKXH 'WH"#O+  		s   %)G,,	G98G9))__doc__r   r:   r   django.contribr   django.httpr   r   django.shortcutsr   r   r   django.utilsr	   django.utils.translationr
   r#   horilla.decoratorsr   r   $payroll.forms.salary_structure_formsr   r   payroll.models.salary_structurer   r   r   r   r   r   r   r   r'   rA   rM   rU   rY   rr   r}   r    r(   r&   <module>r      s6   
   # 2 @ @ ! 6 B	 	 	 23i 4 i 67 8 0 89< : <8 	, 	, 	* 	* >?8 @ 8, >?. @ .: <=* > *r(   