    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Update_database extends CI_Model{
    	function __construct(){
    		$this->run_this();
    	}
    
    	function isColumnExist($table_name,$column_name){
    		try {
    			$result = $this->db->query('
    				SELECT COLUMN_NAME AS colname
    			    FROM information_schema.columns 
    			    WHERE TABLE_NAME = "'.$table_name.'"
    			    AND COLUMN_NAME = "'.$column_name.'" AND TABLE_SCHEMA = "'.$this->db->database.'" 
    			    GROUP BY column_name;
    				');
    			if($result->num_rows>0){
    				return $result->row()->colname;
    			}else{
    				return '';
    			}
    		} catch (Exception $e) {
    			return FALSE;
    		}
    	}
    
    	function run_this(){
    		//script update database disini        
            $this->db->query("SET FOREIGN_KEY_CHECKS=0;");
            $this->db->query("SET SQL_MODE='ALLOW_INVALID_DATES';");


			      $this->db->query("REPLACE INTO `biaya_perkara` (`alur_perkara_id`, `jenis_biaya_id`, `jumlah`) 
                            VALUES ('8', '1', '0.00'),('17', '1', '0.00');");			
    		            
            $this->db->query("UPDATE `alur_perkara` SET `kode` = 'Pdt.G.S' WHERE `id` = '17';");
            $this->db->query("UPDATE `proses_alur_perkara` SET `batas_waktu` = '60' WHERE `alur_perkara_id` = '1' AND`tahapan_id` = '13' AND`proses_id` = '130';");
            $this->db->query("UPDATE `proses_alur_perkara` SET `batas_waktu` = '60' WHERE `alur_perkara_id` = '7' AND`tahapan_id` = '13' AND`proses_id` = '130';");
            $this->db->query("UPDATE `proses_alur_perkara` SET `batas_waktu` = '60' WHERE `alur_perkara_id` = '10' AND`tahapan_id` = '13' AND`proses_id` = '130';");
            $this->db->query("UPDATE `proses_alur_perkara` SET `batas_waktu` = '60' WHERE `alur_perkara_id` = '11' AND`tahapan_id` = '13' AND`proses_id` = '130';");
            $this->db->query("UPDATE `proses_alur_perkara` SET `batas_waktu` = '60' WHERE `alur_perkara_id` = '12' AND`tahapan_id` = '13' AND`proses_id` = '130';");
            $this->db->query("UPDATE `proses_alur_perkara` SET `batas_waktu` = '60' WHERE `alur_perkara_id` = '13' AND`tahapan_id` = '13' AND`proses_id` = '130';");
            $this->db->query("UPDATE `proses_alur_perkara` SET `batas_waktu` = '60' WHERE `alur_perkara_id` = '14' AND`tahapan_id` = '13' AND`proses_id` = '130';");
            $this->db->query("UPDATE `proses_alur_perkara` SET `batas_waktu` = '60' WHERE `alur_perkara_id` = '15' AND`tahapan_id` = '13' AND`proses_id` = '130';");

            #ecourt
            $this->db->query("REPLACE INTO `sys_menus` (`id`, `menutype`, `level`, `title`, `link`, `published`, `ordering`) VALUES ('6017', 'mainmenu', '1', 'e-Court', 'pendaftaran_online', '1', '16');");
            $this->db->query("REPLACE INTO `sys_rules` (`id`, `code`, `name`, `description`, `ordering`, `level`) VALUES ('529', 'PendaftaranOnline', 'e-Court', 'Pendaftaran e-Court', '1', '1');");
            $this->db->query("REPLACE INTO `sys_group_rule` (`groupid`, `ruleid`) VALUES ('702', '529');");
            $this->db->query("REPLACE INTO `sys_group_rule` (`groupid`, `ruleid`) VALUES 
                            ('1', '529'),
                            ('2', '529'),
                            ('10', '529'),
                            ('30', '529'),
                            ('410', '529'),
                            ('411', '529'),
                            ('412', '529'),
                            ('440', '529'),
                            ('441', '529'),
                            ('442', '529'),
                            ('450', '529'),
                            ('451', '529'),
                            ('452', '529'),
                            ('702', '529'),
                            ('1000', '529'),
                            ('1001', '529'),
                            ('1010', '529'),
                            ('1011', '529'),
                            ('1031', '529'),
                            ('1032', '529');");
            $this->db->query("REPLACE INTO `sys_menu_rule` (`menuid`, `ruleid`) VALUES ('6017', '529');");
            $this->db->query("CREATE TABLE IF NOT EXISTS `perkara_efiling` (
                              `efiling_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'Primary key (by system)',
                              `satker_id` INT(11) NOT NULL COMMENT 'pengadilan id tempat pendaftaran',
                              `kode_satker` VARCHAR(10) DEFAULT NULL COMMENT 'kode satker',
                              `nama_satker` VARCHAR(255) DEFAULT NULL COMMENT 'nama pengadilan',
                              `user_id` BIGINT(20) DEFAULT NULL COMMENT 'ID User Kepemilikan',
                              `nomor_register` VARCHAR(30) DEFAULT NULL COMMENT 'Nomor Register Pendaftaran Online',
                              `tanggal_pendaftaran` DATE DEFAULT NULL COMMENT 'Tanggal Pendaftaran: isian tanggal',
                              `alur_perkara_id` INT(11) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Id Alur Perkara: merujuk ke tabel alur_perkara kolom id(by system)',
                              `jenis_perkara_id` INT(11) UNSIGNED DEFAULT NULL COMMENT 'Id Jenis Perkara: merujuk ke tabel jenis_perkara kolom id',
                              `jenis_perkara_nama` VARCHAR(100) DEFAULT '' COMMENT 'Nama Jenis Perkara: merujuk ke tabel jenis_perkara kolom nama (by system)',
                              `status_pendaftaran_id` INT(11) DEFAULT NULL COMMENT 'Merujuk ke ref_status_pendaftaran',
                              `status_pendaftaran_text` VARCHAR(255) DEFAULT NULL COMMENT 'Merujuk ke ref_status',
                              `digit_ran` DOUBLE DEFAULT NULL COMMENT 'Angka Acak yang ditambahkan',
                              `jumlah_skum` DOUBLE DEFAULT NULL COMMENT 'Nominal Pembayaran',
                              `batas_pembayaran` DATETIME DEFAULT NULL COMMENT 'Batas Pembayaran',
                              `status_pembayaran` CHAR(1) DEFAULT '0' COMMENT '1: Dibayar else: Blm Dibayar',
                              `nomor_perkara` VARCHAR(50) DEFAULT NULL COMMENT 'Nomor Perkara setelah di setujui',
                              `tgl_pendaftaran_perkara` DATE DEFAULT NULL,
                              `diinput_oleh` VARCHAR(30) DEFAULT '' COMMENT 'Diinput Oleh: (by system)',
                              `diinput_tanggal` DATETIME DEFAULT NULL COMMENT 'Diinput Tanggal: (by system)',
                              `diperbaharui_oleh` VARCHAR(30) DEFAULT '' COMMENT 'Diperbaharui Oleh: (by system)',
                              `diperbaharui_tanggal` DATETIME DEFAULT NULL COMMENT 'Diperbaharui Tanggal: (by system)',
                              PRIMARY KEY (`efiling_id`,`satker_id`),
                              KEY `jenis_perkara_id` (`jenis_perkara_id`),
                              KEY `alur_perkara_id` (`alur_perkara_id`),
                              KEY `tanggal_pendaftaran` (`tanggal_pendaftaran`),
                              KEY `diinput_tanggal` (`diinput_tanggal`),
                              KEY `diperbaharui_tanggal` (`diperbaharui_tanggal`)
                            ) ENGINE=INNODB DEFAULT CHARSET=latin1 COMMENT='Data Induk Perkara'");

            $this->db->query("CREATE TABLE IF NOT EXISTS `perkara_edoc_calendar` (
                              `id` INT(11) NOT NULL AUTO_INCREMENT,
                              `perkara_id` BIGINT(20) UNSIGNED NOT NULL,
                              `edoc_calender` VARCHAR(250) DEFAULT NULL,
                              `diinput_oleh` VARCHAR(30) DEFAULT NULL,
                              `diinput_tanggal` DATETIME DEFAULT NULL,
                              `diperbaharui_oleh` VARCHAR(30) DEFAULT NULL,
                              `diperbaharui_tanggal` DATETIME DEFAULT NULL,
                              PRIMARY KEY (`id`),
                              KEY `perkara_id` (`perkara_id`),
                              CONSTRAINT `perkara_edoc_calendar_ibfk_1` FOREIGN KEY (`perkara_id`) REFERENCES `perkara` (`perkara_id`) ON DELETE CASCADE
                            ) ENGINE=INNODB");
            /**        
            $this->db->query("REPLACE INTO `sys_menus` (`id`, `menutype`, `level`, `title`, `link`, `published`, `ordering`) VALUES ('6018', 'mainmenu', '1', 'e-Payment', 'generate_va', '1', '17');");
            $this->db->query("REPLACE INTO `sys_rules` (`id`, `code`, `name`, `description`, `ordering`, `level`) VALUES ('530', 'GenerateVirtualAccount', 'e-Payment', 'Pembuatan Virtual Account', '1', '1'); ");
            $this->db->query("REPLACE INTO `sys_group_rule` (`groupid`, `ruleid`) VALUES ('1', '530'),
                              ('10', '530'),
                              ('702', '530'),
                              ('410', '530'),
                              ('440', '530'),
                              ('450', '530'),
                              ('1000', '530'),
                              ('1010', '530'),
                              ('1030', '530');");
            $this->db->query("REPLACE INTO `sys_menu_rule` (`menuid`, `ruleid`) VALUES ('6018', '530');");
            **/
            $this->db->query("CREATE TABLE IF NOT EXISTS `epayment_virtual_account` (
                                `epayment_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
                                `perkara_id` bigint(20) DEFAULT NULL,
                                `alur_perkara_id` int(11) DEFAULT NULL,
                                `tahapan_id` int(11) DEFAULT '10',
                                `jenis_biaya` char(1) DEFAULT NULL COMMENT '1: Panjar Perkara; 2:Tambah Panjar Perkara',
                                `trx_id` varchar(50) NOT NULL,
                                `kode_bank` varchar(3) DEFAULT NULL,
                                `nama_bank` varchar(50) DEFAULT NULL,
                                `va_id` varchar(50) NOT NULL,
                                `customer_name` varchar(150) NOT NULL,
                                `email` varchar(500) DEFAULT NULL,
                                `telepon` varchar(500) DEFAULT NULL,
                                `nominal` bigint(20) unsigned NOT NULL,
                                `created_time` datetime NOT NULL,
                                `expired_date` datetime NOT NULL,
                                `status_bayar` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0: blm dibayar; 1: sudah dibayar',
                                `is_jurnal` char(1) DEFAULT '0' COMMENT '0: blm dijurnal; 1:sudah dijurnal',
                                PRIMARY KEY (`epayment_id`),
                                UNIQUE KEY `trx_id` (`trx_id`),
                                KEY `va_id` (`va_id`),
                                KEY `kode_bank` (`kode_bank`),
                                KEY `perkara_id` (`perkara_id`)
                              ) ENGINE=InnoDB");
            $this->db->query("REPLACE INTO biaya_perkara (`alur_perkara_id`, `jenis_biaya_id`, `jumlah`) VALUES ('6', '223', '0.00'),('6', '228', '0.00');");
            $this->db->query("UPDATE `sys_menus` SET `ordering` = '999' WHERE `id` = '2';");
            $this->db->query("UPDATE `sys_menus` SET `ordering` = '998' WHERE `id` = '64';");
            $this->db->query("UPDATE `sys_menus` SET `ordering` = '997' WHERE `id` = '262';");

            $this->db->query("REPLACE INTO updates_catatan(id,update_id, deskripsi) VALUES 
                        (550,18,'Perbaikan nama kasir di cetak Jurnal Harian (yg tandatangan kasir yang aktif).'),
                        (551,18,'Perbaikan Jenis pekara pengangkatan anak tidak ada di list jenis perkara permohonan (jurnal agama).'),
                        (552,18,'Perbaikan Perkara Volunter masih ada memasukan data Termohon (agama).'),
                        (553,18,'Perbaikan Perkara prodeo DIPA defaultnya masih ada transaksi pendaftaran (menurut perma tidak dipungut pendaftaran).'),
                        (554,18,'Perbaikan tanggal dan nmr resi diwajibkan pada delegasi keluar.'),
                        (555,18,'Perbaikan nama depan pihak dengan dua suku kata di cetak PBT yang hilang suku nama pertamanya.'),
                        (556,18,'Perbaikan tidak ada biaya pelaksanaan delegasi utk perkara pidana.'),
                        (557,18,'Perbaikan kehadiran pihak PARA PIHAK TIDAK HADIR statusnya Data Kehadiran Belum Lengkap.'),
                        (558,18,'Perbaikan Riwayat penahanan pada template perpanjangan penahanan harusnya tidak menampilkan perpanjangan oleh hakim'),
                        (559,18,'Perbaikan amar putusan keberatan Gugatan Sederhana error validasi, muncul kurang dari 50 karakter'),
                        (560,18,'Perbaikan Saat terdakwa dibebaskan dari penahanan (ditambah data penahanan) counter/jumlah status penahanan yang masa penahananannya habis tidak berkurang, tapi kalo diklik list datanya berkurang (jumlahnya beda dengan counter).'),
                        (561,18,'Perbaikan Penyempurnaan Slide Sidang (penambahan informasi majelis hakim, panitera dan jam sidang) untuk Militer.'),
                        (562,18,'Perbaikan jenis perkara : Objek Sengketa Bukan Tanah/Pembatalan Arbitrase, jangka waktu 50 hari tanpa ada mediasi'),
                        (563,18,'Perbaikan Amar Putusan Perlawanan dan Amar Putusan Verzet kurang dari 50 karakter padahal sudah diisi lebih dari 50 Karakter.'),
                        (564,18,'Perbaikan Kewenangan Gugatan Sederhana Peradilan Agama.'),
                        (565,18,'Perbaikan Nomor perkara Gugatan Sederhana Ekonomi Syariah (Pdt.G.S)'),
                        (566,18,'Perbaikan Gugatan Sederhana tidak bisa edit panjar'),
                        (567,18,'Perbaikan Putusan Verstek Gugatan Sederhana dan putusan verzet Perdata, tampil nya tidak padahal sudah dipilih Ya;'),
                        (568,18,'Perbaikan upload file dismissal gugatan sederhana tidak bisa'),
                        (569,18,'Perbaikan pihak publikasi di edit data umum sesuai jenis klasifikasi perkaranya.'),
                        (570,18,'Perbaikan template Penetapan Hari Sidang Militer'),
                        (571,18,'Perbaikan akses user staff bagian kepegawaian terhadap menu Referensi Hakim Tingkat Pertama, Hakim Tinggi, Hakim Agung, Juru Sita, Panitera Tingkat Pertama, Panitera Pengadilan Tinggi, Panitera Mahkamah Agung'),
                        (572,18,'Perbaikan Dapat mengisi tanggal Minutasi pada perkara Pengujian Penyalahgunaan Wewenang (UU AP) tanpa data Termohon TUN'),
                        (573,18,'Penambahan notifikasi pada list delegasi utk delegasi lama sebelum SIPP versi 320'),
                        (574,18,'Perbaikan lama proses mediasi maksimal 60 hari pada reminder'),
                        (575,18,'Perbaikan cetak jurnal harian ( Biaya Hak Tanggungan )'),
                        (576,18,'Perbaikan Pilihan panjar perkara PHI tidak muncul saat edit panjar'),
                        (577,18,'Perbaikan PK pidana umum, hakim pemeriksa adalah hakim tunggal bukan majelis, dan cetak PMH dan penetapan pemeriksaan error'),
                        (578,18,'Perbaikan pada tanggal validasi putusan sela. Sehingga bisa mengisi tanggal putusan sela yang bertepatan dengan tanggal sidang pertama'),
                        (579,18,'Perbaikan kolom keterangan pada edit pemberitahuan putusan tidak bisa tersimpan'),
                        (580,18,'Penambahan menu Perkara Yang Ditangani untuk User Panitera Muda Perkara'),
                        (581,18,'Penambahan Fitur E Court'),
                        (582,18,'Perbaikan fitur Court Calender'),
                        (583,18,'Perbaikan data ganda pada saat rekam PHS'),
                        (584,18,'Perbaikan penambahan PK untuk pemohona kedua'),
                        (585,18,'Perbaikan pemberitahuan putusan dengan kewenangan jurusita/jsp yang hilang tanggal minutasi'),
                        (586,18,'Perbaikan tab putusan hilang untuk status putusan gugur pada GS');");
            
            $this->db->query("DROP FUNCTION IF EXISTS GetListParaPihakText");
            $this->db->query("CREATE FUNCTION `GetListParaPihakText`(var_id BIGINT) RETURNS VARCHAR(3000) CHARSET latin1
              BEGIN
                DECLARE listpihak1 VARCHAR(3000);
                DECLARE listpihak2 VARCHAR(3000);
                DECLARE listpihak3 VARCHAR(3000);
                DECLARE listpihak4 VARCHAR(3000);
                DECLARE listparapihak VARCHAR(3000);
                DECLARE alurPerkaraId INTEGER;
                DECLARE jenisPerkaraId INTEGER;
                DECLARE pihak1Nama VARCHAR(250);
                DECLARE pihak2Nama VARCHAR(250);
                DECLARE pihak3Nama VARCHAR(250);
                DECLARE pihak4Nama VARCHAR(250);
                DECLARE tahapanId INTEGER;
                 
                  SELECT pihak1_text INTO listpihak1 FROM perkara  WHERE perkara_id=var_id ;
                  SELECT pihak2_text INTO listpihak2 FROM perkara  WHERE perkara_id=var_id ;
                  SELECT pihak3_text INTO listpihak3 FROM perkara  WHERE perkara_id=var_id ;
                  SELECT pihak4_text INTO listpihak4 FROM perkara  WHERE perkara_id=var_id ;
                  
                  SELECT alur_perkara_id INTO alurPerkaraId FROM perkara WHERE perkara_id=var_id;
                  SELECT jenis_perkara_id INTO jenisPerkaraId FROM perkara WHERE perkara_id=var_id;
                  SELECT tahapan_terakhir_id INTO tahapanId FROM perkara WHERE perkara_id=var_id;
                 
                  SELECT nama INTO pihak1Nama FROM status_pihak WHERE alur_perkara_id=alurPerkaraId AND tahapan_id=10 AND pihak_ke=1;
                  SELECT nama INTO pihak2Nama FROM status_pihak WHERE alur_perkara_id=alurPerkaraId AND tahapan_id=10 AND pihak_ke=2;
                  SELECT nama INTO pihak3Nama FROM status_pihak WHERE alur_perkara_id=alurPerkaraId AND tahapan_id=10 AND pihak_ke=3;
                  SELECT nama INTO pihak4Nama FROM status_pihak WHERE alur_perkara_id=alurPerkaraId AND tahapan_id=10 AND pihak_ke=4;
                  
                  IF (alurPerkaraID IS NOT NULL AND alurPerkaraId=15 AND jenisPerkaraID=346 AND tahapanId>=10 AND tahapanId<20) THEN 
                  SET pihak1Nama='Pemohon';
                  SET pihak2Nama='Termohon';
                  END IF;
                  IF (alurPerkaraID IS NOT NULL AND alurPerkaraId=1 AND jenisPerkaraID=622 AND tahapanId>=10 AND tahapanId<20) THEN 
                  SET pihak1Nama='Pemohon';
                  SET pihak2Nama='Termohon';
                  END IF;
                  IF(listpihak1 IS NOT NULL AND listpihak1 <> '' AND listpihak2 IS NOT NULL AND listpihak2 <> '' AND listpihak4 IS NOT NULL AND listpihak4 <> '') THEN
                     SET listparapihak=CONCAT(pihak1Nama,':<br />',listpihak1,'<br />',pihak2Nama,':<br />',listpihak2,'<br />',pihak4Nama,':<br />',listpihak4);
                  ELSEIF(listpihak1 IS NOT NULL AND listpihak1 <> '' AND listpihak2 IS NOT NULL AND listpihak2 <> '') THEN
                     SET listparapihak=CONCAT(pihak1Nama,':<br />',listpihak1,'<br />',pihak2Nama,':<br />',listpihak2);
                  ELSEIF(listpihak1 IS NOT NULL AND listpihak1 <> '' AND (listpihak2 IS NULL OR listpihak2='')) THEN
                     SET listparapihak=CONCAT(pihak1Nama,':<br />',listpihak1);
                  ELSEIF((listpihak1 IS NULL OR listpihak1='') AND listpihak2 IS NOT NULL AND listpihak2 <> '') THEN
                     SET listparapihak=CONCAT(pihak2Nama,':<br />',listpihak2);
                  ELSE
                     SET listparapihak=NULL;
                  END IF;
                  
                  IF((alurPerkaraId =1 OR alurperkaraid=9) AND listpihak3 IS NOT NULL AND listpihak3 <> '') THEN
                     SET listparapihak=CONCAT(listparapihak,'<br />',pihak3Nama,':<br />',listpihak3);
                  END IF;
                  
                RETURN listparapihak;
            END;");

            $this->db->query("CREATE VIEW `v_durasi_mediasi` AS (SELECT perkara_id, SUM(DATEDIFF(IF(tgl_laporan_mediator IS NULL,NOW(),tgl_laporan_mediator),dimulai_mediasi)) AS durasi_mediasi 
	            FROM perkara_mediasi 
	            WHERE tahapan_id = 10 
	            GROUP BY perkara_id);");
            
            $this->db->query("UPDATE sys_config SET `value` = '3.2.0-5' WHERE id = '80';");

    		//update table update patch 3.2.0-4
    		$data = array('updated' => 1,'updated_stamp'=>date("Y-m-d H:i:s"));
    		$this->db->where('patch_ver', '3.2.0-5');
    		$this->db->update('updates', $data); 
    		
    		$this->db->query("SET FOREIGN_KEY_CHECKS=1;");
    
    		return true;
    	}
    
    }