Project

General

Profile

Bug #3966 » PRPTTMCUTITUNED_20251024.sql

Tri Rizqiaty, 10/24/2025 03:14 PM

 
1
??ALTER PROCEDURE [dbo].[PRPTTMCUTITUNED]
2

3
(
4

5
    @Year VARCHAR(4) ,
6

7
    @EmployeeID VARCHAR(18)
8

9
)
10

11

12

13
AS
14

15

16

17

18

19
--DECLARE @Year VARCHAR(4) = '2024'
20

21
--DECLARE @EmployeeID VARCHAR(12) = '23044170'
22

23

24

25

26

27
DECLARE @now VARCHAR(10)= dbo.fn_formatdatetime(GETDATE(), 'yyyymmdd')
28

29
DECLARE @startdate VARCHAR(12) = @year + '0101'
30

31
DECLARE @enddate VARCHAR(12) = @year + '1231'
32

33

34

35
select 
36

37
pa18.EmployeeID
38

39
,dbo.fn_formatdatetime(pa18.StartDate, 'dd/mm/yyyy') as StartDate_
40

41
,dbo.fn_formatdatetime(pa18.EndDate, 'dd/mm/yyyy') as EndDate_
42

43
,pa18.StartDate
44

45
,pa18.EndDate
46

47
,pa18.AbsenceType
48

49
,absence_type.AbsenceTypeDesc
50

51
,pa18.TotalAbsenceTaken
52

53
,pa18.Notes
54

55
into #absence_data
56

57
from PHRPA0018 pa18
58

59
left join PHRTMABSTYP absence_type on pa18.AbsenceType=absence_type.AbsenceType and absence_type.EndDate='99991231'
60

61
where pa18.EmployeeID=@EmployeeID and left(pa18.StartDate,4)=@Year
62

63

64

65
select 
66

67
pa17.EmployeeID
68

69
,pa17.PreviousQuota
70

71
,pa17.OriginalQuota 
72

73
,pa17.RemainQuota
74

75
,pa17.ExpiredQuota
76

77
into #absence_detail
78

79
from PHRPA0017 pa17 
80

81
where pa17.EmployeeID=@EmployeeID and pa17.StartDate <= @enddate AND pa17.EndDate >= @enddate
82

83

84

85
--select * from #absence_detail
86

87

88

89
DECLARE @EndDeductionDate VARCHAR(20) = (SELECT DISTINCT ExpiredQuota FROM #absence_detail)  
90

91
DECLARE @SumPrevQuotaNow DECIMAL(22,1) = (SELECT DISTINCT PreviousQuota FROM #absence_detail) 
92

93
DECLARE @RemaingQuotaNow DECIMAL(22,1) = (SELECT DISTINCT RemainQuota FROM #absence_detail) 
94

95

96

97
DECLARE @DurTaken DECIMAL(22,1)  --------- jumlah cuti yang terjadi di tahun sekarang
98

99
SELECT DISTINCT @DurTaken = SUM(TotalAbsenceTaken)
100

101
FROM #absence_data
102

103

104

105
DECLARE @DurQuotaSetengahLast DECIMAL(22,1) --------- jumlah cuti setengah hari yang terjadi di tahun kemarin 
106

107
SELECT DISTINCT @DurQuotaSetengahLast = ISNULL(SUM(TotalAbsenceTaken),0)
108

109
FROM #absence_data AS AbsDetail
110

111
WHERE EndDate <= @EndDeductionDate AND TotalAbsenceTaken < 1
112

113

114

115
DECLARE @DurQuotaSetengahNow DECIMAL(22,1) --------- jumlah cuti setengah hari yang terjadi di tahun sekarang 
116

117
SELECT DISTINCT @DurQuotaSetengahNow = ISNULL(SUM(TotalAbsenceTaken),0)
118

119
FROM #absence_data AS AbsDetail
120

121
WHERE EndDate > @EndDeductionDate AND TotalAbsenceTaken < 1
122

123

124

125
DECLARE @DurQuotaLast DECIMAL(22,1) --------- jumlah cuti yang terjadi sampai expired date yang ada di md17
126

127
SELECT DISTINCT @DurQuotaLast = ISNULL(SUM(TotalAbsenceTaken),0)
128

129
FROM #absence_data AS AbsDetail
130

131
WHERE EndDate <= @EndDeductionDate
132

133

134

135
DECLARE @DurQuotaNow DECIMAL(22,1) --------- jumlah cuti yang terjadi setelah expired date yang ada di md17
136

137
SELECT DISTINCT @DurQuotaNow = ISNULL(SUM(ISNULL(TotalAbsenceTaken,0)),0)
138

139
FROM #absence_data AS AbsDetailx
140

141
WHERE EndDate > @EndDeductionDate
142

143

144

145
DECLARE @Use_Prev_Quota DECIMAL(22,1) --------- jumlah cuti tahun yang menggunakan quota tahun kemarin
146

147
SET @Use_Prev_Quota = ( CASE WHEN @DurQuotaLast > @SumPrevQuotaNow THEN @SumPrevQuotaNow ELSE @DurQuotaLast END )
148

149

150

151
DECLARE @SisaCutiInExpiredDate DECIMAL(22,1)  --------- sisa kelebihan cuti yang termasuk dalam expired date
152

153
SET @SisaCutiInExpiredDate = CASE 
154

155
								 WHEN @SumPrevQuotaNow > 0 THEN
156

157
									 CASE 
158

159
										WHEN @DurQuotaLast > @SumPrevQuotaNow THEN @DurQuotaLast - @SumPrevQuotaNow ELSE 0 
160

161
									 END
162

163
								 ELSE 0
164

165
							 END
166

167

168

169
DECLARE @used_current_quota DECIMAL(22,1) --------- jumlah cuti tahun yang menggunakan quota tahun sekarang
170

171
SET @used_current_quota = @DurTaken - CASE WHEN @DurQuotaLast > @SumPrevQuotaNow THEN @SumPrevQuotaNow ELSE @DurQuotaLast END
172

173

174

175
DECLARE @Remaining_Quotas DECIMAL(22,1) -------- jumlah remaning quota di tahun sekarang setelah dikurangi cuti setengah hari & sisa cuti dari tahun kemarin
176

177
SET  @Remaining_Quotas = CASE 
178

179
							WHEN @now > @EndDeductionDate THEN @RemaingQuotaNow - (CASE WHEN @SumPrevQuotaNow > 0 THEN @DurQuotaSetengahNow ELSE @DurQuotaSetengahLast + @DurQuotaSetengahNow END) - @SisaCutiInExpiredDate 
180

181
							WHEN @now <= @EndDeductionDate THEN @RemaingQuotaNow - ( @DurQuotaSetengahNow + @DurQuotaSetengahLast )
182

183
						 END
184

185

186

187

188

189
select
190

191
pa1.EmployeeID
192

193
,pa1.FullName
194

195
,pa1.ExternalID
196

197
,pa2.Position
198

199
,om1.ObjectDescription as PositionDescription
200

201
, dbo.fn_formatdatetime(absence.StartDate, 'yyyy/mm/dd') AS StartDate
202

203
, dbo.fn_formatdatetime(absence.EndDate, 'yyyy/mm/dd') AS EndDate
204

205
,absence.AbsenceTypeDesc
206

207
,absence.TotalAbsenceTaken
208

209
,absence.Notes
210

211
,@DurTaken AS totaaal
212

213
,@Use_Prev_Quota AS Use_Prev_Quota
214

215
,@used_current_quota AS used_current_quota
216

217
,detail.OriginalQuota
218

219
,detail.PreviousQuota AS previous_remaining_quota
220

221
,@Remaining_Quotas AS Remaining_Quotas
222

223
from PHRPA0001 pa1 
224

225
left join PHRPA0002 pa2 on pa1.EmployeeID=pa2.EmployeeID and @Year+'1231' between pa2.StartDate and pa2.EndDate
226

227
left join PHROM0001 om1 on pa2.Position=om1.ObjectID and om1.ObjectClass='P' and om1.EndDate='99991231'
228

229
left join #absence_data absence on pa1.EmployeeID=absence.EmployeeID
230

231
left join #absence_detail detail  on pa1.EmployeeID=detail.EmployeeID
232

233
where 
234

235
pa1.EmployeeID=@EmployeeID and @Year+'1231' between pa1.StartDate and pa1.EndDate
236

237

238

239
drop table #absence_data
240

241
drop table #absence_detail
(2-2/2)