/****** Script for SelectTopNRows command from SSMS  ******/
SELECT TOP 300 [nomor]
      ,[no_polis]
      ,[NAMA PERUSAHAAN]
      ,[PRODUK]
      ,[GRADE YANG DIKELUARKAN DARI KEPESERTAAN]
      ,[GRADE YANG DITERUSKAN KEPESERTAANNYA]
      ,[JUMLAH PESERTA SEMUA GRADE]
  FROM [GrpInsurance].[dbo].[temp_prib_polis_nonaktif_peserta_v2]

--UPDATE
--  temp_prib_polis_nonaktif_peserta_v2
--SET
--  [GRADE YANG DIKELUARKAN DARI KEPESERTAAN] = '0'
--WHERE
--  [GRADE YANG DIKELUARKAN DARI KEPESERTAAN] IS NULL

SELECT
	[GRADE YANG DIKELUARKAN DARI KEPESERTAAN],
	CAST(LEFT([GRADE YANG DIKELUARKAN DARI KEPESERTAAN],1) AS TINYINT) AS grade_min,
	CAST(REPLACE(RIGHT([GRADE YANG DIKELUARKAN DARI KEPESERTAAN],2), '-', '') AS TINYINT) AS grade_max
FROM
	temp_prib_polis_nonaktif_peserta_v2

UPDATE
  temp_prib_polis_nonaktif_peserta_v2
SET
  grade_min = CAST(LEFT([GRADE YANG DIKELUARKAN DARI KEPESERTAAN],1) AS TINYINT),
  grade_max = CAST(REPLACE(RIGHT([GRADE YANG DIKELUARKAN DARI KEPESERTAAN],2), '-', '') AS TINYINT)


SELECT
	*
FROM
	temp_prib_polis_nonaktif_peserta_v2

------------------------------------------------------------------------------------------------
-- proses
DECLARE
  @nomor TINYINT, 
  @no_polis VARCHAR(20),
  @grade_min TINYINT, 
  @grade_max TINYINT
  
DECLARE list_cursor CURSOR FAST_FORWARD FOR
SELECT
	nomor,
	no_polis,
	grade_min,
	grade_max
FROM
	temp_prib_polis_nonaktif_peserta_v2
--WHERE
--  grade_min > 0

OPEN list_cursor  
FETCH NEXT FROM list_cursor INTO @nomor, @no_polis, @grade_min, @grade_max

WHILE @@FETCH_STATUS = 0  
BEGIN
  
  DECLARE @jml_peserta INT = NULL

  SELECT
  	@jml_peserta = COUNT(*)
  FROM
  	dbo.Peserta AS p INNER JOIN
  	dbo.Polis_Asuransi AS pa ON p.No_Proposal = pa.No_Proposal
  WHERE
    pa.Status = 'I'
    AND pa.No_Polis = @no_polis
    --AND p.Status = 'I'
    AND p.Keterangan = 'LAPSE AUTO 2015-07-01'
    AND p.Grade >= @grade_min
    AND p.Grade <= @grade_max
    
  UPDATE
    temp_prib_polis_nonaktif_peserta_v2
  SET
    jml_peserta = @jml_peserta
  WHERE
    nomor = @nomor
    AND no_polis = @no_polis

  FETCH NEXT FROM list_cursor INTO @nomor, @no_polis, @grade_min, @grade_max
END  

CLOSE list_cursor  
DEALLOCATE list_cursor 

------


------------------------------------------------------------------------------------------------
-- proses SEMUA PESERTA
DECLARE
  @nomor TINYINT, 
  @no_polis VARCHAR(20),
  @grade_min TINYINT, 
  @grade_max TINYINT
  
DECLARE list_cursor CURSOR FAST_FORWARD FOR
SELECT
	nomor,
	no_polis,
	grade_min,
	grade_max
FROM
	temp_prib_polis_nonaktif_peserta_v2
--WHERE
--  grade_min > 0

OPEN list_cursor  
FETCH NEXT FROM list_cursor INTO @nomor, @no_polis, @grade_min, @grade_max

WHILE @@FETCH_STATUS = 0  
BEGIN
  
  DECLARE @jml_peserta_all INT = NULL

  SELECT
  	@jml_peserta_all = COUNT(*)
  FROM
  	dbo.Peserta AS p INNER JOIN
  	dbo.Polis_Asuransi AS pa ON p.No_Proposal = pa.No_Proposal
  WHERE
    pa.Status = 'I'
    AND pa.No_Polis = @no_polis
    AND ( p.Status = 'I'
          OR p.Keterangan = 'LAPSE AUTO 2015-07-01')
    
  UPDATE
    temp_prib_polis_nonaktif_peserta_v2
  SET
    [JUMLAH PESERTA SEMUA GRADE] = @jml_peserta_all
  WHERE
    nomor = @nomor
    AND no_polis = @no_polis

  FETCH NEXT FROM list_cursor INTO @nomor, @no_polis, @grade_min, @grade_max
END  

CLOSE list_cursor  
DEALLOCATE list_cursor 

----------

------------------------------------------------------------------------------------------------
-- proses PESERTA LANJUT
DECLARE
  @nomor TINYINT, 
  @no_polis VARCHAR(20),
  @grade_lanjut_min TINYINT, 
  @grade_lanjut_max TINYINT,
  @no_proposal VARCHAR(9)
  
DECLARE list_cursor CURSOR FAST_FORWARD FOR
SELECT
	nomor,
	no_polis,
	grade_lanjut_min,
	grade_lanjut_max,
	no_proposal
FROM
	temp_prib_polis_nonaktif_peserta_v2
WHERE
  grade_lanjut_min > 0

OPEN list_cursor  
FETCH NEXT FROM list_cursor INTO @nomor, @no_polis, @grade_lanjut_min, @grade_lanjut_max, @no_proposal

WHILE @@FETCH_STATUS = 0  
BEGIN
  
  DECLARE @jml_peserta_lanjut INT = NULL

  SELECT
  	@jml_peserta_lanjut = COUNT(*)
  FROM
  	dbo.Peserta AS p INNER JOIN
  	dbo.Polis_Asuransi AS pa ON p.No_Proposal = pa.No_Proposal
  WHERE
    pa.Status = 'I'
    AND pa.No_Proposal = @no_proposal
    AND p.Status = 'I'
    AND p.Grade >= @grade_lanjut_min
    AND p.Grade <= @grade_lanjut_max
    
  UPDATE
    temp_prib_polis_nonaktif_peserta_v2
  SET
    jml_peserta_lanjut = @jml_peserta_lanjut
  WHERE
    no_proposal = @no_proposal

  FETCH NEXT FROM list_cursor INTO @nomor, @no_polis, @grade_lanjut_min, @grade_lanjut_max, @no_proposal
END  

CLOSE list_cursor  
DEALLOCATE list_cursor 

----------

SELECT
	*
FROM
	temp_prib_polis_nonaktif_peserta_v2