Project

General

Profile

Feature #3646 » CRPTBKTWUL_202507141611.sql

Tri Rizqiaty, 07/15/2025 11:07 AM

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

3
(
4

5
	@Period VARCHAR(20)
6

7
	,@Organization VARCHAR(20)
8

9
)
10

11
AS
12

13

14

15
--DECLARE @Period VARCHAR(20) = '2025'
16

17
--DECLARE @Organization VARCHAR(20) = '00000245'
18

19

20

21
DECLARE @now VARCHAR(20) = FORMAT(getdate(), 'yyyyMMdd')
22

23
DECLARE @PeiodeEnDt VARCHAR(20) = @Period + '1231'
24

25

26

27
IF(@Organization = '')
28

29
BEGIN SET @Organization = '00000001' END
30

31

32

33
DECLARE @t_org TABLE(
34

35
	org_id VARCHAR(20)
36

37
	,org_name VARCHAR(500)
38

39
	,div_id VARCHAR(20)
40

41
	,div_name VARCHAR(500)
42

43
)
44

45
INSERT INTO @t_org
46

47
select org_id, org_name, org_id_04, org_name_04 from dbo.GetOrgInOrgWide(@Organization, @now)
48

49

50

51
DECLARE @t_emp TABLE
52

53
(
54

55
	EmployeeID VARCHAR(20)
56

57
	,EmployeeName VARCHAR(500)
58

59
	,div_id VARCHAR(20)
60

61
	,div_name VARCHAR(500)
62

63
	,Organization VARCHAR(20)
64

65
	,OrgDesc VARCHAR(500)
66

67
	,Position VARCHAR(20)
68

69
	,PosDesc VARCHAR(500)
70

71
	,Job VARCHAR(20)
72

73
	,JobDesc VARCHAR(500)
74

75
)
76

77

78

79
INSERT INTO @t_emp
80

81
SELECT pa2.EmployeeID, pa1.FullName, torg.div_id, torg.div_name, pa2.Organization, torg.org_name, pa2.Position, pos.ObjectDescription, pa2.Job, job.ObjectDescription
82

83
FROM PHRPA0002 as pa2
84

85
INNER JOIN @t_org AS torg
86

87
	ON pa2.Organization = torg.org_id
88

89
LEFT JOIN PHRPA0001 AS pa1
90

91
	ON pa2.EmployeeID = pa1.EmployeeID
92

93
	AND pa1.StartDate <= @now AND pa1.EndDate >= @now
94

95
LEFT JOIN PHROM0001 AS pos
96

97
	ON pa2.Position = pos.ObjectID
98

99
	AND pos.ObjectClass = 'P'
100

101
	AND pos.StartDate <= @now AND pos.EndDate >= @now
102

103
LEFT JOIN PHROM0001 AS job
104

105
	ON pa2.Job = job.ObjectID
106

107
	AND job.ObjectClass = 'J'
108

109
	AND job.StartDate <= @now AND job.EndDate >= @now
110

111
WHERE pa2.StartDate <= @now AND pa2.EndDate >= @now 
112

113
	--AND pa2.EmployeeID IN ( '00000043','00000110','00000855')
114

115

116

117
DECLARE @t_result TABLE
118

119
(
120

121
	EmployeeID VARCHAR(20)
122

123
	,EmployeeName VARCHAR(500)
124

125
	,DivID VARCHAR(20)
126

127
	,DivDesc VARCHAR(500)
128

129
	,Organization VARCHAR(20)
130

131
	,OrgDesc VARCHAR(500)
132

133
	,Position VARCHAR(20)
134

135
	,PosDesc VARCHAR(500)
136

137
	,Job VARCHAR(20)
138

139
	,JobDesc VARCHAR(500)
140

141
	,RegID DECIMAL(18,0)
142

143
	,BizFlowID VARCHAR(100)
144

145
	,[Sequence] DECIMAL(18,0)
146

147
	,TaskIDRun VARCHAR(100)
148

149
	,TaskStatus VARCHAR(50)
150

151
	,ExecuteEmployeeID VARCHAR(50)
152

153
	,ExecuteEmpName VARCHAR(50)
154

155
)
156

157

158

159
DECLARE @t_pa47 TABLE
160

161
(
162

163
	EmployeeID VARCHAR(20)
164

165
	,EmployeeName VARCHAR(500)
166

167
	,DivID VARCHAR(20)
168

169
	,DivDesc VARCHAR(500)
170

171
	,Organization VARCHAR(20)
172

173
	,OrgDesc VARCHAR(500)
174

175
	,Position VARCHAR(20)
176

177
	,PosDesc VARCHAR(500)
178

179
	,Job VARCHAR(20)
180

181
	,JobDesc VARCHAR(500)
182

183
	,StartDate VARCHAR(20)
184

185
	,RegID DECIMAL(18,0)
186

187
	,BizFlowID VARCHAR(100)
188

189
	,[Sequence] DECIMAL(18,0)
190

191
	,TaskIDRun VARCHAR(100)
192

193
	,TaskStatus VARCHAR(50)
194

195
	,ExecuteEmployeeID VARCHAR(50)
196

197
	,ExecuteEmpName VARCHAR(50)
198

199
)
200

201

202

203
INSERT INTO @t_pa47
204

205
SELECT DISTINCT temp.*, pa47.StartDate, pa47.RegID, '' AS BizFlowID, 1 AS Sequence, '' AS TaskIDRun, 'F' AS TaskStatus, '' AS ExecuteEmployeeID, '' AS ExecuteEmpName
206

207
FROM PHRPA0047 AS pa47
208

209
INNER JOIN @t_emp AS temp
210

211
	ON pa47.EmployeeID = temp.EmployeeID
212

213
WHERE LEFT(StartDate,4) = @Period
214

215

216

217
DECLARE @t_wf TABLE
218

219
(
220

221
	RegID VARCHAR(20)
222

223
	,BizFlowID VARCHAR(250)
224

225
	,TaskRunID VARCHAR(250)
226

227
	,EmployeeID VARCHAR(20)
228

229
	,WorkFlowStatus VARCHAR(20)
230

231
)
232

233
INSERT INTO @t_wf
234

235
SELECT runtask.RegID, runtask.BizFlowID, TaskIDRun, ExecuteEmployeeID, WorkFlowStatus
236

237
FROM PCMWFRUNTASK AS runtask
238

239
INNER JOIN @t_emp AS temp
240

241
	ON runtask.ExecuteEmployeeID = temp.EmployeeID
242

243
INNER JOIN PCMWFRUNBIZDATA AS bizdata
244

245
	ON runtask.RegID = bizdata.RegID
246

247
WHERE (TaskIDRun = 'create') 
248

249
	AND runtask.BizFlowID IN ('MD_PMS_Final','MD_PMS_Goal','MD_PMS_Review')
250

251
	AND LEFT(InboundDate,4) = @Period
252

253
	AND bizdata.FieldID = 'StartDate_47' AND LEFT(bizdata.Value,4) = @Period
254

255
	AND runtask.RegID NOT IN ( SELECT DISTINCT RegID FROM @t_pa47)
256

257
--order by EmployeeID, RegID, Sequence ASC
258

259

260

261
DECLARE @t_wf_det TABLE
262

263
(
264

265
	RegID VARCHAR(20)
266

267
	,BizFlowID VARCHAR(250)
268

269
	,Sequence DECIMAL(18,2)
270

271
	,TaskRunID VARCHAR(250)
272

273
	,TaskStatus VARCHAR(20)
274

275
	,ExecuteEmployeeID VARCHAR(20)
276

277
	,WorkFlowStatus VARCHAR(20)
278

279
	,EmployeeID VARCHAR(20)
280

281
)
282

283

284

285
DECLARE @t_wf_detail TABLE
286

287
(
288

289
	RegID VARCHAR(20)
290

291
	,BizFlowID VARCHAR(250)
292

293
	,Sequence DECIMAL(18,2)
294

295
	,TaskRunID VARCHAR(250)
296

297
	,TaskStatus VARCHAR(20)
298

299
	,ExecuteEmployeeID VARCHAR(20)
300

301
	,WorkFlowStatus VARCHAR(20)
302

303
	,EmployeeID VARCHAR(20)
304

305
)
306

307

308

309
INSERT INTO @t_wf_det
310

311
SELECT DISTINCT runtask.RegID, runtask.BizFlowID, runtask.Sequence, runtask.TaskIDRun, runtask.TaskStatus, runtask.ExecuteEmployeeID, runtask.WorkFlowStatus, twf.EmployeeID
312

313
FROM PCMWFRUNTASK AS runtask
314

315
INNER JOIN @t_wf AS twf
316

317
	ON runtask.RegID = twf.RegID
318

319
WHERE (runtask.TaskIDRun IN ('create ','apv_ds', 'apv_nha') OR runtask.WorkFlowStatus = 'F')
320

321
	AND runtask.BizFlowID IN ('MD_PMS_Final','MD_PMS_Goal','MD_PMS_Review')
322

323
ORDER BY RegID ASC
324

325

326

327
--INSERT INTO @t_wf_detail
328

329
--SELECT * FROM @t_wf_det
330

331

332

333
INSERT INTO @t_wf_detail
334

335
SELECT tdet.RegID, tdet.BizFlowID, tdet.Sequence, tdet.TaskRunID, tdet.TaskStatus, tdet.ExecuteEmployeeID, tdet.WorkFlowStatus, tdet.EmployeeID
336

337
FROM @t_wf_det AS tdet
338

339
INNER JOIN ( SELECT RegID, BizFlowID, MAX(Sequence) AS MaxSeq FROM @t_wf_det GROUP BY RegID, BizFlowID ) AS tmax
340

341
	ON tdet.BizFlowID = tmax.BizFlowID
342

343
WHERE tdet.RegID = tmax.RegID AND tdet.Sequence = tmax.MaxSeq
344

345

346

347
INSERT INTO @t_wf_detail
348

349
SELECT DISTINCT pa47.RegID, '' AS BizFlowID, 1 AS Sequence, 'Finish' AS TaskIDRun, 'F' AS TaskStatus, '' AS ExecuteEmployeeID, 'F' AS WorkFlowStatus, pa47.EmployeeID
350

351
FROM @t_pa47 AS pa47
352

353
WHERE LEFT(StartDate,4) = @Period
354

355

356

357
DECLARE @t_emp_detail TABLE
358

359
(
360

361
	EmployeeID VARCHAR(20)
362

363
	,EmployeeName VARCHAR(500)
364

365
	,div_id VARCHAR(20)
366

367
	,div_name VARCHAR(500)
368

369
	,Organization VARCHAR(20)
370

371
	,OrgDesc VARCHAR(500)
372

373
	,Position VARCHAR(20)
374

375
	,PosDesc VARCHAR(500)
376

377
	,Job VARCHAR(20)
378

379
	,JobDesc VARCHAR(500)
380

381
	,TotCreate DECIMAL(22,0)
382

383
	,TotFinish DECIMAL(22,0)
384

385
	,EmpWFStatus VARCHAR(20)
386

387
	,TotApvDs DECIMAL(22,0)
388

389
	,TotApvNha DECIMAL(22,0)
390

391
)
392

393
INSERT INTO @t_emp_detail
394

395
SELECT temp.*, tcreate.TotCreate, tfinish.TotFinish, 
396

397
		CASE WHEN tcreate.TotCreate = tfinish.TotFinish THEN 'F' ELSE 'N' END AS EmpWFStatus, ISNULL(TotApvDs,0) AS TotApvDs, ISNULL(TotApvNha,0) AS TotApvNha
398

399
FROM @t_emp AS temp
400

401
LEFT JOIN ( SELECT EmployeeID, COUNT(DISTINCT RegID) AS TotCreate FROM @t_wf_detail group by EmployeeID ) AS tcreate
402

403
	ON temp.EmployeeID = tcreate.EmployeeID
404

405
LEFT JOIN ( SELECT EmployeeID, count(DISTINCT RegID) AS TotFinish FROM @t_wf_detail WHERE WorkFlowStatus = 'F' group by EmployeeID ) AS tfinish
406

407
	ON temp.EmployeeID = tfinish.EmployeeID
408

409
LEFT JOIN ( SELECT EmployeeID, count(DISTINCT RegID) AS TotApvDs FROM @t_wf_detail WHERE TaskRunID = 'apv_ds' group by EmployeeID ) AS tapv_ds
410

411
	ON temp.EmployeeID = tapv_ds.EmployeeID
412

413
LEFT JOIN ( SELECT EmployeeID, count(DISTINCT RegID) AS TotApvNha FROM @t_wf_detail WHERE TaskRunID = 'apv_nha' group by EmployeeID ) AS tapv_nha
414

415
	ON temp.EmployeeID = tapv_nha.EmployeeID
416

417
WHERE div_id <> ''
418

419

420

421

422

423
SELECT tdiv.*, ISNULL((CONVERT(DECIMAL(22,2),(TotalEmpFinish/TotalEmp)) * 100),0) AS Persentase, 
424

425
		ISNULL(tfinish.TotalEmpFinish,0) AS TotalEmpFinish, ISNULL(tcreate.TotCreate,0) AS TotCreate, ISNULL(tapvds.TotApvDs,0) AS TotApvDs, ISNULL(tapvnha.TotApvNha,0) AS TotApvNha
426

427
FROM (SELECT div_id, div_name, CONVERT(DECIMAL(22,2),COUNT(EmployeeID)) AS TotalEmp FROM @t_emp_detail GROUP BY div_id, div_name) AS tdiv
428

429
LEFT JOIN (SELECT div_id, div_name, ISNULL(COUNT(EmployeeID),0) AS TotalEmpFinish FROM @t_emp_detail WHERE EmpWFStatus = 'F' GROUP BY div_id, div_name) AS tfinish
430

431
	ON tdiv.div_id = tfinish.div_id
432

433
LEFT JOIN (SELECT div_id, div_name, ISNULL(COUNT(EmployeeID),0) AS TotCreate FROM @t_emp_detail WHERE TotCreate > 0 GROUP BY div_id, div_name) AS tcreate
434

435
	ON tdiv.div_id = tcreate.div_id
436

437
LEFT JOIN (SELECT div_id, div_name, ISNULL(COUNT(EmployeeID),0) AS TotApvDs FROM @t_emp_detail WHERE TotApvDs > 0 GROUP BY div_id, div_name) AS tapvds
438

439
	ON tdiv.div_id = tapvds.div_id
440

441
LEFT JOIN (SELECT div_id, div_name, ISNULL(COUNT(EmployeeID),0) AS TotApvNha FROM @t_emp_detail WHERE TotApvNha > 0 GROUP BY div_id, div_name) AS tapvnha
442

443
	ON tdiv.div_id = tapvnha.div_id
(12-12/23)