Professional Documents
Culture Documents
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
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
open curval
fetch next from curval into @running_number, @value
while @@fetch_status = 0
begin
if @val_length = @supposed_length
begin
--loopcolumn
set @sql = @string_awal
set @pos_awal = 1
set @length_sebelum = 0
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
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
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
begin try
exec (@cast_format)
end try
begin 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)+''', '
begin try
exec (@cast_format)
end try
begin CATCH
end
end
else
begin
set @sql = @sql + ' null, '
end
end
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
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
if left(@p_type_txt_detail, 4) = 'DISB'
begin
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
'
execute(@sql_dup)
else ''TAKEOVER''
end = ''NEW'' )
begin
else ''TAKEOVER''
end = ''NEW''
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
execute(@sql_dup)
end
if @p_type_txt_detail = 'DISB2'
BEGIN
SET @sql_dup = ''
SET @sql_dup = '
execute(@sql_dup)
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
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
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
execute(@sql_dup)
--set @hasil =0
--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
--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
--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
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 = '
execute(@sql_dup)
END
IF @p_type_txt_detail = 'DISB5'
BEGIN
SET @sql_dup = ''
SET @sql_dup = '
execute(@sql_dup)
END
IF @p_type_txt_detail = 'DISB6'
BEGIN
SET @sql_dup = ''
SET @sql_dup = '
execute(@sql_dup)
END
end
else if left(@p_type_txt_detail, 4) = 'PAYM'
begin
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
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
end '
SET @sql2 = '
-- Remaining Tenor tidak sesuai dengan sisa tenor di Core
--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
--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)
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'
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'
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
------------------------------------
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 = ''''
end
'
end
end
end
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'
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
------------------------------------
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
end
'
end
end
end
end
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'
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
------------------------------------
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
end
end
'
end
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'
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
------------------------------------
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
end
end
end
end
close c_main
deallocate c_main'
exec (@sql)
end
else if left(@p_type_txt_detail, 2) = 'ET'
begin
open c_main
fetch next from c_main
into @f_no_kontrak
while @@fetch_status = 0
begin
set @running_number = @running_number + 1
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
exec (@sql)
END
else if left(@p_type_txt_detail, 5) = 'WAIVE'
begin
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
--- 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
END
else if left(@p_type_txt_detail, 9) = 'REPOSSESS'
begin
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
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
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
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
set @f_value =
'+@p_core_db_name+'.dbo.xfn_agreement_check_repossess(@f_agreement_no)
-- Nomor kontrak harus ada di CORE dengan status Active
--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 = '
exec (@sql)
END
else if left(@p_type_txt_detail, 8) = 'REPOSOLD'
begin
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
set @f_value =
'+@p_core_db_name+'.dbo.xfn_agreement_check_inventory(@f_agreement_no)
@p_trans_desc = ''REPOSOLD'',
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
exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,
@p_trans_desc = ''WO'',
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
exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,
@p_trans_desc = ''RESCHEDULE'',
exec (@sql)
end
else if left(@p_type_txt_detail, 11) = 'RESTRUCTURE'
begin
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
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
exec '+@p_core_db_name+'.dbo.xsp_agreement_transaction_insert
@p_agreement_no = @f_agreement_no,
@p_trans_desc = ''RESTRUCTURE'',
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
end
GO