USE [hrmdb]
GO

/****** Object:  StoredProcedure [dbo].[HRM_spGetLastEmpStatuteFactorPivot4]    Script Date: 10/02/2019 15:12:56 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO





ALTER PROCEDURE [dbo].[HRM_spGetLastEmpStatuteFactorPivot4] @Date DATETIME = NULL, @EmployeeID INT = NULL, @PayableTypeCode INT = 1
AS
SET ROWCOUNT 0
DECLARE @ColumnList VARCHAR(MAX)
DECLARE @qry NVARCHAR(MAX)
DECLARE @WhereClause VARCHAR(255)
DECLARE @PayableTypeClause VARCHAR(255)
SET @ColumnList = ''

IF @Date IS NULL
	SET @Date = GETDATE()


IF @PayableTypeCode IS NULL OR @PayableTypeCode < 0
	SET @PayableTypeClause = ''
ELSE
	SET @PayableTypeClause = 'AND ES.PayableTypeCode = ' + CAST(@PayableTypeCode AS VARCHAR)

IF @EmployeeID IS NULL OR @EmployeeID < 0
	SET @WhereClause = ''
ELSE
	SET @WhereClause = ' AND ES.EmployeeID = ' + CAST(@EmployeeID AS VARCHAR)

SELECT @ColumnList = @ColumnList + 
--', SUM(CASE WHEN PF.PayFactorID = ' + CAST(PayFactorID AS VARCHAR(20)) + ' THEN ESF.CalcValue ELSE NULL END)  AS ' + '"' + Title + '(محاسباتي)' +'" ' +
', SUM(CASE WHEN PF.PayFactorID = ' + CAST(PayFactorID AS VARCHAR(20)) + ' THEN ESF.FinalValue ELSE NULL END) AS ' + '"' + Title + '(نهايي)' + '" '
FROM HRM_tblPayFactor where PayFactorID not in (264,22,27,162,275,253,25,254,246,243,245,33,193,242,194,143,165,20,298,272)


SET @qry = 'SELECT 
--MAX(ES.EmployeeID) [شناسه كارمند],
MAX(ES.EmpCode) [كد پرسنلي], 
MAX(ES.FirstName) [نام], 
MAX(ES.LastName) [نام خانوادگي],
--MAX(ES.FirstName + '' '' + ES.LastName) [نام و نام خانوادگي],
MAX(ES.FatherName) [نام پدر],
MAX(ES.NationalID) [كدملي],
MAX(ES.IDNumber) [شماره شناسنامه],
--MAX(ES.IDSerial) [سريال شناسنامه],
--MAX(ES.GenderCode) [كد جنسيت],
MAX(G.Description) [جنسيت],
--MAX(ES.PersonTitleCode) [كد عنوان شخص],
--MAX(PTC.Description) [عنوان شخص],
--MAX(ES.PartyIssueDate) [تاريخ صدور شناسنامه],
--MAX(ES.IssuePlaceCode) [كد محل صدور شناسنامه],
MAX(ES.IssuePlaceDesc) [محل صدور شناسنامه],
MAX(ES.BirthDate) [تاريخ تولد],
--MAX(ES.BirthPlaceCode) [كد محل تولد],
MAX(ES.BirthPlaceDesc) [محل تولد],
--MAX(ES.MobileNumber) [شماره موبايل],
--MAX(ES.Email) [پست الكترونيكي],
--MAX(ES.Phone) [شماره تلفن],
--MAX(ES.AddressDesc) [آدرس اصلي],
--MAX(ES.EduMajorCode) [كد گرايش تحصيلي],
MAX(ES.EduMajorDesc) [گرايش تحصيلي],
--MAX(ES.EduDegreeCode) [كد مدرك تحصيلي],
MAX(ES.EduDegreeDesc) [مدرك تحصيلي],
--MAX(ES.EduDisciplineCode) [كد رشته تحصيلي],
MAX(ES.EduDisciplineDesc) [رشته تحصيلي],
--MAX(ES.LastMilitaryServiceStatusCode) [كد آخرين وضعيت نظام وظيفه],
MAX(ES.MilitarySvcStatusDesc) [آخرين وضعيت نظام وظيفه],
--MAX(ES.LastMaritalStatusCode) [كد آخرين وضعيت تاهل],
--MAX(ES.MaritalStatusDesc) [آخرين وضعيت تاهل],
--MAX(ES.LastMaritalEffectiveDate) [تاريخ موثر آخرين وضعيت تاهل],
--MAX(ES.IsSacrified) [جانباز],
--MAX(ES.IsMArtyrFamily) [خانواده شهيد],
--MAX(ES.SacrifiedPercent) [درصد جانبازي],
--MAX(ES.EmpStatuteNo) [شماره حكم],
MAX(ES.EmpStTypetitle) [نوع حكم],
MAX(ES.EmploymentDate) [تاريخ استخدام],
MAX(ES.IssueDate) [تاريخ صدور حكم],
MAX(ES.ApplyDate) [تاريخ اجراي حكم],
MAX(ES.ConfirmDate) [تاريخ تاييد حكم],
MAX(ES.ExpiryDate) [تاريخ انقضاي حكم],
--MAX(ES.BaseCode) [كد پايه],
--MAX(BS.Description) [عنوان پايه],
--MAX(ES.RankCode) [كد رتبه],
--MAX(ES.RankDesc) [عنوان رتبه],
--MAX(ES.JobClassCode) [كد رسته شغلي],
--MAX(JC.Description) [رشته شغلي],
--MAX(ES.JobGroupCode) [كد گروه شغلي],
--MAX(ES.JobGroupDesc) [گروه شغلي],
--MAX(ES.JobRankNumber) [طبقه شغل],
--MAX(ES.LevelCode) [رده پستي],
--MAX(ES.WorkDifficultyScore) [امتياز سختي كار],
--MAX(ES.SupervisionScore) [امتياز سرپرستي],
--MAX(ES.SonshipNo) [تعداد فرزندان تحت تكفل],
--MAX(ES.EmploymentTypeCode) [كد نوع استخدام], 
MAX(ES.EmploymentTypeDesc) [نوع استخدام], 
--MAX(ES.WorkLocationCode) [كد محل خدمت], 
MAX(ES.WorkLocationDesc) [محل خدمت],  
--MAX(ES.DepartmentCode) [كد واحد سازماني], 
MAX(ES.DepartmentTitle) [واحد سازماني], 
--MAX(ES.CostCenterCode) [كد مركز هزينه], 
MAX(ES.CostCenterTitle) [مركز هزينه],
--MAX(ES.JobCode) [كد شغل], 
MAX(ES.JobTitle) [شغل], 
--MAX(ES.PostCode) [كد پست], 
MAX(ES.PostTitle) [پست],
--ES.EmpStatuteID [شناسه حكم], 
MAX(ES.ApplyDate) [تاريخ حكم],
MAX(CAST(ES.Description AS NVARCHAR(255))) [شرح حكم]
' + @ColumnList + '
FROM HRM_vwRptEmpStatuteDetail ES
LEFT OUTER JOIN HRM_tblEmpStatuteFactor ESF
ON ES.EmpStatuteID = ESF.EmpStatuteID
' + @PayableTypeClause + '
INNER JOIN
(
SELECT EmployeeID, MAX(IssueDate) AS maxIssueDate
FROM HRM_tblEmpStatute
WHERE StateCode = 3
AND IssueDate <= ''' + CAST(@Date AS VARCHAR(100)) + '''
GROUP BY EmployeeID
) LAST
ON ES.EmployeeID = LAST.EmployeeID 
AND ES.IssueDate = LAST.maxIssueDate 
AND ES.StateCode = 3
INNER JOIN HRM_tblPayFactorProperty PFP
ON PFP.PayFactorPropertiesID = ESF.PayFactorPropID
INNER JOIN HRM_tblPayFactor PF
ON PFP.PayFactorID = PF.PayFactorID
LEFT OUTER JOIN CMS_tblGender G
ON G.Code = ES.GenderCode
LEFT OUTER JOIN CMS_tblPersonTitle PTC
ON PTC.Code = ES.PersonTitleCode
LEFT OUTER JOIN CMS_tblBase BS
ON BS.Code = ES.BaseCode
LEFT OUTER JOIN CMS_tblJobClass JC
ON JC.Code = ES.JobClassCode
WHERE ES.StateCode = 3
AND ES.IssueTimeCode <> 3
' + @WhereClause + '
GROUP BY ES.EmpStatuteID
--ORDER BY MAX(ES.EmployeeID), MAX(ESF.ApplyDate)
'
--SELECT @qry AS qry
EXECUTE(@qry)




GO


