monitoring yang sudah diapprove, memberikan status batal pada status approve pelanggan tertentu yang data monitoringnya belum
lengkap, tidak sah , alasan tidak tepat, terjadi kesalahan upload gambar atau gambar kurang jelas sehingga perlu dilakukan
monitoring ulang dengan mengubahupdate data monitoring tersebut. 10.
Cetak laporan TBT dilakukan untuk mencetak laporan hasil monitoring pelanggan TBT yang datanya sudah diapprove pada
bulan tertentu atau dalam jangka waktu beberapa bulan. 11.
Lihat versi sebelum dilakukan untuk melihat data hasil monitoring pelanggan TBT versi sebelumnya.
12. Lihat History Monitoring dilakukan untuk melihat history dari
monitoring pada pelanggan TBT. Copy status bulan terakhir dilakukan untuk menyalin status monitoring, status
approve dan detail lain seperti foto, koordinat, verifikasi dari data monitoring pelanggan TBT yang sebelumnya sudah dimonitoring dan disetujui hasil
monitoringnya approve pada bulan sebelumnya.
4.2. Spesifikasi Software dan Hardware yang Digunakan
4.2.1. Spesifikasi Software
Spesifikasi software yang digunakan untuk implementasi sistem monitoring ini adalah sebagai berikut:
1. Sistem Operasi Windows 7Ultimate 64bit
2. Oracle XE
3. Oracle SQL Developer
4. Netbeans 7.1.1
5. Browser : Google Chrome dan Mozilla Firefox
4.2.2. Spesifikasi Hardware
Spesifikasi hardware yang digunakan untuk implementasi sistem monitoring ini adalah sebagai berikut:
1. Prosesor
: Intel R Core TM i3-2350M CPU 2.30 GHz PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
2. RAM
: 4096MB DDR3 3.
Harddisk : 500GB
4.3. Implementasi Stored Procedure dan Function
Berikut ini akan dijelaskan mengenai implementasi sistem dengan menggunakan Stored Procedure dan Function:
4.3.1. Implementasi Stored Procedure untuk Proses Upload Data
MonitorPascabayar
Proses upload data monitor merupakan bagian dari proses monitoring bagi pelanggan pascabayar. Data yang diupload berupa koordinat MCB, tanggal
monitoring, verifikasi, keadaan MCB, dan foto dari MCB. Pelanggan yang sudah dimonitor akan mendapatkan status monitoring dan IDMON id monitoring.
Stored procedure yang digunakan menerapkan method Two Phase Locking 2PLuntuk menangani aksi menyimpan data monitor, melakukan update status,
dan menangani masalah concurrency control yaitu mencegah dua buah transaksi update pada row yang sama di tabel secara bersamaan.
Metode locking digunakan untuk mengunci row dari idpel dan blth yg ditunjuk pada tabel DLPD_PASCABAYAR tabel ini menyimpan data
monitoring pelanggan pascabayar agar transaksi setelahnya yang menunjuk row ini tidak dapat melakukan write data update pada row tersebut. Penguncian row
dilakukan dengan menggunakan klausa FOR UPDATE OF. Proses locking berjalan ketika selection data dari idpel dan blth yang akan diupdate status
monitor dan idmonnya. Proses selection tersebut berguna untuk mencari data dari pelanggan yang akan diubah status monitornya.
Setelah itu akan dipanggil function tambah_idmon_pasca yang berguna untuk generate id monitoring. Jika proses tersebut berhasil, maka proses selection
untuk mencari idmon versi sebelumnya dari idpel dan blth tersebut. Selanjutnya update tabel DLPD_PASCABAYAR dengan set status_mon = YES dan idmon
dengan id yang sudah digenerate sebelumnya. Id versi sebelumnya akan dicek, jika id tidak ada maka proses insert data hasil monitor ke tabel
RECORD_DLPD_PASCABAYAR akan dilakukan dengan mengosongkan kolom PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
versi_sebelum, jika sebaliknya maka insert akan dilakukan dengan menyertakan id versi sebelumnya. Berikut ini gambar 4.1 yang menampilkan isi dari stored
procedure monitor_pascabayar:
create or replace procedure monitor_pascabayar v_idpel in dlpd_pascabayar.idpelTYPE,
v_blth in dlpd_pascabayar.blthTYPE, v_koordinat in record_dlpd_pascabayar.koordinatTYPE,
v_ket in record_dlpd_pascabayar.ketTYPE, v_mcb in record_dlpd_pascabayar.keadaan_mcbTYPE,
v_verifikasi in record_dlpd_pascabayar.verifikasiTYPE, v_user in record_dlpd_pascabayar.user_idTYPE,
v_date in record_dlpd_pascabayar.tgl_monTYPE, p_status out number,
p_idmon out varchar2, p_versisebelum out varchar2
is v_idmon dlpd_pascabayar.idmontype;
v_status_mon dlpd_pascabayar.status_monTYPE; v_versi_sebelum record_dlpd_pascabayar.versi_sebelumTYPE;
ex_no_data_found EXCEPTION; begin
select idmon, status_mon into v_idmon, v_status_mon from dlpd_pascabayar where idpel=v_idpel and blth=v_blth for update of idpel,blth;
v_idmon:=function_tambah_idmon_pascav_idpel,v_blth; p_idmon:=v_idmon;
--DBMS_LOCK.SLEEP10; IF v_idmon is not null then
select idmon into v_versi_sebelum from dlpd_pascabayar where idpel=v_idpel and blth=v_blth;
p_versisebelum:=v_versi_sebelum; update dlpd_pascabayar set status_mon=YES, idmon=v_idmon where
idpel=v_idpel and blth=v_blth; if v_versi_sebelum is not null
then insert into record_dlpd_pascabayar
idpel,blth,idmon,koordinat,tgl_mon,verifikasi,ket,keadaan_mcb,versi_sebelum,use r_id
values v_idpel,v_blth,v_idmon,v_koordinat,to_charv_date,DD-MON- YY,v_verifikasi,v_ket,v_mcb,v_versi_sebelum,v_user;
Gambar 4. 1Stored Procedure monitor_pascabayar
4.3.2. Implementasi Stored Procedure untuk Proses Upload Data Monitor
Prabayar
Sama seperti yang telah dijelaskan sebelumnya, implementasi stored procedure monitor_prabayar pada proses upload data monitor prabayar dilakukan
untuk menangani proses insert data ke tabel RECORD_DLPD_PRABAYAR, update data pada row dengan idpel dan blth yang ditunjuk di tabel
DLPD_PRABAYAR, serta mencegah terjadinya transaksi bersamaan oleh 2 user atau lebih untuk update row pada tabel DLPD_PRABAYAR.
Proses locking terjadi saat query untuk select idmon, status_mon dari idpel dan blth yang ditunjuk dijalankan. Untuk mengunci row tersebut digunakan
klausa „FOR UPDATE OF‟ idpel dan blth. Selanjutnya, sama seperti dijelaskan pada kasus upload data monitor pascabayar, function tambah_idmon_prabayar
akan dijalankan untuk generate id monitoring yang baru. Jika generate idmon berhasil dijalankan maka proses selanjutnya adalah mencari id versi sebelum dari
idpel dan blth yang ditunjuk. Jika id versi sebelum ditemukan, maka proses
end monitor_pascabayar;
insertke tabel
RECORD_DLPD_PRABAYAR akan
dilakukan dengan
menyertakan id versi sebelum, jika tidak ditemukan maka kolom versi_sebelum akan diset null.
Setelah semua proses selesai, maka lock akan dilepaskan dan transaksi setelahnya akan diijinkan untuk mengakses row tersebut. Berikut ini adalah isi
dari stored procedur monitor_pascabayar yang ditunjukan pada gambar 4.2:
create or replace procedure monitor_prabayar v_idpel in dlpd_prabayar.idpelTYPE,
v_blth in dlpd_prabayar.blthTYPE, v_koordinat in record_dlpd_prabayar.koordinatTYPE,
v_ket in record_dlpd_prabayar.ketTYPE, v_mcb in record_dlpd_prabayar.keadaan_mcbTYPE,
v_verifikasi in record_dlpd_prabayar.verifikasiTYPE, v_user in record_dlpd_prabayar.user_idTYPE,
v_date in record_dlpd_prabayar.tgl_monTYPE, p_status out number,
p_idmon out varchar2, p_versisebelum out varchar2
is v_idmon dlpd_prabayar.idmontype;
v_status_mon dlpd_prabayar.status_monTYPE; v_versi_sebelum record_dlpd_prabayar.versi_sebelumTYPE;
ex_no_data_found EXCEPTION; begin
select idmon, status_mon into v_idmon, v_status_mon from dlpd_prabayar where idpel=v_idpel and blth=v_blth for update of idpel,blth;
v_idmon:=function_tambah_idmon_prabayarv_idpel,v_blth; p_idmon:=v_idmon;
IF v_idmon is not null then select idmon into v_versi_sebelum from dlpd_prabayar where idpel=v_idpel and
blth=v_blth; p_versisebelum:=v_versi_sebelum;
update dlpd_prabayar set status_mon=YES, idmon=v_idmon where idpel=v_idpel and blth=v_blth;
if v_versi_sebelum is not null then
insert into record_dlpd_prabayar idpel,blth,idmon,koordinat,tgl_mon,verifikasi,ket,keadaan_mcb,versi_sebelum,
user_id values v_idpel,v_blth,v_idmon,v_koordinat,to_charv_date,DD-MON-
YY,v_verifikasi,v_ket,v_mcb,v_versi_sebelum,v_user;
Gambar 4. 2Stored procedure monitor_prabayar 4.3.3.
Implementasi Stored Procedure Untuk Proses Approve Data Hasil MonitorPascabayar
Proses approve pascabayar adalah proses memeriksa hasil monitor pelanggan pascabayar yang sudah memiliki status monitoring. Proses approve
akan mengubah data pada tabel DPLD_PRABAYAR khususnya pada kolom status_app berdasarkan idpel dan blth yang ditunjuk menjadi „YES‟ dan
mengubah data pada kolom idmon dengan idmon approve yang sudah digenerate dengan function tambah_idapp_pasca. Jika proses generate berhasil, maka query
mencari data monitoring terakhir di tabel RECORD_DLPD_PRABAYAR dari idpel dan blth yang ditunjuk akan dijalankan. Jika data sebelumnya berhasil
ditemukan maka proses insert ke tabel RECORD_DLPD_PRABAYAR dengan
else insert into record_dlpd_prabayar
idpel,blth,idmon,koordinat,tgl_mon,verifikasi,ket,keadaan_mcb,versi_sebelum, user_id
values v_idpel,v_blth,v_idmon,v_koordinat,to_charv_date,DD-MON- YY,v_verifikasi,v_ket,v_mcb,null,v_user;
end if; else
raise ex_no_data_found; end IF;
commit; p_status:=1;
EXCEPTION WHEN ex_no_data_found THEN
rollback; p_status:=0;
WHEN OTHERS THEN rollback;
p_status:=0; end monitor_prabayar;
detail data monitor dari idmon sebelumnya akan dilakukan, namun yang berbeda disini adalah kolom idmon akan diisi dengan idmon approve.
Prosedur yang dibuat ini juga menerapkan method Two Phase Locking dengan klause FOR UPDATE OF yang diletakan pada query untuk mencari
status_app, idmon dari idpel dan blth yang dimaksud. Locking berjalan dengan mengunci row tersebut sehingga tidak ada transaksi lain yang dapat mengakses
row untuk ikut write data sampe lock dilepas. Berikut ini akan ditunjukan isi dari prosedur approve_pascabayar pada gambar 4.3:
create or replace procedure approve_pascabayar v_idpel in dlpd_pascabayar.idpelTYPE,
v_blth in dlpd_pascabayar.blthTYPE, v_user in record_dlpd_pascabayar.user_idTYPE,
p_status out number, p_idmon out varchar2
is v_idmon dlpd_pascabayar.idmontype;
v_status_mon dlpd_pascabayar.status_monTYPE; v_koordinat record_dlpd_pascabayar.koordinatTYPE;
v_ket record_dlpd_pascabayar.ketTYPE; v_mcb record_dlpd_pascabayar.keadaan_mcbTYPE;
v_tgl_mon record_dlpd_pascabayar.tgl_monTYPE; v_verifikasi record_dlpd_pascabayar.verifikasiTYPE;
v_gambar record_dlpd_pascabayar.gambarTYPE; v_versi_sebelum record_dlpd_prabayar.versi_sebelumTYPE,
ex_no_data_found EXCEPTION; begin
select idmon, status_app into v_idmon, v_status_mon from dlpd_pascabayar where idpel=v_idpel and blth=v_blth for update of idpel,blth;
v_versi_sebelum:=v_idmon; v_idmon:=function_tambah_idapp_pascav_idpel,v_blth;
p_idmon:=v_idmon; IF v_idmon is not null then
select keadaan_mcb,ket,tgl_mon,verifikasi,koordinat,gambar into v_mcb,v_ket,v_tgl_mon,v_verifikasi,v_koordinat,v_gambar
from record_dlpd_pascabayar where idmon=v_versi_sebelum; update dlpd_pascabayar set status_app=YES, idmon=v_idmon where idpel=v_idpel
and blth=v_blth;
Gambar 4. 3 Implementasi stored procedureapprove_pascabayar
if v_versi_sebelum is not null then
insert into record_dlpd_pascabayar idpel,blth,idmon,koordinat,tgl_mon,verifikasi,ket,keadaan_mcb,versi_sebelum,user
_id,gambar,tgl_app values
v_idpel,v_blth,v_idmon,v_koordinat,v_tgl_mon,v_verifikasi,v_ket,v_mcb,v_versi_se belum,v_user,v_gambar,to_charSYSDATE,DD-MON-YY;
else raise ex_no_data_found;
end IF; commit;
p_status:=1; EXCEPTION
WHEN ex_no_data_found THEN rollback;
p_status:=0; WHEN OTHERS THEN
rollback; p_status:=0;
end procedure approve_pascabayar;
4.3.4. Implementasi Stored Procedure Untuk Proses Approve Data Hasil
Monitoring Prabayar
Impelementasi proses approve data hasil monitor pelanggan prabayar sama memiliki proses yang sama dengan proses approve pada data pelanggan
pascabayar. Yang berbeda adalah tabel tujuan untuk update status_app dan idmon di tabel DLPD_PRABAYAR serta pada proses insert data di tabel
RECORD_DLPD_PRABAYAR. Function yang dipanggil untuk generate idmon approve adalah function tambah_idapp_prabayar. Implementasi teknik 2PL untuk
locking row yang diupdate dilakukan pada tabel DLPD_PRABAYAR. Berikut ini ditunjukan isi dari prosedur approve_prabayar pada gambar 4.4:
create or replace procedure approve_prabayar v_idpel in dlpd_prabayar.idpelTYPE,
v_blth in dlpd_prabayar.blthTYPE, v_user in record_dlpd_prabayar.user_idTYPE,
p_status out number, p_idmon out varchar2
is v_idmon dlpd_prabayar.idmontype;
v_status_mon dlpd_prabayar.status_monTYPE; v_koordinat record_dlpd_prabayar.koordinatTYPE;
v_ket record_dlpd_prabayar.ketTYPE; v_mcb record_dlpd_prabayar.keadaan_mcbTYPE;
v_tgl_mon record_dlpd_prabayar.tgl_monTYPE; v_verifikasi record_dlpd_prabayar.verifikasiTYPE;
v_gambar record_dlpd_prabayar.gambarTYPE; v_versi record_dlpd_prabayar.versi_sebelumTYPE,
ex_no_data_found EXCEPTION; begin
select idmon, status_app into v_idmon, v_status_mon from dlpd_prabayar where idpel=v_idpel and blth=v_blth for update of idpel,blth;
v_versi_sebelum:=v_idmon; v_idmon:=function_tambah_idapp_prabayarv_idpel,v_blth;
p_idmon:=v_idmon;
Gambar 4. 4Impelementasi stored procedureapprove_prabayar
IF v_idmon is not null then select keadaan_mcb,ket,tgl_mon,verifikasi,koordinat,gambar into
v_mcb,v_ket,v_tgl_mon,v_verifikasi,v_koordinat,v_gambar from record_dlpd_prabayar where idmon=v_versi;
update dlpd_prabayar set status_app=YES, idmon=v_idmon where idpel=v_idpel and blth=v_blth;
if v_versi is not null then
insert into record_dlpd_prabayar idpel,blth,idmon,koordinat,tgl_mon,verifikasi,ket,keadaan_mcb,versi_sebelum,user
_id,tgl_app,gambar values
v_idpel,v_blth,v_idmon,v_koordinat,v_tgl_mon,v_verifikasi,v_ket,v_mcb,v_versi,v_ user,to_charsysdate,DD-MON-YY,v_gambar;
else raise ex_no_data_found;
end if; else
raise ex_no_data_found; end IF;
commit; p_status:=1;
EXCEPTION WHEN ex_no_data_found THEN
rollback; p_status:=0;
WHEN OTHERS THEN rollback;
p_status:=0; end approve_prabayar;
4.3.5. Implementasi Stored Procedure Untuk Proses Pembatalan Status
Monitor Pascabayar
Proses pembatalan status monitor pascabayar terjadi ketika data hasil monitor pelanggan pascabayar yang sudah dimonitor ingin dibatalkan sehingga
status monitoringnya tidak ada atau diset null. Pembatalan dilakukan jika ada data hasil monitor yang tidak sesuai, misalnya: salah koordinat, foto tidak jelas, belum
mencantumkan verifikasi, dll. Proses locking dengan metode 2PL tetap dijalankan pada row yang akan
diubah status monitoringnya. Locking dimaksudkan untuk mencegah terjadinya perubahan oleh transaksi lain pada data di kolom yang dimaksud atau pada kolom
lainnya. Pembatalan status monitoring akan tetap dibuatkan idmon dengan memanggil function tambah_idmon_pasca.
Jika idmon berhasil digenerate maka update status_mon=null dan idmon pada tabel DLPD_PASCABAYAR dijalankan. Setelah itu dilanjutkan dengan
proses insert data pembatalan ke tabel RECORD_DLPD_PASCABAYAR. Pada gambar 4.5 ditunjukkan isi dari prosedur batal_monitor_pasca:
create or replace procedure batal_monitor_pasca v_idpel in dlpd_pascabayar.idpelTYPE,
v_blth in dlpd_pascabayar.blthTYPE, v_user in record_dlpd_pascabayar.user_idTYPE,
v_alasan in record_dlpd_pascabayar.verifikasiTYPE, v_versi_sebelum in record_dlpd_pascabayar.versi_sebelumTYPE,
p_status out number, p_idmon out varchar2
is v_idmon dlpd_pascabayar.idmontype;
v_status_mon dlpd_pascabayar.status_monTYPE; v_koordinat record_dlpd_pascabayar.koordinatTYPE;
v_mcb record_dlpd_pascabayar.keadaan_mcbTYPE; v_tgl_mon record_dlpd_pascabayar.tgl_monTYPE;
v_user_sebelum record_dlpd_pascabayar.user_idTYPE; v_gambar record_dlpd_pascabayar.gambarTYPE;
v_ket record_dlpd_pascabayar.ketTYPE; ex_no_data_found EXCEPTION;
Gambar 4. 5Implementasi stored procedure batal_monitor_pascabayar
begin select idmon, status_mon into v_idmon, v_status_mon from dlpd_pascabayar where
idpel=v_idpel and blth=v_blth for update of idpel,blth; v_idmon:=function_tambah_idmon_pascav_idpel,v_blth;
p_idmon:=v_idmon; IF v_idmon is not null then
select keadaan_mcb,tgl_mon,koordinat,user_id,gambar into v_mcb,v_tgl_mon,v_koordinat, v_user_sebelum,v_gambar
from record_dlpd_pascabayar where idmon=v_versi_sebelum; update dlpd_pascabayar set status_mon=null, idmon=v_idmon where idpel=v_idpel
and blth=v_blth; v_ket:=monitoring ini dibatalkan oleh: ||v_user|| tgl ||to_charSYSDATE,DD-
MON-YY hh24:mi:ss; if v_versi_sebelum is not null
then insert into record_dlpd_pascabayar
idpel,blth,idmon,koordinat,tgl_mon,verifikasi,ket,keadaan_mcb,versi_sebelum,user _id,gambar values
v_idpel,v_blth,v_idmon,v_koordinat,v_tgl_mon,v_alasan,v_ket,v_mcb,v_versi_sebe lum,v_user_sebelum,v_gambar;
else raise ex_no_data_found;
end if; else
raise ex_no_data_found; end IF;
commit; p_status:=1;
EXCEPTION WHEN ex_no_data_found THEN
rollback; p_status:=0;
WHEN OTHERS THEN rollback;
p_status:=0; end batal_monitor_pasca;
4.3.6. Implementasi Stored Procedure Untuk Proses Pembatalan Status
Monitor Prabayar
Sama dengan proses pembatalan status pascabayar yang dijelaskan sebelumnya. Proses ini akan mengubah status monitoring di tabel DLPD_PRABAYAR
menjadi null dan menambahkan idmon pembatalan dengan memanggil function tambah_idmon_prabayar untuk generate idmon. Selanjutnya detail pembatalan
akan ditambahkan ke tabel RECORD_DLPD_PASCABAYAR. Jika proses pembatalan gagal, maka akan dilakukan rollback untuk mengembalikan database
pada kondisi
awal. Berikut
ini merupakan
isi dari
prosedur batal_monitor_prabayar yang ditunjukan pada gambar 4.6:
create or replace procedure batal_monitor_prabayar v_idpel in dlpd_prabayar.idpelTYPE,
v_blth in dlpd_prabayar.blthTYPE, v_user in record_dlpd_prabayar.user_idTYPE,
v_alasan in record_dlpd_prabayar.verifikasiTYPE, v_versi_sebelum in record_dlpd_prabayar.versi_sebelumTYPE,
p_status out number, p_idmon out varchar2
is v_idmon dlpd_prabayar.idmontype;
v_status_mon dlpd_prabayar.status_monTYPE; v_koordinat record_dlpd_prabayar.koordinatTYPE;
v_mcb record_dlpd_prabayar.keadaan_mcbTYPE; v_tgl_mon record_dlpd_prabayar.tgl_monTYPE;
v_user_sebelum record_dlpd_prabayar.user_idTYPE; v_gambar record_dlpd_prabayar.gambarTYPE;
v_ket record_dlpd_prabayar.ketTYPE; ex_no_data_found EXCEPTION;
begin select idmon, status_mon into v_idmon, v_status_mon from dlpd_prabayar where
idpel=v_idpel and blth=v_blth for update of idpel,blth; v_idmon:=function_tambah_idmon_prabayarv_idpel,v_blth;
p_idmon:=v_idmon;
Gambar 4. 6Implementasi stored procedure batal_monitor_prabayar
IF v_idmon is not null then select keadaan_mcb,tgl_mon,koordinat,user_id,gambar into
v_mcb,v_tgl_mon,v_koordinat, v_user_sebelum,v_gambar from record_dlpd_prabayar where idmon=v_versi_sebelum;
update dlpd_prabayar set status_mon=null, idmon=v_idmon where idpel=v_idpel and blth=v_blth;
v_ket:=monitoring ini dibatalkan oleh: ||v_user|| tgl ||to_charSYSDATE,DD- MON-YY hh24:mi:ss;
if v_versi_sebelum is not null then
insert into record_dlpd_prabayar idpel,blth,idmon,koordinat,tgl_mon,verifikasi,ket,keadaan_mcb,versi_sebelum,user
_id,gambar values
v_idpel,v_blth,v_idmon,v_koordinat,v_tgl_mon,v_alasan,v_ket,v_mcb,v_versi_sebe lum,v_user_sebelum,v_gambar;
else raise ex_no_data_found;
end if; else
raise ex_no_data_found; end IF;
commit; p_status:=1;
EXCEPTION WHEN ex_no_data_found THEN
rollback; p_status:=0;
WHEN OTHERS THEN rollback;
p_status:=0; end batal_monitor_prabayar;
4.3.7. Implementasi Stored Procedure Untuk Proses Pembatalan Status
Approve Pascabayar
Pembatalan status approve pada sebuah data monitoring terjadi apabila data pelanggan monitoring yang sudah diapprove ingin dibatalkan karena alasan
tertentu. Pembatalan ini akan mengubah status monitoring dan status approve menjadi null, yang artinya data pelanggan tersebut harus dimonitoring kembali.
Proses pembatalan
menggunakan stored
procedure yang
mengimplementasikan teknik locking untuk mengunci row pada tabel DLPD_PASCABAYAR yang akan diubah status monitoring dan approve-nya.
Teknik ini berjalan ketika menjalankan query select status_app dan idmon dari idpel dan blth yang dimaksud. Setelah itu function tambah_idapp_pasca akan
dijalankan untuk generate idmon pembatalan status approve tersebut. Ini dilakukan karena data yang dibatalkan harus tetap disimpan dan memiliki idmon
tersendiri. Ini akan memudahkan proses tracing history monitor dari data tersebut. update tabel DLPD_PASCABAYAR akan dijalankan untuk mengubah status
monitoring dan approve menjadi null dan set idmon dengan idmon yang baru. Setelah idmon didapatkan, query select data monitoring sebelumnya akan
dijalankan untuk mengambil data yang akan dibatalkan. Jika idmon versi sebelum tidak kosong maka proses insert ke tabel RECORD_DLPD_PASCABAYAR akan
dilakukan untuk menyimpan detail pembatalan berikut dengan alasan pembatalannya. Jika keseluruhan proses diatas tidak dapat dijalankan,maka
rollback untuk mengembalikan kondisi ke awal akan dijalankan. Gambar
4.7. dibawah
ini akan
menunjukan isi
dari prosedur
batal_approve_pascabayar:
create or replace procedure batal_approve_pasca v_idpel in dlpd_pascabayar.idpelTYPE,
v_blth in dlpd_pascabayar.blthTYPE, v_user in record_dlpd_pascabayar.user_idTYPE,
v_alasan in record_dlpd_pascabayar.verifikasiTYPE, v_versi_sebelum in record_dlpd_pascabayar.versi_sebelumTYPE,
p_status out number, p_idmon out varchar2
Is v_idmon dlpd_pascabayar.idmontype;
v_status_mon dlpd_pascabayar.status_monTYPE; v_koordinat record_dlpd_pascabayar.koordinatTYPE;
v_mcb record_dlpd_pascabayar.keadaan_mcbTYPE; v_tgl_mon record_dlpd_pascabayar.tgl_monTYPE;
v_tgl_app record_dlpd_pascabayar.tgl_appTYPE; v_user_sebelum record_dlpd_pascabayar.user_idTYPE;
v_gambar record_dlpd_pascabayar.gambarTYPE; v_ket record_dlpd_pascabayar.ketTYPE;
ex_no_data_found EXCEPTION; begin
select idmon, status_app into v_idmon, v_status_mon from dlpd_pascabayar where idpel=v_idpel and blth=v_blth for update of idpel,blth;
--dbms_lock.sleep2; v_idmon:=function_tambah_idapp_pascav_idpel,v_blth;
p_idmon:=v_idmon; IF v_idmon is not null then
select keadaan_mcb,tgl_mon,tgl_app,koordinat,user_id,gambar into v_mcb,v_tgl_mon,v_tgl_app,v_koordinat, v_user_sebelum,v_gambar
from record_dlpd_pascabayar where idmon=v_versi_sebelum; update dlpd_pascabayar set status_app=null, status_mon=null, idmon=v_idmon
where idpel=v_idpel and blth=v_blth; v_ket:=approve dibatalkan oleh: ||v_user|| tgl ||to_charSYSDATE,DD-MON-YY
hh24:mi:ss; if v_versi_sebelum is not null
then insert into record_dlpd_pascabayar
idpel,blth,idmon,koordinat,tgl_mon,verifikasi,ket,keadaan_mcb,versi_sebelum,user _id,tgl_app,gambarvalues
v_idpel,v_blth,v_idmon,v_koordinat,v_tgl_mon,v_alasan,v_ket,v_mcb,v_versi_sebe lum,v_user_sebelum,v_tgl_app,v_gambar;
else raise ex_no_data_found;
end if;
Gambar 4. 7Implementasi stored procedure batal_approve_pasca
4.3.8. Implementasi Stored Procedure Untuk Proses Pembatalan Status
Approve Prabayar
Proses pembatalan untuk status approve pelanggan prabayar sama seperti yang sudah dijelaskan sebelumnya pada pembatalan status approve pelanggan
pascabayar. Yang berbeda adalah tabel tujuan untuk update status monitor dan approve yaitu tabel DLPD_PRABAYAR, sedangkan untuk proses insert data
pembatalan dilakukan pada tabel RECORD_DLPD_PRABAYAR. Function yang dipanggil
untuk generate
idmon pembatalan
adalah function
tambah_idapp_prabayar. Berikut ini akan ditampilkan isi dari prosedur ini pada gambar 4.8:
else raise ex_no_data_found;
end IF; commit;
p_status:=1; EXCEPTION
WHEN ex_no_data_found THEN rollback;
p_status:=0; WHEN OTHERS THEN
rollback; p_status:=0;
end batal_approve_pasca;
create or replace procedure batal_approve_prabayar v_idpel in dlpd_prabayar.idpelTYPE,
v_blth in dlpd_prabayar.blthTYPE, v_user in record_dlpd_prabayar.user_idTYPE,
v_alasan in record_dlpd_prabayar.verifikasiTYPE, v_versi_sebelum in record_dlpd_prabayar.versi_sebelumTYPE,
p_status out number, p_idmon out varchar2
is v_idmon dlpd_prabayar.idmontype;
v_status_mon dlpd_prabayar.status_monTYPE; v_koordinat record_dlpd_prabayar.koordinatTYPE;
v_mcb record_dlpd_prabayar.keadaan_mcbTYPE; v_tgl_mon record_dlpd_prabayar.tgl_monTYPE;
v_tgl_app record_dlpd_prabayar.tgl_appTYPE; v_user_sebelum record_dlpd_prabayar.user_idTYPE;
v_gambar record_dlpd_prabayar.gambarTYPE; v_ket record_dlpd_prabayar.ketTYPE;
ex_no_data_found EXCEPTION; begin
select idmon, status_app into v_idmon, v_status_mon from dlpd_prabayar where idpel=v_idpel and blth=v_blth for update of idpel,blth;
--dbms_lock.sleep2; v_idmon:=function_tambah_idapp_prabayarv_idpel,v_blth;
p_idmon:=v_idmon; IF v_idmon is not null then
select keadaan_mcb,tgl_mon,tgl_app,koordinat,user_id,gambar into v_mcb,v_tgl_mon,v_tgl_app,v_koordinat, v_user_sebelum,v_gambar
from record_dlpd_prabayar where idmon=v_versi_sebelum; update dlpd_prabayar set status_app=null, status_mon=null, idmon=v_idmon where
idpel=v_idpel and blth=v_blth; v_ket:=approve dibatalkan oleh: ||v_user|| tgl ||to_charSYSDATE,DD-MON-YY
hh24:mi:ss; if v_versi_sebelum is not null
then insert into record_dlpd_prabayar
idpel,blth,idmon,koordinat,tgl_mon,verifikasi,ket,keadaan_mcb,versi_sebelum,user _id,tgl_app,gambar
Gambar 4. 8Implementasi Stored Procedure batal_approve_prabayar
4.3.9. Implementasi Function
4.3.9.1. Implementasi FunctionGenerate Idmon Proses Monitoring
Berikut ini merupakan implementasi function tambah_idmon_pasca untuk generate id monitoring proses monitoring dan pembatalan status monitoring
pelanggan pascabayar gambar 4.9 dan function tambah_idmon_prabayaruntuk generate id monitoring proses monitoring dan pembatalan status monitoring
pelanggan prabayar gambar 4.10:
values v_idpel,v_blth,v_idmon,v_koordinat,v_tgl_mon,v_alasan,v_ket,v_mcb,v_versi_sebe
lum,v_user_sebelum,v_tgl_app,v_gambar; else
raise ex_no_data_found; end if;
else raise ex_no_data_found;
end IF; commit;
p_status:=1; EXCEPTION
WHEN ex_no_data_found THEN rollback;
p_status:=0; WHEN OTHERS THEN
rollback; p_status:=0;
end batal_approve_prabayar;
Gambar 4. 9Implementasi function tambah_idmon_pasca
create or replace function function_tambah_idmon_pasca v_idpel in dlpd_pascabayar.idpelTYPE,
v_blth in dlpd_pascabayar.blthTYPE return varchar2
is v_status_mon dlpd_pascabayar.status_montype;
v_status_app dlpd_pascabayar.status_apptype; v_idmon dlpd_pascabayar.idmontype;
v_date dlpd_pascabayar.idmontype; ex_no_data_found EXCEPTION;
i int; cursor pascabayar_data is
select distinct rownum, status_mon, status_app, substridpel,8,5 from dlpd_pascabayar where idpel=v_idpel and blth=v_blth;
begin open pascabayar_data;
loop fetch pascabayar_data into i, v_status_mon, v_status_app, v_idmon; exit when pascabayar_dataROWCOUNT 2 or pascabayar_dataNOTFOUND;
end loop; close pascabayar_data;
select to_charsysdate,yymmdd-hh24miss into v_date from dual; if i is null
then raise ex_no_data_found;
else IF v_status_mon is null and v_status_app is null
then v_idmon:=v_date||-||v_idmon||-||MON; elsif v_status_mon is not null and v_status_app is null
then v_idmon:=v_date||-||v_idmon||-||REV; else
v_idmon:=null; END IF;
end if; return v_idmon;
EXCEPTION WHEN ex_no_data_found THEN
rollback; WHEN OTHERS THEN
rollback; end function_tambah_idmon_pasca;
Gambar 4. 10Implementasi function tambah_idmon_prabayar
create or replace function function_tambah_idmon_prabayar v_idpel in dlpd_prabayar.idpelTYPE,
v_blth in dlpd_prabayar.blthTYPE return varchar2
is v_status_mon dlpd_prabayar.status_montype;
v_status_app dlpd_prabayar.status_apptype; v_idmon dlpd_prabayar.idmontype;
v_date dlpd_prabayar.idmontype; ex_no_data_found EXCEPTION;
i int; cursor prabayar_data is
select distinct rownum, status_mon, status_app, substridpel,8,5 from dlpd_prabayar where idpel=v_idpel and blth=v_blth;
begin open prabayar_data;
loop fetch prabayar_data into i, v_status_mon, v_status_app, v_idmon; exit when prabayar_dataROWCOUNT 2 or prabayar_dataNOTFOUND;
end loop; close prabayar_data;
select to_charsysdate,yymidd-hh24miss into v_date from dual; if i is null
then raise ex_no_data_found;
else IF v_status_mon is null and v_status_app is null
then v_idmon:=v_date||-||v_idmon||-||MON; elsif v_status_mon is not null and v_status_app is null
then v_idmon:=v_date||-||v_idmon||-||REV; else
v_idmon:=null; END IF;
end if; return v_idmon;
EXCEPTION WHEN ex_no_data_found THEN
rollback; WHEN OTHERS THEN
rollback; end function_tambah_idmon_prabayar;
create or replace function function_tambah_idapp_pasca v_idpel in dlpd_pascabayar.idpelTYPE,
v_blth in dlpd_pascabayar.blthTYPE return varchar2
is v_status_mon dlpd_pascabayar.status_montype;
v_status_app dlpd_pascabayar.status_apptype; v_idmon dlpd_pascabayar.idmontype;
v_date record_dlpd_pascabayar.idmontype; ex_no_data_found EXCEPTION;
i int; cursor pascabayar_data is
select distinct rownum, status_mon, status_app, substridpel,8,5 from dlpd_pascabayar where idpel=v_idpel and blth=v_blth;
begin open pascabayar_data;
loop fetch pascabayar_data into i, v_status_mon, v_status_app, v_idmon; exit when pascabayar_dataROWCOUNT 2 or pascabayar_dataNOTFOUND;
end loop; close pascabayar_data;
select to_charsysdate,yymmdd-hh24miss into v_date from dual; if i is null
then raise ex_no_data_found;
else IF v_status_mon is not null and v_status_app is null
then v_idmon:=v_date||-||v_idmon||-||APP;
4.3.9.2. ImplementasiFunctionGenerateIdmon ProsesApprove
Berikut ini merupakan implementasi function tambah_idapp_pasca untuk generate id monitoring proses approve dan pembatalan status aprove pelanggan
pascabayar gambar 4.11 dan function tambah_idapp_prabayaruntuk generate id monitoring proses approve dan pembatalan status approve pelanggan prabayar
gambar 4.12: PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Gambar 4. 11 Impelementasi function tambah_idapp_pasca
then v_idmon:=v_date||-||v_idmon||-||APP; elsif v_status_mon is not null and v_status_app is not null
then v_idmon:=v_date||-||v_idmon||-||REV; else
v_idmon:=null; END IF;
end if; elsif v_status_mon is not null and v_status_app is not null
then v_idmon:=v_date||-||v_idmon||-||REV; else
v_idmon:=null; END IF;
end if; return v_idmon;
EXCEPTION WHEN ex_no_data_found THEN
rollback; WHEN OTHERS THEN
rollback; end function_tambah_idapp_pasca;
create or replace function function_tambah_idapp_prabayar v_idpel in dlpd_prabayar.idpelTYPE,
v_blth in dlpd_prabayar.blthTYPE return varchar2
is v_status_mon dlpd_prabayar.status_montype;
v_status_app dlpd_prabayar.status_apptype; v_idmon dlpd_prabayar.idmontype;
v_date record_dlpd_prabayar.idmontype; ex_no_data_found EXCEPTION;
i int; cursor prabayar_data is
select distinct rownum, status_mon, status_app, substridpel,8,5 from dlpd_prabayar where idpel=v_idpel and blth=v_blth;
begin open prabayar_data;
loop fetch prabayar_data into i, v_status_mon, v_status_app, v_idmon; exit when prabayar_dataROWCOUNT 2 or prabayar_dataNOTFOUND;
end loop;
Gambar 4. 12Implementasi function tambah_idapp_prabayar
4.4. Implementasi Program