You are on page 1of 49

ALTER PROCEDURE dbo.

sp_split_txt
(
@p_batch_no varchar(50)
,@p_type_txt_detail varchar(50)
,@p_core_db_name varchar(50) = 'MAYBANK_CORE'
,@p_cre_date datetime
,@p_cre_by nvarchar(15)
,@p_cre_ip_address nvarchar(15)
,@p_mod_date datetime
,@p_mod_by nvarchar(15)
,@p_mod_ip_address nvarchar(15)
)as
begin

declare @col_name nvarchar(400)


,@type_data nvarchar(1)
,@length int
,@val_length int
,@orderkey int
,@format nvarchar(10)
,@testvalue nvarchar(50)
,@posisi_sebelum int
,@finco_code nvarchar(100)
,@cast_format nvarchar(100) = ''
, --(+) anggy tambah 20180607
@f_code nvarchar(10)
,@f_system_date datetime

-- split and validasi format


delete log_read_txt_fail
where batch_no = @p_batch_no
and type_txt_detail = @p_type_txt_detail

select @f_code = finco_code


from dbo.master_user
where name in ( select top 1
cre_by
from dbo.upload_txt_path
where batch_no = @p_batch_no )

declare @sql nvarchar(max)


,@sql_dup nvarchar(max)
,@running_number int
,@value nvarchar(max)
,@supposed_length int
,@jml_field int
,@string_awal nvarchar(500)
,@error_message nvarchar(4000)
,@curr_time datetime = getdate()
,@pos_awal int
,@length_sebelum int
,@val_now nvarchar(4000)
,@sql2 nvarchar(4000)

select @supposed_length = sum(length)


,@jml_field = count(1)
from dbo.master_type_txt_read
where type_txt_detail = @p_type_txt_detail
select @f_system_date = maybank_core.dbo.fn_get_system_date()

set @string_awal = 'insert into '+@p_batch_no+'_'+@p_type_txt_detail+' values


('

if not exists (
select 1
from dbo.upload_txt_value
where code_txt_detail = @p_type_txt_detail
and batch_no = @p_batch_no
)
begin
set @error_message='There is no textfile type ' + @p_type_txt_detail
raiserror(@error_message,16,-1)
return
END

declare curval cursor for


select top 500 id, value
from dbo.upload_txt_value
where code_txt_detail = @p_type_txt_detail
and batch_no = @p_batch_no
and isnull(split_done,'0') = '0'
order by id

open curval
fetch next from curval into @running_number, @value

while @@fetch_status = 0
begin

select @val_length = len(value) - 10 -- for additional char from app


from dbo.upload_txt_value
where id = @running_number
and code_txt_detail = @p_type_txt_detail
and batch_no = @p_batch_no

if @val_length = @supposed_length
begin
--loopcolumn
set @sql = @string_awal

set @pos_awal = 1
set @length_sebelum = 0

declare aa cursor for


select col_txt
,type_data
,length
,order_key
,isnull(format, '')
from dbo.master_type_txt_read
where type_txt_detail = @p_type_txt_detail
order by order_key

open aa
fetch next from aa into @col_name, @type_data, @length,
@orderkey, @format
while @@fetch_status = 0
begin
set @pos_awal = @pos_awal + @length_sebelum

set @val_now = substring(@value,@pos_awal, @length)


set @val_now = ltrim(rtrim(@val_now))

set @val_now = replace(@val_now, '@add_char@', '') -- for


additional char from app
set @val_now = replace(replace(@val_now, char(13), ''),
char(10), '')

--(+)KENAN 12/07/2018 18:22:48 CHECK ALPHANUMERIC


if @val_now LIKE '%[^a-zA-Z0-9.,_/\@& -]%'--'^.*?[!#$
%&()*+,\-./:;<=>?@[\\\]^`{|}~]+.*?$'--
begin
set @error_message = 'There are special character on
Batch '+ @p_batch_no + ' row '+ CAST(@running_number as varchar(5)) + ' field
'+CAST(@col_name as varchar(100))
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end

if @p_type_txt_detail = 'DISB6' and rtrim(ltrim(@val_now))


= ''
begin

set @sql = @sql + 'null, '

end
else
begin
if @type_data = 'C'
begin
set @sql = @sql + ''''+ @val_now +''', '
end
else if @type_data = 'N'
begin
IF @val_now = ''
begin
SET @sql = @sql + 'null, '
end
ELSE
BEGIN
SET @cast_format = ''

if @format = ''
begin
set @sql = @sql + 'cast( '''+
@val_now +''' as numeric('+cast(@length as varchar(5))+',0)), '
SET @cast_format ='declare
@dt numeric('+cast(@length as varchar(5))+',0) set @dt = cast( '''+ @val_now +'''
as numeric('+cast(@length as varchar(5))+',0))'

end
else
begin
SET @sql = @sql + 'cast( '''+
@val_now +''' as numeric('+replace(@format,'.',',')+')), '
SET @cast_format ='declare
@dt numeric('+replace(@format,'.',',')+') set @dt = cast( '''+ @val_now +''' as
numeric('+replace(@format,'.',',')+'))'

END

begin try

exec (@cast_format)
end try
begin catch

SET @error_message = 'Format


seharusnya diisi numeric. Pada row '+ CAST(@running_number as varchar(5)) + ' field
'+CAST(@col_name as varchar(100))
SET @curr_time = getdate()
EXEC
dbo.sp_log_read_txt_fail_insert @p_batch_no, @p_type_txt_detail, @running_number,
@error_message, @curr_time
end catch
END
end
else
begin
if ltrim(rtrim(@val_now)) <> '' and
charindex('-',@val_now) <= 0
begin
if @format = 'Ccyy'
begin
set @sql = @sql
+cast(cast(left(@val_now,2) as int) as varchar(5))+right(@val_now,2)+', '
end
else if @format = 'DD'
begin
set @sql = @sql + @val_now +', '
end
else if @format = 'DDMMCCYY'
begin
set @sql = @sql
+''''+cast(cast(left(right(@val_now,4),2) as varchar(5)) as varchar(5))
+right(@val_now,2)+'-'+right(left(@val_now,4),2)+'-'+left(@val_now,2)+''', '

-- cek format date

SET @cast_format ='declare @dt


datetime set @dt = cast('''+cast(cast(left(right(@val_now,4),2) as varchar(5)) as
varchar(5))
+right(@val_now,2)+'-'+right(left(@val_now,4),2)+'-'+left(@val_now,2)+''' as
datetime)'

begin try
exec (@cast_format)
end try
begin catch
set @error_message = 'Invalid
date format. Date format should be ' + @format + ' on row '+ CAST(@running_number
as varchar(5)) + ' field '+CAST(@col_name as varchar(100))
set @curr_time = getdate()
exec
dbo.sp_log_read_txt_fail_insert @p_batch_no, @p_type_txt_detail, @running_number,
@error_message, @curr_time
end catch

--SET @sql = @sql


+''''+CAST(CAST(LEFT(right(@val_now,4),2) AS int)-1 AS VARCHAR)
+RIGHT(@val_now,2)+'-'+RIGHT(LEFT(@val_now,4),2)+'-'+RIGHT(LEFT(@val_now,4),2)+''',
'
end
else if @format = 'YYYYMM'
begin
set @sql = @sql +
''''+@val_now+''', '
end
else if @format = 'YYYYMMDD'
begin
set @sql = @sql
+''''+left(@val_now,4)+'-'+substring(@val_now,5,2)+'-'+RIGHT(@val_now,2)+''', '

set @cast_format = ''


set @cast_format ='declare @dt
datetime set @dt =
cast('''+left(@val_now,4)+'-'+substring(@val_now,5,2)+'-'+left(@val_now,2)+''' as
datetime)'

begin try
exec (@cast_format)
end try
begin CATCH

set @error_message = 'Invalid


date format. Date format should be ' + @format + ' on row '+ CAST(@running_number
as varchar(5)) + ' field '+CAST(@col_name as varchar(100))
set @curr_time = getdate()
exec
dbo.sp_log_read_txt_fail_insert @p_batch_no, @p_type_txt_detail, @running_number,
@error_message, @curr_time
end catch

end
else if @format = 'DDMMYYYY'
begin
set @sql = @sql +''''+
+cast(cast(left(right(@val_now,4),2) as varchar(5)) as varchar(5))
+right(@val_now,2)+'-'+right(left(@val_now,4),2)+'-'+left(@val_now,2)+''', '

set @cast_format = ''


set @cast_format ='declare @dt
datetime set @dt = cast('''+cast(cast(left(right(@val_now,4),2) as varchar(5)) as
varchar(5))
+right(@val_now,2)+'-'+right(left(@val_now,4),2)+'-'+left(@val_now,2)+''' as
datetime)'

begin try
exec (@cast_format)
end try
begin CATCH

set @error_message = 'Invalid


date format. Date format should be ' + @format + ' on row '+ CAST(@running_number
as varchar(5)) + ' field '+CAST(@col_name as varchar(100))
set @curr_time = getdate()
exec
dbo.sp_log_read_txt_fail_insert @p_batch_no, @p_type_txt_detail, @running_number,
@error_message, @curr_time
end catch

end
end
else
begin
set @sql = @sql + ' null, '
end
end
end

set @length_sebelum = @length

fetch next from aa into @col_name, @type_data, @length,


@orderkey, @format
end

close aa
deallocate aa
end
else
begin
set @error_message = 'Invalid total character length on row '+
CAST(@running_number as varchar(5))
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end

set @sql = rtrim(@sql)


set @sql = left(@sql, len(@sql)-1)
set @sql = @sql + ')'

begin try
exec (@sql)
end try
begin catch
set @error_message = 'Error on split textfile value on row ' +
CAST(@running_number as varchar(5)) + '.' + error_message()
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end catch

update dbo.upload_txt_value
set split_done = '1'
where id = @running_number
and batch_no = @p_batch_no
and code_txt_detail = @p_type_txt_detail
fetch next from curval into @running_number, @value
end

close curval
deallocate curval

set @sql = ''


set @sql_dup = ''
declare @hasil int =0

if left(@p_type_txt_detail, 4) = 'DISB'
begin

if (select row from dbo.upload_txt_row where batch_no = @p_batch_no and


code_txt_detail = @p_type_txt_detail) <> (select count(1) from dbo.upload_txt_value
where batch_no = @p_batch_no and code_txt_detail = @p_type_txt_detail)
begin
set @error_message = @p_type_txt_detail + ': Informasi jumlah
data pada header tidak sama dengan jumlah row.'
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end

if (select finco_code from dbo.upload_txt_row where batch_no =


@p_batch_no and code_txt_detail = @p_type_txt_detail) <> @f_code
begin
set @error_message = @p_type_txt_detail + ': Informasi code finco
pada header berbeda.'
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end

SET @sql_dup = 'if exists (SELECT F2, COUNT(1) FROM


'+@p_batch_no+'_'+@p_type_txt_detail+' GROUP BY F2 HAVING count(1) > 1 )begin set
@val = 1 end else begin set @val = 0 end'

execute sp_executesql @sql_dup, N'@val int output', @val=@hasil output

if @hasil = 1
begin
set @error_message = 'Mohon untuk mengecek kembali field Nomor
kontrak harus unik.'
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end

if @p_type_txt_detail = 'DISB1'
begin

SET @sql_dup = ''


set @sql_dup = '
declare @id_no nvarchar(4000),
@error_message
nvarchar(4000),
@curr_time datetime =
getdate()

set @id_no = (select cast(F11 as


nvarchar(10)) + '','' from '+ @p_batch_no + '_' + @p_type_txt_detail +' where F4 =
1 and F11 like ''%[A-Za-z -]%'' for xml path (''''))
set @id_no =
substring(@id_no,1,len(@id_no)-1)

if isnull(@id_no,'''') <> ''''


begin
set @error_message = ''Format No ID
salah, seharusnya numeric ''
set @curr_time = getdate()
exec
dbo.sp_log_read_txt_fail_insert '''+@p_batch_no+''',
'''+@p_type_txt_detail+''','+cast(@running_number as nvarchar(10))+',
@error_message, @curr_time
end

'
execute(@sql_dup)

SET @sql_dup = ''


set @sql_dup = '

declare @f_system_date datetime


select @f_system_date = maybank_core.dbo.fn_get_system_date()

if exists (select 1 from ' + @p_batch_no + '_' +


@p_type_txt_detail + ' where case

when convert(char(6),F23,112) = convert(char(6),@f_system_date,112) then ''NEW''

else ''TAKEOVER''

end = ''NEW'' )
begin

select @val = count(1) from ' + @p_batch_no + '_' +


@p_type_txt_detail + ' where case

when convert(char(6),F23,112) = convert(char(6),@f_system_date,112) then ''NEW''

else ''TAKEOVER''

end = ''NEW''

if @val = (select row from dbo.upload_txt_row where


batch_no = '''+@p_batch_no+''' and code_txt_detail = '''+@p_type_txt_detail+''' )
begin
set @val = 0
end
else
begin
set @val = 1
end
end
else
begin
set @val = 0
end
'

execute sp_executesql @sql_dup, N'@val int output', @val=@hasil


output

if @hasil = 1
begin
set @error_message = 'Terdapat 1 atau lebih kontrak untuk
jenis pencairan yang berbeda (CURRENT/TAKEOVER). Harap cek untuk kolom tanggal
cair/PK.'
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end
set @hasil =0

SET @sql_dup = ''

SET @sql_dup = '

declare @zip_code nvarchar(4000),


@error_message
nvarchar(4000),
@curr_time datetime =
getdate()

set @zip_code = (select cast(F10 as


nvarchar(10)) + '','' from '+ @p_batch_no + '_' + @p_type_txt_detail +' where F10
not in (select code from '+@p_core_db_name+'.dbo.master_zip_code) for xml path
(''''))
set @zip_code =
substring(@zip_code,1,len(@zip_code)-1)

if isnull(@zip_code,'''') <> ''''


begin
set @error_message = ''Kode Pos
Tidak Terdaftar, Seperti Berikut : ''+@zip_code
set @curr_time = getdate()
exec
dbo.sp_log_read_txt_fail_insert '''+@p_batch_no+''',
'''+@p_type_txt_detail+''','+cast(@running_number as nvarchar(10))+',
@error_message, @curr_time
end
'

execute(@sql_dup)

end

if @p_type_txt_detail = 'DISB2'
BEGIN
SET @sql_dup = ''
SET @sql_dup = '

declare @error_message nvarchar(4000),


@curr_time datetime

if (select row from dbo.upload_txt_row where batch_no =


'''+@p_batch_no+''' and code_txt_detail = '''+@p_type_txt_detail+''')
<> (select count(1) from dbo.'+@p_batch_no+'_disb1 disb1
inner join dbo.'+@p_batch_no+'_disb2 disb2 on
disb1.F2 = disb2.F2)
begin
set @error_message = '''+@p_type_txt_detail + ':
Informasi No kontrak ada yang berbeda.''
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert
'''+@p_batch_no+''', '''+@p_type_txt_detail+''', '+cast(@running_number as
nvarchar(10))+', @error_message, @curr_time
end
'

execute(@sql_dup)

set @sql_dup = 'if exists (select F16, count(1) from ' +


@p_batch_no + '_' + @p_type_txt_detail + ' group by F16 having count(1) > 1 )begin
set @val = 1 end else begin set @val = 0 end'

execute sp_executesql @sql_dup, N'@val int output', @val=@hasil


output

if @hasil = 1
begin
set @error_message = 'Mohon untuk mengecek kembali field
nomer mesin kendaraan kerena harus unik. Pada Batch ' + @p_batch_no
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end
set @hasil =0

set @sql_dup = 'if exists (select F17, count(1) from ' +


@p_batch_no + '_' + @p_type_txt_detail + ' group by F17 having count(1) > 1 )begin
set @val = 1 end else begin set @val = 0 end'

execute sp_executesql @sql_dup, N'@val int output', @val=@hasil


output

if @hasil = 1
begin
set @error_message = 'Mohon untuk mengecek kembali field
nomer rangka kendaraan kerena harus unik. Pada Batch ' + @p_batch_no
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
END
set @hasil =0

set @sql_dup = 'if exists (select F19, count(1) from ' +


@p_batch_no + '_' + @p_type_txt_detail + ' group by F19 having count(1) > 1 )begin
set @val = 1 end else begin set @val = 0 end'

execute sp_executesql @sql_dup, N'@val int output', @val=@hasil


output

if @hasil = 1
begin
set @error_message = 'Mohon untuk mengecek kembali field
nomer polis kendaraan kerena harus unik. Pada Batch ' + @p_batch_no
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
END

END

IF @p_type_txt_detail = 'DISB3'
BEGIN

SET @sql_dup = ''


SET @sql_dup = '

declare @error_message nvarchar(4000),


@curr_time datetime

if (select row from dbo.upload_txt_row where batch_no =


'''+@p_batch_no+''' and code_txt_detail = '''+@p_type_txt_detail+''')
<> (select count(1) from dbo.'+@p_batch_no+'_disb1 disb1
inner join dbo.'+@p_batch_no+'_disb2 disb2 on
disb1.F2 = disb2.F2
inner join dbo.'+@p_batch_no+'_disb3 disb3 on
disb2.F2 = disb3.F2)
begin
set @error_message = '''+@p_type_txt_detail + ':
Informasi No kontrak ada yang berbeda.''
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert
'''+@p_batch_no+''', '''+@p_type_txt_detail+''', '+cast(@running_number as
nvarchar(10))+', @error_message, @curr_time
end
'

execute(@sql_dup)

--set @hasil =0

--SET @sql_dup = 'if exists (select F11, count(1) from ' +


@p_batch_no + '_DISB2 where f2 in (select f2 from '+ @p_batch_no + '_DISB3 where
F54 = ''2'') group by F11 having count(1) > 1 )begin set @val = 1 end else begin
set @val = 0 end'

--execute sp_executesql @sql_dup, N'@val int output', @val=@hasil


output

--if @hasil = 1
--begin
-- set @error_message = 'Text File 2 : Mohon untuk mengecek
kembali field nomer bpkb dan objek kendaraan kerena tidak sesuai. Pada Batch ' +
@p_batch_no
-- set @curr_time = getdate()
-- exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
--end

--set @hasil =0

--SET @sql_dup = 'if exists (select F19, count(1) from ' +


@p_batch_no + '_DISB2 where f2 in (select f2 from '+ @p_batch_no + '_DISB3 where
F54 = ''2'') group by F19 having count(1) > 1 )begin set @val = 1 end else begin
set @val = 0 end'

--execute sp_executesql @sql_dup, N'@val int output', @val=@hasil


output

--if @hasil = 1
--begin
-- set @error_message = 'Text File 2 : Mohon untuk mengecek
kembali field nomer Polisi dan objek kendaraan kerena tidak sesuai. Pada Batch ' +
@p_batch_no
-- set @curr_time = getdate()
-- exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
--end

--set @hasil =0

--set @sql_dup = 'if exists (select F13, count(1) from ' +


@p_batch_no + '_DISB2 where f2 in (select f2 from '+ @p_batch_no + '_DISB3 where
F54 = ''2'') group by F13 having count(1) > 1 )begin set @val = 1 end else begin
set @val = 0 end'

--execute sp_executesql @sql_dup, N'@val int output', @val=@hasil


output

--if @hasil = 1
--begin
-- set @error_message = 'Text File 2 : Mohon untuk mengecek
kembali field Nama Pemilik dan objek kendaraan kerena tidak sesuai. Pada Batch ' +
@p_batch_no
-- set @curr_time = getdate()
-- exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
--end

--set @hasil =0

--set @sql_dup = 'if exists (select F12, count(1) from ' +


@p_batch_no + '_DISB2 where f2 in (select f2 from '+ @p_batch_no + '_DISB3 where
F54 = ''2'') group by F12 having count(1) > 1 )begin set @val = 1 end else begin
set @val = 0 end'

--execute sp_executesql @sql_dup, N'@val int output', @val=@hasil


output
--if @hasil = 1
--begin
-- set @error_message = 'Text File 2 : Mohon untuk mengecek
kembali field Alamat Jaminan dan objek kendaraan kerena tidak sesuai. Pada Batch '
+ @p_batch_no
-- set @curr_time = getdate()
-- exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
--end

-- check agreement di core

SET @sql_dup = 'select top 1 @fin = F41 from ' + @p_batch_no +


'_DISB3'

execute sp_executesql @sql_dup, N'@fin nvarchar(100) output',


@fin=@finco_code output

set @sql_dup = 'if exists (select 1 from ' + @p_batch_no +


'_disb3 where f2 in (select agreement_no from
'+@p_core_db_name+'.dbo.batch_request_agreement where batch_request_no in (select
batch_request_no from '+@p_core_db_name+'.dbo.batch_request where batch_status =
''approved'' and financial_company_code = '''+@finco_code+''')) )begin set @val = 1
end else begin set @val = 0 end'

execute sp_executesql @sql_dup, N'@val int output', @val=@hasil


output

if @hasil = 1
begin
set @error_message = 'Nomor kontrak sudah ada pada
pencairan sebelumnya. Pada Batch ' + @p_batch_no
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end
set @hasil =0

END

IF @p_type_txt_detail = 'DISB4'
BEGIN
SET @sql_dup = ''
SET @sql_dup = '

declare @error_message nvarchar(4000),


@curr_time datetime

if (select row from dbo.upload_txt_row where batch_no =


'''+@p_batch_no+''' and code_txt_detail = '''+@p_type_txt_detail+''')
<> (select count(1) from dbo.'+@p_batch_no+'_disb1 disb1
inner join dbo.'+@p_batch_no+'_disb2 disb2 on
disb1.F2 = disb2.F2
inner join dbo.'+@p_batch_no+'_disb3 disb3 on
disb2.F2 = disb3.F2
inner join dbo.'+@p_batch_no+'_disb4 disb4 on
disb3.F2 = disb4.F2)
begin
set @error_message = '''+@p_type_txt_detail + ':
Informasi No kontrak ada yang berbeda.''
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert
'''+@p_batch_no+''', '''+@p_type_txt_detail+''', '+cast(@running_number as
nvarchar(10))+', @error_message, @curr_time
end
'

execute(@sql_dup)

END

IF @p_type_txt_detail = 'DISB5'
BEGIN
SET @sql_dup = ''
SET @sql_dup = '

declare @error_message nvarchar(4000),


@curr_time datetime

if (select row from dbo.upload_txt_row where batch_no =


'''+@p_batch_no+''' and code_txt_detail = '''+@p_type_txt_detail+''')
<> (select count(1) from dbo.'+@p_batch_no+'_disb1 disb1
inner join dbo.'+@p_batch_no+'_disb2 disb2 on
disb1.F2 = disb2.F2
inner join dbo.'+@p_batch_no+'_disb3 disb3 on
disb2.F2 = disb3.F2
inner join dbo.'+@p_batch_no+'_disb4 disb4 on
disb3.F2 = disb4.F2
inner join dbo.'+@p_batch_no+'_disb5 disb5 on
disb4.F2 = disb5.F2)
begin
set @error_message = '''+@p_type_txt_detail + ':
Informasi No kontrak ada yang berbeda.''
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert
'''+@p_batch_no+''', '''+@p_type_txt_detail+''', '+cast(@running_number as
nvarchar(10))+', @error_message, @curr_time
end
'

execute(@sql_dup)

END

IF @p_type_txt_detail = 'DISB6'
BEGIN
SET @sql_dup = ''
SET @sql_dup = '

declare @error_message nvarchar(4000),


@curr_time datetime

if (select row from dbo.upload_txt_row where batch_no =


'''+@p_batch_no+''' and code_txt_detail = '''+@p_type_txt_detail+''')
<> (select count(1) from dbo.'+@p_batch_no+'_disb1 disb1
inner join dbo.'+@p_batch_no+'_disb2 disb2 on
disb1.F2 = disb2.F2
inner join dbo.'+@p_batch_no+'_disb3 disb3 on
disb2.F2 = disb3.F2
inner join dbo.'+@p_batch_no+'_disb4 disb4 on
disb3.F2 = disb4.F2
inner join dbo.'+@p_batch_no+'_disb5 disb5 on
disb4.F2 = disb5.F2
inner join dbo.'+@p_batch_no+'_disb6 disb6 on
disb5.F2 = disb6.F2)
begin
set @error_message = '''+@p_type_txt_detail + ':
Informasi No kontrak ada yang berbeda.''
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert
'''+@p_batch_no+''', '''+@p_type_txt_detail+''', '+cast(@running_number as
nvarchar(10))+', @error_message, @curr_time
end
'

execute(@sql_dup)

END

end
else if left(@p_type_txt_detail, 4) = 'PAYM'
begin

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_trx_code nvarchar(2),
@f_late_tghn decimal(18,2),
@f_late_byr decimal(18,2),
@f_past_due_days int,
@f_ovd_days int,
@f_os_period int,
@f_remain_tenor int,
@f_batch_no nvarchar(50),
@f_agreement_no nvarchar(50),
@f_agreement_date datetime,
@f_contract_date datetime,
@f_payment_date datetime,
@f_pokok decimal(18,2),
@f_margin decimal(18,2),
@f_installment decimal(18,2),
@f_latefee decimal(18,2),
@f_os_installment decimal(18,2),
@f_os_latefee decimal(18,2)

declare c_main cursor read_only fast_forward for


SELECT F3, F5, F12, F14, F25, F26, F7, F1, F22, F24, F10, F27
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_past_due_days, @f_remain_tenor, @f_trx_code,
@f_late_byr, @f_late_tghn, @f_contract_date,@f_payment_date,@f_pokok, @f_margin,
@f_installment, @f_latefee
while @@fetch_status = 0
begin
set @running_number = @running_number + 1

select @f_agreement_no = am.agreement_no ,


@f_batch_no = am.batch_no,
@f_agreement_date = am.agreement_date,
@f_ovd_days = ai.overdue_days,
@f_os_period = ai.os_period,
@f_os_installment = os_principal + os_margin,
@f_os_latefee = late_fee_amount

from '+@p_core_db_name+'.dbo.agreement_main am
inner join ' + @p_core_db_name + '.dbo.agreement_information ai
on ai.agreement_no = am.agreement_no
where finco_agreement_no = @f_no_kontrak

-- Nomor kontrak harus ada di CORE dengan status Active

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak ada dalam proses ET


if exists (select 1 from ' + @p_core_db_name + '.dbo.ET_DETAIL ed

inner join ' +


@p_core_db_name + '.dbo.ET_HEADER eh on (eh.et_no = ed.et_no)
where finco_agreement_no
= @f_no_kontrak
and eh.STATUS in
(''NEW'',''ONAPPROVAL'',''APPROVED''))
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' Sedang dalam proses ET.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

if not exists(select 1 from '+@p_core_db_name+'.dbo.batch_main


where batch_no = @f_batch_no and financial_company_code = '''+@f_code+''')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Tidak terdaftar.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

--if cast(@f_contract_date as date) <> cast(@f_agreement_date as


date)
-- begin
-- set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '': Contract date tidak sama dengan tanggal cair .''
-- exec dbo.sp_log_read_txt_fail_insert ''' +
@p_batch_no + ''', ''' + @p_type_txt_detail + ''', @running_number, @error_message,
@curr_time
-- end

-- Past Due yang dikirim tidak sesuai dengan Pastdue di data


aging
if @f_past_due_days <> @f_ovd_days
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data Pastdue days / Customer days past due yang tidak sesuai.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end '
SET @sql2 = '
-- Remaining Tenor tidak sesuai dengan sisa tenor di Core

--if @f_remain_tenor <> @f_os_period


--begin
-- set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data Remaining Tenor yang tidak sesuai.''
-- exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''',
''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

--end

-- validasi tgl payment harus sama dengan tgl system


if cast(@f_payment_date as date) <> cast( '''+
convert(nvarchar(20),@f_system_date,120) +''' as date )
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' Peyament date berbeda dengan tgl system.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- cicilan finco
if ( isnull(@f_pokok,0) + isnull(@f_margin,0) ) <> @f_installment
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' Installment tidak sama dengan principal + interest .''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- trx code
if @f_trx_code = 10
begin
if (isnull(@f_pokok,0) + isnull(@f_margin,0) ) <= 0
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Nilai pembayaran angsuran harus lebih dari 0 .''
exec dbo.sp_log_read_txt_fail_insert ''' +
@p_batch_no + ''', ''' + @p_type_txt_detail + ''', @running_number, @error_message,
@curr_time
end
end
--else if @f_trx_code = 14
-- begin
-- if isnull(@f_latefee,0) <= 0
-- begin
-- set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Nilai Late fee harus lebih dari 0.''
-- exec dbo.sp_log_read_txt_fail_insert ''' +
@p_batch_no + ''', ''' + @p_type_txt_detail + ''', @running_number, @error_message,
@curr_time
-- end
-- end

if (isnull(@f_pokok,0)+isnull(@f_margin,0)) > @f_os_installment


begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Nilai pembayaran terlalu besar dari sisa hutang.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

if @f_latefee > @f_os_latefee


begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' Nilai pembayaran denda terlalu besar dari denda yang seharusnya.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

fetch next from c_main


into @f_no_kontrak, @f_past_due_days, @f_remain_tenor, @f_trx_code,
@f_late_byr, @f_late_tghn, @f_contract_date, @f_payment_date, @f_pokok, @f_margin,
@f_installment, @f_latefee
end
close c_main
deallocate c_main'

--exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,
--
@p_trans_desc = ''PAYMENT'',
--
@p_cre_date = ''' + cast(@p_cre_date as
nvarchar(50)) + ''',
--
@p_cre_by = ''' + @p_cre_by + ''',
--
@p_cre_ip_address = ''' + @p_cre_ip_address + ''',
--
@p_mod_date = ''' + cast(@p_mod_date as
nvarchar(50)) + ''',
--
@p_mod_by = ''' + @p_mod_by + ''',
--
@p_mod_ip_address = ''' + @p_mod_ip_address + '''

/*
-- Jika bayar denda nilai denda yang dibayar tidak melebihi nilai
tagihan dendanya
if @f_trx_code = ''14'' and @f_late_byr < @f_late_tghn
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki nominal pembayaran Late Fee dibawah nominal tagihan Late Fee.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end
*/
exec (@sql+@sql2)

--EXEC dbo.sp_check_mandatory_perdetail @p_batch_no = @p_batch_no, --


nvarchar(50)
-- @p_txt_detail = @p_type_txt_detail -- nvarchar(10)

end
else if left(@p_type_txt_detail,9) = 'BPKB_SENT'
begin
-- validasi control duplicate di textfile
------------------------------------
set @sql_dup = 'if exists (select F3, count(1) from ' + @p_batch_no +
'_' + @p_type_txt_detail + ' group by F3 having count(1) > 1 )begin set @val = 1
end else begin set @val = 0 end'
print @sql_dup
execute sp_executesql @sql_dup, N'@val int output', @val=@hasil output

if @hasil = 1
begin
set @error_message = 'Nomor BPKB harus unik. Pada Batch ' +
@p_batch_no
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end
set @hasil =0

set @sql_dup = 'if exists (select F5, count(1) from ' + @p_batch_no +
'_' + @p_type_txt_detail + ' group by F5 having count(1) > 1 )begin set @val = 1
end else begin set @val = 0 end'

execute sp_executesql @sql_dup, N'@val int output', @val=@hasil output

if @hasil = 1
begin
set @error_message = 'Nomor Mesin harus unik. Pada Batch ' +
@p_batch_no
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end
set @hasil =0

set @sql_dup = 'if exists (select F7, count(1) from ' + @p_batch_no +
'_' + @p_type_txt_detail + ' group by F7 having count(1) > 1 )begin set @val = 1
end else begin set @val = 0 end'

execute sp_executesql @sql_dup, N'@val int output', @val=@hasil output

if @hasil = 1
begin
set @error_message = 'Nomor Rangka harus unik. Pada Batch ' +
@p_batch_no
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end
-- End of validasi control duplicate di textfile
------------------------------------

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_bpkb_no nvarchar(20),
@f_mesin_no nvarchar(20),
@f_rangka_no nvarchar(20),
@f_coll_doc_no nvarchar(20),
@f_engine_no nvarchar(20),
@f_chasis_no nvarchar(20),
@f_agreement_no nvarchar(50),
@f_receive_no nvarchar(50)

declare c_main cursor read_only fast_forward for


select F1, F3, F5, F7
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_bpkb_no, @f_mesin_no, @f_rangka_no

while @@fetch_status = 0
begin
select @f_coll_doc_no = '''',
@f_engine_no = '''',
@f_chasis_no = '''',
@f_agreement_no = ''''

set @running_number = @running_number + 1

select @f_agreement_no = agreement_no


from ' + @p_core_db_name + '.dbo.agreement_main
where finco_agreement_no = @f_no_kontrak

select @f_coll_doc_no = collateral_doc_no,


@f_engine_no = engine_no,
@f_chasis_no = chassis_no
from ' + @p_core_db_name + '.dbo.agreement_asset
where agreement_no = @f_agreement_no

-- Nomor kontrak yang masih dalam proses


if exists (select 1 from ' + @p_core_db_name +
'.dbo.doc_receive_header where status not in (''APPROVED'',''REJECT'') AND
receive_no in (select receive_no from ' + @p_core_db_name +
'.dbo.doc_receive_detail where agreement_no = @f_agreement_no) )
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' masih dalam Proses pengajuan.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor kontrak harus ada di CORE dengan status Active

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'') and rtrim(ltrim(isnull(@f_coll_doc_no,''''))) <> ''''
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor BPKB ada di Core


if isnull(@f_coll_doc_no,'''') = ''''
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data nomor BPKB yang tidak terdaftar pada sistem.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end
'

SET @sql2 = '


-- BPKB No sesuai dengan No BPKB yang sudah terdaftar di CORE
if rtrim(ltrim(@f_bpkb_no)) <> isnull(@f_coll_doc_no,'''')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data nomor BPKB yang tidak sesuai.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

-- Chassis No sesuai dengan No BPKB yang sudah terdaftar di CORE


if rtrim(ltrim(@f_rangka_no)) <> isnull(@f_chasis_no,'''')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data nomor Rangka yang tidak sesuai.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

-- Engine No sesuai dengan No BPKB yang sudah terdaftar di CORE


if rtrim(ltrim(@f_mesin_no)) <> isnull(@f_engine_no,'''')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data nomor Mesin yang tidak sesuai.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

fetch next from c_main


into @f_no_kontrak, @f_bpkb_no, @f_mesin_no, @f_rangka_no

end

close c_main
deallocate c_main'

exec (@sql+@sql2)

end
else if left(@p_type_txt_detail, 11) = 'BPKB_BORROW'
begin
-- validasi control duplicate di textfile
------------------------------------
set @sql_dup = 'if exists (select F2, count(1) from ' + @p_batch_no +
'_' + @p_type_txt_detail + ' group by F2 having count(1) > 1 )begin set @val = 1
end else begin set @val = 0 end'

execute sp_executesql @sql_dup, N'@val int output', @val=@hasil output

if @hasil = 1
begin
set @error_message = 'Nomor BPKB harus unik. Pada Batch ' +
@p_batch_no
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end
-- End of validasi control duplicate di textfile
------------------------------------

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_bpkb_no nvarchar(20),
@f_mesin_no nvarchar(20),
@f_rangka_no nvarchar(20),
@f_coll_doc_no nvarchar(20),
@f_engine_no nvarchar(20),
@f_chasis_no nvarchar(20),
@f_tgl_jth_tmpo datetime,
@f_last_due_date datetime,
@f_agreement_no nvarchar(50),
@f_datesystem datetime

set @f_datesystem = '+@p_core_db_name+'.dbo.fn_get_system_date()


declare c_main cursor read_only fast_forward for
select F1, F2, F4
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_bpkb_no, @f_tgl_jth_tmpo

while @@fetch_status = 0
begin
select @f_coll_doc_no = '''',
@f_engine_no = '''',
@f_chasis_no = '''',
@f_last_due_date = null

set @running_number = @running_number + 1

select @f_agreement_no = agreement_no


from ' + @p_core_db_name + '.dbo.agreement_main
where finco_agreement_no = @f_no_kontrak

select @f_coll_doc_no = collateral_doc_no,


@f_engine_no = engine_no,
@f_chasis_no = chassis_no
from ' + @p_core_db_name + '.dbo.agreement_asset
where agreement_no = @f_agreement_no

select @f_last_due_date = maturity_date from ' + @p_core_db_name


+ '.dbo.agreement_main where agreement_no = @f_agreement_no

-- Nomor kontrak harus ada di CORE dengan status Active

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'') and isnull(@f_coll_doc_no,'''') <> ''''
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- dokument masih dalam proses


if exists (select 1 from '+ @p_core_db_name +
'.dbo.doc_borrow_req_header where status not in (''APPROVED'',''REJECT'') and
borrow_req_no in (select borrow_req_no FROM '+ @p_core_db_name +
'.dbo.doc_borrow_req_detail where document_no in (select document_no from '+
@p_core_db_name + '.dbo.document_main where general_doc_code = ''0020'' and
agreement_no = @f_agreement_no)))
begin
set @error_message = ''Dokumen BPKB untuk nomor kontrak ''
+ @f_no_kontrak + '' masih dalam proses pengajuan.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end
'

SET @sql2 = '


-- Nomor BPKB ada di Core
if isnull(@f_coll_doc_no,'''') = ''''
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data nomor BPKB yang tidak terdaftar pada sistem.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

-- BPKB No sesuai dengan No BPKB yang sudah terdaftar di CORE


if @f_bpkb_no <> isnull(@f_coll_doc_no,'''')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data nomor BPKB yang tidak sesuai.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

-- Status document ada di MBI dan tidak sedang dipinjam (Status :


ON HAND)
if not exists (select 1 from ' + @p_core_db_name +
'.dbo.document_main where agreement_no = @f_agreement_no and general_doc_code =
''0020'' and status = ''ON HAND'')
begin
set @error_message = ''Dokumen BPKB untuk nomor kontrak ''
+ @f_no_kontrak + '' tidak/belum terdapat pada Maybank.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

-- untuk bpkb borrow validasi jatuh peminjaman harus lebih kecil


sama dengan tanggal system, + jumlah hari tbl company field bpkb max
if cast(@f_tgl_jth_tmpo as date) > (select
cast(dateadd(day,bpkb_max_return,@f_datesystem) as date) from ' + @p_core_db_name +
'.dbo.master_financial_company where code = '''+@f_code+''')
begin
set @error_message = ''Dokumen BPKB untuk nomor kontrak ''
+ @f_no_kontrak + '' jatuh tempo peminjaman melewati batas waktu yang ditentukan.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

fetch next from c_main


into @f_no_kontrak, @f_bpkb_no, @f_tgl_jth_tmpo

end

close c_main
deallocate c_main'
exec (@sql+@sql2)

end
else if left(@p_type_txt_detail, 11) = 'BPKB_RETURN'
begin
-- validasi control duplicate di textfile
------------------------------------
set @sql_dup = 'if exists (select F2, count(1) from ' + @p_batch_no +
'_' + @p_type_txt_detail + ' group by F2 having count(1) > 1 )begin set @val = 1
end else begin set @val = 0 end'

execute sp_executesql @sql_dup, N'@val int output', @val=@hasil output

if @hasil = 1
begin
set @error_message = 'Nomor BPKB harus unik. Pada Batch ' +
@p_batch_no
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end
-- End of validasi control duplicate di textfile
------------------------------------

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_bpkb_no nvarchar(20),
@f_mesin_no nvarchar(20),
@f_rangka_no nvarchar(20),
@f_coll_doc_no nvarchar(20),
@f_engine_no nvarchar(20),
@f_chasis_no nvarchar(20),
@f_tgl_jth_tmpo datetime,
@f_last_due_date datetime,
@f_agreement_no nvarchar(50)

declare c_main cursor read_only fast_forward for


select F1, F2
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_bpkb_no

while @@fetch_status = 0
begin
select @f_coll_doc_no = '''',
@f_engine_no = '''',
@f_chasis_no = '''',
@f_last_due_date = null

set @running_number = @running_number + 1

select @f_agreement_no = agreement_no


from ' + @p_core_db_name + '.dbo.agreement_main
where finco_agreement_no = @f_no_kontrak

select @f_coll_doc_no = collateral_doc_no,


@f_engine_no = engine_no,
@f_chasis_no = chassis_no
from ' + @p_core_db_name + '.dbo.agreement_asset
where agreement_no = @f_agreement_no

-- Nomor kontrak harus ada di CORE dengan status Active

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'') and isnull(@f_coll_doc_no,'''') <> ''''
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- dokument masih dalam proses


if exists (select 1 from '+ @p_core_db_name +
'.dbo.doc_return_req_header where status not in (''APPROVED'',''REJECT'') and
return_req_no in (select return_req_no from '+ @p_core_db_name +
'.dbo.doc_return_req_detail where document_no in (select document_no from '+
@p_core_db_name + '.dbo.document_main where general_doc_code = ''0020'' and
agreement_no = @f_agreement_no)))
begin
set @error_message = ''Dokumen BPKB untuk nomor kontrak ''
+ @f_no_kontrak + '' masih dalam proses pengajuan.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

-- Nomor BPKB ada di Core


if isnull(@f_coll_doc_no,'''') = ''''
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data nomor BPKB yang tidak terdaftar pada sistem.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end
'

SET @sql2 = '


-- BPKB No sesuai dengan No BPKB yang sudah terdaftar di CORE
if @f_bpkb_no <> isnull(@f_coll_doc_no,'''')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data nomor BPKB yang tidak sesuai.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

-- Status document sedang dipinjam


if not exists (select 1 from ' + @p_core_db_name +
'.dbo.document_main where agreement_no = @f_agreement_no and general_doc_code =
''0020'' and status = ''BORROW'')
begin
set @error_message = ''Dokumen BPKB untuk nomor kontrak ''
+ @f_no_kontrak + '' tidak/belum dipinjam dan masih terdapat pada Maybank.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

fetch next from c_main


into @f_no_kontrak, @f_bpkb_no

end

close c_main
deallocate c_main'

exec (@sql+@sql2)

end
else if left(@p_type_txt_detail, 12) = 'BPKB_RELEASE'
begin
-- validasi control duplicate di textfile
------------------------------------
set @sql_dup = 'if exists (select F2, count(1) from ' + @p_batch_no +
'_' + @p_type_txt_detail + ' group by F2 having count(1) > 1 )begin set @val = 1
end else begin set @val = 0 end'

execute sp_executesql @sql_dup, N'@val int output', @val=@hasil output

if @hasil = 1
begin
set @error_message = 'Nomor BPKB harus unik. Pada Batch ' +
@p_batch_no
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no,
@p_type_txt_detail, @running_number, @error_message, @curr_time
end
-- End of validasi control duplicate di textfile
------------------------------------

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_bpkb_no nvarchar(20),
@f_mesin_no nvarchar(20),
@f_rangka_no nvarchar(20),
@f_coll_doc_no nvarchar(20),
@f_engine_no nvarchar(20),
@f_chasis_no nvarchar(20),
@f_tgl_jth_tmpo datetime,
@f_last_due_date datetime,
@f_agreement_no nvarchar(50)

declare c_main cursor read_only fast_forward for


select F1, F2
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_bpkb_no

while @@fetch_status = 0
begin
select @f_coll_doc_no = '''',
@f_engine_no = '''',
@f_chasis_no = '''',
@f_last_due_date = null

select @f_agreement_no = agreement_no


from ' + @p_core_db_name + '.dbo.agreement_main
where finco_agreement_no = @f_no_kontrak

set @running_number = @running_number + 1

select @f_coll_doc_no = collateral_doc_no,


@f_engine_no = engine_no,
@f_chasis_no = chassis_no
from ' + @p_core_db_name + '.dbo.agreement_asset
where agreement_no = @f_agreement_no

-- Nomor kontrak harus ada di CORE dengan status Active

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status <>
''ACTIVE'') and isnull(@f_coll_doc_no,'''') <> ''''
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- dokument masih dalam proses


if exists (select 1 from '+ @p_core_db_name +
'.dbo.doc_release_header where status not in (''APPROVED'',''REJECT'') and
release_no in (select release_no from '+ @p_core_db_name + '.dbo.doc_release_detail
where document_no in (select document_no from '+ @p_core_db_name +
'.dbo.document_main where general_doc_code = ''0020'' and agreement_no =
@f_agreement_no)))
begin
set @error_message = ''Dokumen BPKB untuk nomor kontrak ''
+ @f_no_kontrak + '' masih dalam proses pengajuan.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

-- Nomor BPKB ada di Core


if isnull(@f_coll_doc_no,'''') = ''''
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data nomor BPKB yang tidak terdaftar pada sistem.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

-- BPKB No sesuai dengan No BPKB yang sudah terdaftar di CORE


if @f_bpkb_no <> isnull(@f_coll_doc_no,'''')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' memiliki data nomor BPKB yang tidak sesuai.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time

end

fetch next from c_main


into @f_no_kontrak, @f_bpkb_no

end

close c_main
deallocate c_main'

exec (@sql)

end
else if left(@p_type_txt_detail, 2) = 'ET'
begin

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_batch_no nvarchar(50),
@f_agreement_no nvarchar(50)

declare c_main cursor read_only fast_forward for


SELECT F1
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak
while @@fetch_status = 0
begin
set @running_number = @running_number + 1

select @f_agreement_no = am.agreement_no ,


@f_batch_no = am.batch_no

from '+@p_core_db_name+'.dbo.agreement_main am
inner join ' + @p_core_db_name + '.dbo.batch_main bm on
bm.batch_no = am.batch_no
where am.finco_agreement_no = @f_no_kontrak

-- Nomor kontrak harus ada di CORE dengan status Active


if not exists (select 1 from ' + @p_core_db_name +
'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Terdaftar


if not exists(select 1 from '+@p_core_db_name+'.dbo.batch_main
where batch_no = @f_batch_no and financial_company_code = '''+@f_code+''')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Tidak terdaftar.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Ada Ditransaksi lain


if exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_transaction where agreement_no = @f_agreement_no)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Ada Ditransaksi lain.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

fetch next from c_main


into @f_no_kontrak
end
close c_main
deallocate c_main
'
--exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,
--
@p_trans_desc = ''ET'',
--
@p_cre_date = ''' + cast(@p_cre_date as
nvarchar(50)) + ''',
--
@p_cre_by = ''' + @p_cre_by + ''',
--
@p_cre_ip_address = ''' + @p_cre_ip_address + ''',
--
@p_mod_date = ''' + cast(@p_mod_date as
nvarchar(50)) + ''',
--
@p_mod_by = ''' + @p_mod_by + ''',
--
@p_mod_ip_address = ''' + @p_mod_ip_address + '''
exec (@sql)

set @sql = '

if not exists(select 1 from log_read_txt_fail where batch_no = ''' +


@p_batch_no + ''')
begin
ALTER TABLE ' + @p_batch_no + '_' + @p_type_txt_detail + '
add F2 decimal(18,2)
end
'
exec (@sql)

set @sql ='

if exists(select 1 from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME =


'''+ @p_batch_no + '_' + @p_type_txt_detail + '''and COLUMN_NAME = ''F2'')
BEGIN
exec [sp_calculate_et] ''' + @p_batch_no + ''',''' +
@p_type_txt_detail + ''',''' + @p_core_db_name + '''
END'

exec (@sql)
END
else if left(@p_type_txt_detail, 5) = 'WAIVE'
begin

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_batch_no nvarchar(50),
@f_agreement_no nvarchar(50),
@f_waive_amount decimal(18,2)

declare c_main cursor read_only fast_forward for


SELECT F1, F2
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_waive_amount
while @@fetch_status = 0
begin
set @running_number = @running_number + 1

select @f_agreement_no = am.agreement_no ,


@f_batch_no = am.batch_no
from '+@p_core_db_name+'.dbo.agreement_main am
inner join ' + @p_core_db_name + '.dbo.batch_main bm
on bm.batch_no = am.batch_no
where am.finco_agreement_no = @f_no_kontrak

-- Nomor kontrak harus ada di CORE dengan status Active

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Terdaftar


if not exists(select 1 from '+@p_core_db_name+'.dbo.batch_main
where batch_no = @f_batch_no and financial_company_code = '''+@f_code+''')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Tidak terdaftar.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Ada Ditransaksi lain


if exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_transaction where agreement_no = @f_agreement_no)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Ada Ditransaksi lain.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Latefee Amount > 0


if not exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_information where late_fee_amount > 0 and
agreement_no = @f_agreement_no)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Tidak memiliki nilai denda.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

--- Nilai denda yang diwaive tidak boleh melebihi nilai denda
yang dimiliki kontrak
if exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_information where late_fee_amount <
@f_waive_amount and agreement_no = @f_agreement_no)
begin
set @error_message = ''Nilai waive '' + @f_no_kontrak
+ '' lebih besar dari nilai denda yang diwaive''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

fetch next from c_main


into @f_no_kontrak, @f_waive_amount
end
close c_main
deallocate c_main
'
--exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,
--
@p_trans_desc = ''WAIVE'',
--
@p_cre_date = ''' + cast(@p_cre_date as
nvarchar(50)) + ''',
--
@p_cre_by = ''' + @p_cre_by + ''',
--
@p_cre_ip_address = ''' + @p_cre_ip_address + ''',
--
@p_mod_date = ''' + cast(@p_mod_date as
nvarchar(50)) + ''',
--
@p_mod_by = ''' + @p_mod_by + ''',
--
@p_mod_ip_address = ''' + @p_mod_ip_address + '''
exec (@sql)

END
else if left(@p_type_txt_detail, 9) = 'REPOSSESS'
begin

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_batch_no nvarchar(50),
@f_agreement_no nvarchar(50),
@f_repossess_date datetime,
@f_repossess_collector nvarchar(1),
@f_reason nvarchar(100),
@f_repossess_fee decimal(18,2),
@f_asset_receive_date datetime,
@f_asset_location nvarchar(200),
@f_repossess_location nvarchar(200)

declare c_main cursor read_only fast_forward for


SELECT F1, F2, F3, F4, F5, F6, F7, f8
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_repossess_date, @f_repossess_collector, @f_reason,
@f_repossess_fee, @f_asset_receive_date, @f_asset_location, @f_repossess_location
while @@fetch_status = 0
begin
set @running_number = @running_number + 1

select @f_agreement_no = am.agreement_no ,


@f_batch_no = am.batch_no
from '+@p_core_db_name+'.dbo.agreement_main am
inner join ' + @p_core_db_name + '.dbo.batch_main bm
on bm.batch_no = am.batch_no
where am.finco_agreement_no = @f_no_kontrak

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

if not exists(select 1 from '+@p_core_db_name+'.dbo.batch_main


where batch_no = @f_batch_no and financial_company_code = '''+@f_code+''')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Tidak terdaftar.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

if exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_transaction where agreement_no = @f_agreement_no)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Ada Ditransaksi lain.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end
'
set @sql2 ='
if exists(select 1 from '+@p_core_db_name+'.dbo.agreement_main
where agreement_no = @f_agreement_no and sub_status = ''REPOSSESS'' or sub_status =
''INVENTORY'')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' tidak boleh berstatus repossess/inventory.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

if not exists(select 1 from ' + @p_batch_no + '_' +


@p_type_txt_detail + ' where cast(@f_asset_receive_date as date) >
cast(@f_repossess_date as date))
begin
set @error_message = ''Tanggal Repossess lebih besar
dari tanggal terima.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

if exists(select 1 from ' + @p_batch_no + '_' +


@p_type_txt_detail + ' where cast(@f_repossess_date as date) > cast(@curr_time as
date))
begin
set @error_message = ''Tanggal Repossess tidak boleh
lebih besar dari tanggal sistem.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

fetch next from c_main


into @f_no_kontrak, @f_repossess_date, @f_repossess_collector,
@f_reason, @f_repossess_fee, @f_asset_receive_date, @f_asset_location,
@f_repossess_location
end
close c_main
deallocate c_main
'
exec (@sql+@sql2)
--exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,
--
@p_trans_desc = ''REPOSSESS'',
--
@p_cre_date = ''' + cast(@p_cre_date as
nvarchar(50)) + ''',
--
@p_cre_by = ''' + @p_cre_by + ''',
--
@p_cre_ip_address = ''' + @p_cre_ip_address + ''',
--
@p_mod_date = ''' + cast(@p_mod_date as
nvarchar(50)) + ''',
--
@p_mod_by = ''' + @p_mod_by + ''',
--
@p_mod_ip_address = ''' + @p_mod_ip_address + '''
END
else if left(@p_type_txt_detail, 9) = 'INVENTORY'
begin

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_batch_no nvarchar(50),
@f_agreement_no nvarchar(50),
@f_inventory_date datetime,
@f_appraisal_value decimal(18,2),
@f_grade_object nvarchar(10),
@f_recondition_cost decimal(18,2),
@f_inventory_cost decimal(18,2),
@f_expected_sale_price decimal(18,2),
@f_inventory_location nvarchar(200),
@f_repossess_date datetime

declare c_main cursor read_only fast_forward for


SELECT F1, F2, F3, F4, F5, F6, F7, f8
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_inventory_date, @f_appraisal_value,
@f_grade_object, @f_recondition_cost, @f_inventory_cost, @f_expected_sale_price,
@f_inventory_location
while @@fetch_status = 0
begin
set @running_number = @running_number + 1

select @f_agreement_no = am.agreement_no ,


@f_batch_no = am.batch_no,
@f_repossess_date = rd.repossess_date
from '+@p_core_db_name+'.dbo.agreement_main am
inner join ' + @p_core_db_name + '.dbo.batch_main bm
on bm.batch_no = am.batch_no
inner join ' + @p_core_db_name +
'.dbo.repossess_detail rd on rd.agreement_no = am.agreement_no
where am.finco_agreement_no = @f_no_kontrak

-- Nomor kontrak harus ada di CORE dengan status Active

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Terdaftar


if not exists(select 1 from '+@p_core_db_name+'.dbo.batch_main
where batch_no = @f_batch_no and financial_company_code = '''+@f_code+''')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Tidak terdaftar.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Ada Ditransaksi lain


if exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_transaction where agreement_no = @f_agreement_no)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Ada Ditransaksi lain.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end'
set @sql2 = '
if not exists(select 1 from ' + @p_batch_no + '_' +
@p_type_txt_detail + ' where cast(@f_inventory_date as date) >=
cast(@f_repossess_date as date))
begin
set @error_message = ''Tanggal Inventory harus lebih
besar dari tanggal repo.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Tanggal inventory tidak boleh kurang dari tanggal sistem


if exists(select 1 from ' + @p_batch_no + '_' +
@p_type_txt_detail + ' where cast(@f_inventory_date as date) < cast(@curr_time as
date))
begin
set @error_message = ''Tanggal inventory tidak boleh
kurang dari tanggal sistem.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end
-- Kode Grade object harus ada di
MASTER_FINANCIAL_COMPANY_OBJECT_GRADE
if not exists(select 1 from
'+@p_core_db_name+'.dbo.master_financial_company_object_grade where grade_code =
@f_grade_object)
begin
set @error_message = ''Code Object Grade Nomor
kontrak '' + @f_no_kontrak + '' Tidak terdaftar.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Expected sale price harus minimum Appraisal value+recondition


cost+inventory cost
if not exists(select 1 from ' + @p_batch_no + '_' +
@p_type_txt_detail + ' where @f_expected_sale_price >=
@f_appraisal_value+@f_recondition_cost+@f_inventory_cost)
begin
set @error_message = ''Expected sale Nomor kontrak ''
+ @f_no_kontrak + '' Dibawah Minimum.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

fetch next from c_main


into @f_no_kontrak, @f_inventory_date, @f_appraisal_value,
@f_grade_object, @f_recondition_cost, @f_inventory_cost, @f_expected_sale_price,
@f_inventory_location
end
close c_main
deallocate c_main
'
--exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,
--
@p_trans_desc = ''INVENTORY'',
--
@p_cre_date = ''' + cast(@p_cre_date as
nvarchar(50)) + ''',
--
@p_cre_by = ''' + @p_cre_by + ''',
--
@p_cre_ip_address = ''' + @p_cre_ip_address + ''',
--
@p_mod_date = ''' + cast(@p_mod_date as
nvarchar(50)) + ''',
--
@p_mod_by = ''' + @p_mod_by + ''',
--
@p_mod_ip_address = ''' + @p_mod_ip_address + '''
exec (@sql+@sql2)
END
else if left(@p_type_txt_detail, 10) = 'REDEMPTION'
begin

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_batch_no nvarchar(50),
@f_agreement_no nvarchar(50),
@f_redemption_date datetime,
@f_client_payment decimal(18,2),
@f_asset_release_date datetime,
@f_release_location nvarchar(200),
@f_redemption_method nvarchar(1),
@f_value nvarchar(1)

declare c_main cursor read_only fast_forward for


SELECT F1, F2, F3, F4, F5, F6
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_redemption_date, @f_client_payment,
@f_asset_release_date, @f_release_location, @f_redemption_method

while @@fetch_status = 0
begin
set @running_number = @running_number + 1

select @f_agreement_no = am.agreement_no ,


@f_batch_no = am.batch_no
from '+@p_core_db_name+'.dbo.agreement_main am
inner join ' + @p_core_db_name + '.dbo.batch_main bm
on bm.batch_no = am.batch_no
where am.finco_agreement_no = @f_no_kontrak

set @f_value =
'+@p_core_db_name+'.dbo.xfn_agreement_check_repossess(@f_agreement_no)
-- Nomor kontrak harus ada di CORE dengan status Active

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Terdaftar


if not exists(select 1 from '+@p_core_db_name+'.dbo.batch_main
where batch_no = @f_batch_no and financial_company_code = '''+@f_code+''')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Tidak terdaftar.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Ada Ditransaksi lain


if exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_transaction where agreement_no = @f_agreement_no)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Ada Ditransaksi lain.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end
---- Nomor Kontrak harus berstatus repossess
if (@f_value = ''0'')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' harus berstatus repossess.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

fetch next from c_main


into @f_no_kontrak, @f_redemption_date, @f_client_payment,
@f_asset_release_date, @f_release_location, @f_redemption_method
end
close c_main
deallocate c_main
'

--exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,
--
@p_trans_desc = ''REDEMPTION'',
--
@p_cre_date = ''' + cast(@p_cre_date as
nvarchar(50)) + ''',
--
@p_cre_by = ''' + @p_cre_by + ''',
--
@p_cre_ip_address = ''' + @p_cre_ip_address + ''',
--
@p_mod_date = ''' + cast(@p_mod_date as
nvarchar(50)) + ''',
--
@p_mod_by = ''' + @p_mod_by + ''',
--
@p_mod_ip_address = ''' + @p_mod_ip_address + '''
exec (@sql)
set @sql = '

if not exists(select 1 from log_read_txt_fail where batch_no = ''' +


@p_batch_no + ''')
begin
ALTER TABLE ' + @p_batch_no + '_' + @p_type_txt_detail + '
add F7 decimal(18,2)
end
'
exec (@sql)

set @sql ='

if exists(select 1 from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME =


'''+ @p_batch_no + '_' + @p_type_txt_detail + '''and COLUMN_NAME = ''F7'')
BEGIN
exec [sp_calculate_redemption] ''' + @p_batch_no + ''','''
+ @p_type_txt_detail + ''',''' + @p_core_db_name + ''', '''+@f_code+'''
END
'

exec (@sql)
END
else if left(@p_type_txt_detail, 8) = 'REPOSOLD'
begin

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_batch_no nvarchar(50),
@f_agreement_no nvarchar(50),
@f_sold_date datetime,
@f_sold_price decimal(18,2),
@f_sold_type nvarchar(1),
@f_sold_location nvarchar(200),
@f_value nvarchar(1)

declare c_main cursor read_only fast_forward for


SELECT F1, F2, F3, F4, F5
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_sold_date, @f_sold_price, @f_sold_type,
@f_sold_location
while @@fetch_status = 0
begin
set @running_number = @running_number + 1

select @f_agreement_no = am.agreement_no ,


@f_batch_no = am.batch_no
from '+@p_core_db_name+'.dbo.agreement_main am
inner join ' + @p_core_db_name + '.dbo.batch_main bm
on bm.batch_no = am.batch_no
where am.finco_agreement_no = @f_no_kontrak

set @f_value =
'+@p_core_db_name+'.dbo.xfn_agreement_check_inventory(@f_agreement_no)

-- Nomor kontrak harus ada di CORE dengan status Active

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end
-- Nomor Kontrak Tidak Terdaftar
if not exists(select 1 from '+@p_core_db_name+'.dbo.batch_main
where batch_no = @f_batch_no and financial_company_code = '''+@f_code+''')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Tidak terdaftar.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Ada Ditransaksi lain


if exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_transaction where agreement_no = @f_agreement_no)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Ada Ditransaksi lain.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end
if (@f_value = ''0'')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' harus berstatus Inventory.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end
exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,

@p_trans_desc = ''REPOSOLD'',

@p_cre_date = ''' + cast(@p_cre_date as


nvarchar(50)) + ''',

@p_cre_by = ''' + @p_cre_by + ''',

@p_cre_ip_address = ''' + @p_cre_ip_address + ''',

@p_mod_date = ''' + cast(@p_mod_date as


nvarchar(50)) + ''',

@p_mod_by = ''' + @p_mod_by + ''',

@p_mod_ip_address = ''' + @p_mod_ip_address + '''

fetch next from c_main


into @f_no_kontrak, @f_sold_date, @f_sold_price, @f_sold_type,
@f_sold_location
end
close c_main
deallocate c_main
'
exec (@sql)
END
else if left(@p_type_txt_detail, 2) = 'WO'
begin

set @sql = '


declare @f_no_kontrak nvarchar(20),
@running_number int = 0,
@curr_time datetime = getdate(),
@error_message nvarchar(max) = '''',
@f_batch_no nvarchar(50),
@f_agreement_no nvarchar(50),
@f_reason nvarchar(100),
@f_wo_date datetime,
@f_npl nvarchar(1)

declare c_main cursor read_only fast_forward for


SELECT F1, F2, F3
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_reason, @f_wo_date
while @@fetch_status = 0
begin
set @running_number = @running_number + 1

select @f_agreement_no = am.agreement_no ,


@f_batch_no = am.batch_no
from '+@p_core_db_name+'.dbo.agreement_main am
inner join ' + @p_core_db_name + '.dbo.batch_main bm
on bm.batch_no = am.batch_no
where am.finco_agreement_no = @f_no_kontrak

select @f_npl = scb.is_npl


from '+@p_core_db_name+'.dbo.agreement_information ai
inner join
'+@p_core_db_name+'.dbo.sys_collection_bucket scb on scb.code = ai.col
where ai.agreement_no = @f_agreement_no

-- Nomor kontrak harus ada di CORE dengan status Active

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Terdaftar


if not exists(select 1 from '+@p_core_db_name+'.dbo.batch_main
where batch_no = @f_batch_no and financial_company_code = '''+@f_code+''')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Tidak terdaftar.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Ada Ditransaksi lain


if exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_transaction where agreement_no = @f_agreement_no)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Ada Ditransaksi lain.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- harus berstatus NPL


if (@f_npl = ''1'')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' harus berstatus NPL.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,

@p_trans_desc = ''WO'',

@p_cre_date = ''' + cast(@p_cre_date as


nvarchar(50)) + ''',

@p_cre_by = ''' + @p_cre_by + ''',

@p_cre_ip_address = ''' + @p_cre_ip_address + ''',

@p_mod_date = ''' + cast(@p_mod_date as


nvarchar(50)) + ''',

@p_mod_by = ''' + @p_mod_by + ''',

@p_mod_ip_address = ''' + @p_mod_ip_address + '''

fetch next from c_main


into @f_no_kontrak, @f_reason, @f_wo_date
end
close c_main
deallocate c_main
'
exec (@sql)
END
else if left(@p_type_txt_detail, 10) = 'RESCHEDULE'
begin

set @sql = '


declare @f_no_kontrak nvarchar(20)
,@running_number int = 0
,@curr_time datetime = getdate()
,@error_message nvarchar(max) = ''''
,@f_batch_no nvarchar(50)
,@f_agreement_no nvarchar(50)
,@f_new_due_date datetime
,@f_addendum_no nvarchar(50)
,@f_max_reschedule int
,@f_reschedule_count int
,@f_overdue_amount decimal(18,2)
,@f_os_period int
,@f_installment_no int

declare c_main cursor read_only fast_forward for


SELECT F1, F2, F3
from ' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_new_due_date, @f_addendum_no

while @@fetch_status = 0
begin
set @running_number = @running_number + 1

select @f_agreement_no = am.agreement_no


,@f_batch_no = am.batch_no
,@f_max_reschedule = mp.max_reschedule
,@f_reschedule_count = ai.reschedule_count
,@f_overdue_amount = ai.overdue_amount
,@f_os_period = ai.os_period
from '+@p_core_db_name+'.dbo.agreement_main am
inner join ' + @p_core_db_name + '.dbo.batch_main bm
on bm.batch_no = am.batch_no
inner join ' + @p_core_db_name +
'.dbo.agreement_information ai on ai.agreement_no = am.agreement_no
inner join ' + @p_core_db_name + '.dbo.master_plafond
mp on mp.plafond_no = bm.plafond_no
where am.finco_agreement_no = @f_no_kontrak

-- Nomor kontrak harus ada di CORE dengan status Active

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor Kontrak Tidak Terdaftar


if not exists(select 1 from '+@p_core_db_name+'.dbo.batch_main
where batch_no = @f_batch_no and financial_company_code = '''+@f_code+''')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Tidak terdaftar.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end'
set @sql2 ='

-- Nomor Kontrak Tidak Ada Ditransaksi lain


if exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_transaction where agreement_no = @f_agreement_no)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Ada Ditransaksi lain.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor kontrak yang diupload tidak boleh melebihi batas


pengajuan reschedule di plafond
if (@f_reschedule_count > @f_max_reschedule)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Melebihi Batas Pengajuan Reschedule di Plafond.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

-- Nomor kontrak yang diupload tidak boleh memiliki tunggakan


angsuran
if exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_information where agreement_no = @f_agreement_no
and overdue_amount > 0)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Memiliki tunggakan angsuran.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,

@p_trans_desc = ''RESCHEDULE'',

@p_cre_date = ''' + cast(@p_cre_date as


nvarchar(50)) + ''',

@p_cre_by = ''' + @p_cre_by + ''',

@p_cre_ip_address = ''' + @p_cre_ip_address + ''',

@p_mod_date = ''' + cast(@p_mod_date as


nvarchar(50)) + ''',

@p_mod_by = ''' + @p_mod_by + ''',

@p_mod_ip_address = ''' + @p_mod_ip_address + '''


fetch next from c_main
into @f_no_kontrak, @f_new_due_date, @f_addendum_no
end
close c_main
deallocate c_main
'
exec (@sql+@sql2)
set @sql = '

if not exists(select 1 from log_read_txt_fail where batch_no = ''' +


@p_batch_no + ''')
begin
ALTER TABLE ' + @p_batch_no + '_' + @p_type_txt_detail + '
add F4 decimal(18,2)
end
'
exec (@sql)

set @sql ='

if exists(select 1 from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME =


'''+ @p_batch_no + '_' + @p_type_txt_detail + '''and COLUMN_NAME = ''F4'')
BEGIN
exec [sp_calculate_reschedule] ''' + @p_batch_no + ''','''
+ @p_type_txt_detail + ''',''' + @p_core_db_name + ''', '''+@f_code+'''
END
'

exec (@sql)
end
else if left(@p_type_txt_detail, 11) = 'RESTRUCTURE'
begin

set @sql = '


declare @f_no_kontrak nvarchar(20)
,@running_number int = 0
,@curr_time datetime = getdate()
,@error_message nvarchar(max) = ''''
,@f_batch_no nvarchar(50)
,@f_agreement_no nvarchar(50)
,@f_restructure_date datetime
,@f_restructure_method nvarchar(2)
,@f_reason nvarchar(100)
,@f_new_contract_no nvarchar(20)
,@f_margin_discount decimal(18,2)
,@f_new_tenor int
,@f_new_rate_finco decimal(9,6)
,@f_new_rate_customer decimal(9,6)
,@f_overdue_margin_tenor int
,@f_new_doc_pk nvarchar(1)
,@f_new_doc_addendum_pk nvarchar(1)
,@f_new_doc_schedule nvarchar(1)
,@f_new_doc_policy nvarchar(1)
,@f_restructure_count int
,@f_max_restructure int
declare c_main cursor read_only fast_forward for
SELECT F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14 from
' + @p_batch_no + '_' + @p_type_txt_detail + '

open c_main
fetch next from c_main
into @f_no_kontrak, @f_restructure_date, @f_restructure_method,
@f_reason, @f_new_contract_no, @f_margin_discount, @f_new_tenor, @f_new_rate_finco,
@f_new_rate_customer, @f_overdue_margin_tenor, @f_new_doc_pk,
@f_new_doc_addendum_pk, @f_new_doc_schedule, @f_new_doc_policy

while @@fetch_status = 0
begin
set @running_number = @running_number + 1

select @f_agreement_no = am.agreement_no


,@f_batch_no = am.batch_no
,@f_restructure_count = ai.restructure_count
,@f_max_restructure = mp.max_restructure
from '+@p_core_db_name+'.dbo.agreement_main am
inner join ' + @p_core_db_name + '.dbo.batch_main bm
on bm.batch_no = am.batch_no
inner join ' + @p_core_db_name +
'.dbo.agreement_information ai on ai.agreement_no = am.agreement_no
inner join ' + @p_core_db_name + '.dbo.master_plafond
mp on mp.plafond_no = bm.plafond_no
where am.finco_agreement_no = @f_no_kontrak

if not exists (select 1 from ' + @p_core_db_name +


'.dbo.agreement_main where finco_agreement_no = @f_no_kontrak and last_status =
''ACTIVE'')
begin
set @error_message = ''Nomor kontrak '' + @f_no_kontrak +
'' tidak aktif.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no + ''', '''
+ @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

if not exists(select 1 from '+@p_core_db_name+'.dbo.batch_main


where batch_no = @f_batch_no and financial_company_code = '''+@f_code+''')
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Tidak terdaftar.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

if exists(select 1 from
'+@p_core_db_name+'.dbo.agreement_transaction where agreement_no = @f_agreement_no)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Ada Ditransaksi lain.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end
'
set @sql2 = '
if (@f_restructure_count > @f_max_restructure)
begin
set @error_message = ''Nomor kontrak '' +
@f_no_kontrak + '' Melebihi Batas Pengajuan Restructure di Plafond.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

if exists(cast(@f_restructure_date as date) < cast(@curr_time as


date))
begin
set @error_message = ''Tanggal Restruktur tidak boleh
kurang dari tanggal aplikasi portal.''
exec dbo.sp_log_read_txt_fail_insert ''' + @p_batch_no +
''', ''' + @p_type_txt_detail + ''', @running_number, @error_message, @curr_time
end

exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,
@p_trans_desc = ''RESTRUCTURE'',

@p_cre_date = ''' + cast(@p_cre_date as


nvarchar(50)) + ''',

@p_cre_by = ''' + @p_cre_by + ''',

@p_cre_ip_address = ''' + @p_cre_ip_address + ''',

@p_mod_date = ''' + cast(@p_mod_date as


nvarchar(50)) + ''',

@p_mod_by = ''' + @p_mod_by + ''',

@p_mod_ip_address = ''' + @p_mod_ip_address + '''

fetch next from c_main


into @f_no_kontrak, @f_restructure_date, @f_restructure_method,
@f_reason, @f_new_contract_no, @f_margin_discount, @f_new_tenor, @f_new_rate_finco,
@f_new_rate_customer, @f_overdue_margin_tenor, @f_new_doc_pk,
@f_new_doc_addendum_pk, @f_new_doc_schedule, @f_new_doc_policy
end
close c_main
deallocate c_main
'
exec (@sql+@sql2)
set @sql = '

if not exists(select 1 from log_read_txt_fail where batch_no = ''' +


@p_batch_no + ''')
begin
ALTER TABLE ' + @p_batch_no + '_' + @p_type_txt_detail + '
add F15 decimal(18,2)
end
'
exec (@sql)

set @sql ='

if exists(select 1 from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME =


'''+ @p_batch_no + '_' + @p_type_txt_detail + '''and COLUMN_NAME = ''F15'')
BEGIN
exec [sp_calculate_restructure] ''' + @p_batch_no + ''','''
+ @p_type_txt_detail + ''',''' + @p_core_db_name + ''', '''+@f_code+'''
END
'

exec (@sql)
END
else
begin
set @error_message = 'Invalid textfile type.'
set @curr_time = getdate()
exec dbo.sp_log_read_txt_fail_insert @p_batch_no, @p_type_txt_detail,
@running_number, @error_message, @curr_time
end

--if exists (select value, count(*) from dbo.upload_txt_value group by value


having count(*) > 1)
-- print 1
--else
-- print 0

--if not exists (select 1 from dbo.log_read_txt_fail where batch_no =


@p_batch_no and type_txt_detail = @p_type_txt_detail)
-- update dbo.upload_txt_path set validate_status = 'DONE' where batch_no
= @p_batch_no and code_txt_detail = @p_type_txt_detail
--else
update dbo.upload_txt_path
set validate_status = 'ERROR'
where batch_no = @p_batch_no
and code_txt_detail = @p_type_txt_detail

-- ()2018-09-12 -- insert history failed


insert into dbo.log_read_txt_fail_history
(
finco_code ,
batch_no ,
type_txt_detail ,
row_no ,
messages ,
cre_date
)
select @f_code
,lr.batch_no
,lr.type_txt_detail
,lr.row_no
,lr.messages
,@f_system_date
from log_read_txt_fail lr
where lr.batch_no = @p_batch_no
and lr.type_txt_detail = @p_type_txt_detail
and not exists (
select 1
from dbo.log_read_txt_fail_history lfh
where batch_no = @p_batch_no
and type_txt_detail =
@p_type_txt_detail
and lr.messages = lfh.messages
)

end
GO

You might also like