· 9 years ago · Nov 10, 2016, 04:28 AM
1<?php defined('BASEPATH') OR exit('No direct script access allowed');
2date_default_timezone_set("Asia/Singapore");
3
4/**
5* Problem sejauh ini ada di security Filter IP, Auth sama Secret Key selebihnya lancar aja
6*/
7
8require_once "./application/libraries/REST_Controller.php";
9
10class Api extends REST_Controller
11{
12 private $kampus = 'YAYASAN UKHUWAH BANJARMASIN';
13 private $secretKey = 'ukhuwah001';
14
15 private $allowed_ips = array('119.2.80.1', '119.2.80.2', '119.2.80.3','127.0.0.1','::1','192.168.92.1');
16
17 private $allowed_collecting_agents = array('427');
18 private $allowed_channels = array('TELLER', 'IBANK', 'ATM', 'SMS','MBANK');
19
20 public function index_get()
21 {
22 $que = $this->db->query("SELECT * FROM tsiswa");
23 $this->response($que->result(), 200);
24 }
25 public function index_post()
26 {
27 $que = $this->db->query("SELECT tsiswa.noinduk, FROM tsiswa tsiswa INNER JOIN ");
28 $this->response($que->result(), 200);
29 }
30 public function bro_post()
31 {
32 $ni = $this->konversiNIM($this->post("nomorPembayaran"));
33 $reqinq['kodeBank'] = $this->post('kodeBank');
34 $reqinq['kodeChannel'] = $this->post('kodeChannel');
35 $reqinq['kodeTerminal'] = $this->post('kodeTerminal');
36 $reqinq['nomorPembayaran'] = $this->post("nomorPembayaran");
37 $reqinq['tanggalTransaksi'] = $this->post('tanggalTransaksi');
38 $reqinq['idTransaksi'] = $this->post('idTransaksi');
39 $sql = "SELECT TOP 1 *,TSPembayaran.kode as kd FROM (((((((tsiswa
40 INNER JOIN TSPembayaran ON tsiswa.kode=TSPembayaran.kodesiswa)
41 INNER JOIN tskelas ON tskelas.kode = tsiswa.kodekelas )
42 INNER JOIN tmjurusan ON tsiswa.kodejurusan = tmjurusan.kode)
43 INNER JOIN tmthnpelajaran ON tmthnpelajaran.kode = TSPembayaran.kodethnpelajaran)
44 INNER JOIN TJenisPembayaran ON TJenisPembayaran.kode = TSPembayaran.kodejenispembayaran)
45 INNER JOIN tmkelas ON tmkelas.kode = tskelas.kodekelas)
46 INNER JOIN TUraianPembayaran ON TUraianPembayaran.kode=TSPembayaran.kodeuraian)
47 INNER JOIN tmruang ON tmruang.kode = tskelas.koderuang
48 WHERE tsiswa.noinduk = '$ni' ORDER BY TSPembayaran.kode ASC";
49 // $sql = " SELECT tsiswa.noinduk, tsiswa.nama, ";
50 $res = $this->db->query($sql);
51 if ($res->num_rows() > 0) {
52 $i=0;
53 // $this->response($res, 200);
54 foreach ($res->result() as $value) {
55 $i++;
56 $resinq[$i]['code'] = '00';
57 $resinq[$i]['data']['nomorPembayaran'] = $reqinq['nomorPembayaran'];
58 $resinq[$i]['data']['idTagihan'] = $value->kd;
59 $resinq[$i]['data']['nomorInduk'] = $ni;
60 $resinq[$i]['data']['nama'] = $value->nama;
61 $resinq[$i]['data']['fakultas'] = $value->kelas; // kelas (1,2,A,B)
62 $resinq[$i]['data']['jurusan'] = $value->ruang; // tingkat (A,B,1,2,3,4)
63 $resinq[$i]['data']['strata'] = $value->jurusan; // level (sd,smp,sma)
64 $resinq[$i]['data']['periode'] = $value->thnpelajaran; // tahun pelajaran(thnpelajaran)
65 $resinq[$i]['data']['angkatan'] = '-';
66 $resinq[$i]['data']['totalNominal'] = intval(str_replace('.0000', '', $value->besar))+2000;
67
68 $resinq[$i]['details']['item'][0]['kodeTransaksi'] = $reqinq['idTransaksi'];
69 $resinq[$i]['details']['item'][0]['deskripsiPendek'] = $value->NamaPembukuan;
70 $resinq[$i]['details']['item'][0]['deskripsiPanjang'] = $value->UraianPembukuan;
71 $resinq[$i]['details']['item'][0]['nominalTransaksi'] = str_replace('.0000', '', $value->besar);
72 $resinq[$i]['details']['item'][1]['kodeTransaksi'] = $reqinq['idTransaksi'];
73 $resinq[$i]['details']['item'][1]['deskripsiPendek'] = "Biaya Admin";
74 $resinq[$i]['details']['item'][1]['deskripsiPanjang'] = "Biaya Administrasi Pembayaran";
75 $resinq[$i]['details']['item'][1]['nominalTransaksi'] = 2000;
76 }
77
78 // $resinq['daftarItemPembayaran'] = $daftarItemPembayaran;
79
80
81 $this->response($resinq, 200);
82 print_r($res->result());
83 }
84 else{
85 $this->response([
86 'status' => FALSE,
87 'sql' => $sql,
88 'nim' => $ni,
89 'message' => 'Gak ada bro.. '.$this->kampus,
90 ], 200);
91 }
92 }
93 public function h2h_get()
94 {
95 # perubahan pada database access :
96 # 1. Relasi antara tabel ttransaksi dan jenis pembayaran dihapus
97 # 2. Menambah field baru id transaksi di tabel ttransaksi
98 # Hora, sekarang gua ngoding di macOS wkwk.
99 # jadi pengen install hackintosh gua haha.
100 }
101
102 private function konversiNIM($nomorPembayaran) {
103 // return $nomorPembayaran;
104
105 $maping = array(
106 '01' => 'A',
107 '02' => 'B',
108 '03' => 'C',
109 '04' => 'D',
110 '05' => 'E',
111 '06' => 'F',
112 '07' => 'G',
113 '08' => 'H',
114 '09' => 'I',
115 '10' => 'J',
116 '11' => 'K',
117 '12' => 'L',
118 '13' => 'M',
119 '14' => 'N',
120 '15' => 'O',
121 '16' => 'P',
122 '17' => 'Q',
123 '18' => 'R',
124 '19' => 'S',
125 '20' => 'T',
126 );
127 $huruf = substr($nomorPembayaran, 0,2);
128 $noPembayaran = str_replace($huruf, $maping[$huruf], $nomorPembayaran);
129 $nomorInduk = substr_replace($noPembayaran, '.', 3,1);
130 return $nomorInduk;
131 }
132 private function adaTagihan($nomorPembayaran) {
133 $nim = $this->konversiNIM($nomorPembayaran);
134 $sql = "SELECT TOP 1 *,TSPembayaran.kode as kd FROM (((((((tsiswa
135 INNER JOIN TSPembayaran ON tsiswa.kode=TSPembayaran.kodesiswa)
136 INNER JOIN tskelas ON tskelas.kode = tsiswa.kodekelas )
137 INNER JOIN tmjurusan ON tsiswa.kodejurusan = tmjurusan.kode)
138 INNER JOIN tmthnpelajaran ON tmthnpelajaran.kode = TSPembayaran.kodethnpelajaran)
139 INNER JOIN TJenisPembayaran ON TJenisPembayaran.kode = TSPembayaran.kodejenispembayaran)
140 INNER JOIN tmkelas ON tmkelas.kode = tskelas.kodekelas)
141 INNER JOIN TUraianPembayaran ON TUraianPembayaran.kode=TSPembayaran.kodeuraian)
142 INNER JOIN tmruang ON tmruang.kode = tskelas.koderuang
143 WHERE tsiswa.noinduk = '$nim' ORDER BY TSPembayaran.kode ASC";
144 $request = $this->db->query($sql);
145 if ($request->num_rows() == 0) {
146 return false;
147 }
148 return true;
149 }
150 // function dalamPeriodeTagihan($nomorPembayaran) {
151 // $nim = konversiNIM($nomorPembayaran);
152 // $sql = sprintf(
153 // "select count(*) as jumlah
154 // from biller_tagihan where (nomor_pembayaran = '%s' OR nomor_pembayaran='%s')
155 // AND ( waktu_berlaku is NULL
156 // or waktu_berlaku <= now())
157 // and ( waktu_berakhir is NULL
158 // or waktu_berakhir >= now()) "
159 // , mysql_escape_string($nim)
160 // , mysql_escape_string($nomorPembayaran)
161 // );
162 // $result = mysql_query($sql);
163 // $row = mysql_fetch_assoc($result);
164 // if ($row['jumlah'] < 1) {
165 // return false;
166 // } else {
167 // return true;
168 // }
169 // }
170 // private function belumLunas($nomorPembayaran) {
171 // $nim = konversiNIM($nomorPembayaran);
172 // // $sql = sprintf(
173 // // "select count(*) as sisa from biller_tagihan "
174 // // . "where (nomor_pembayaran='%s' OR nomor_pembayaran='%s')"
175 // // . "and is_tagihan_aktif=1 "
176 // // . "and "
177 // // . "(waktu_berlaku is NULL "
178 // // . "or waktu_berlaku < now()) "
179 // // . "and "
180 // // . "(waktu_berakhir is NULL "
181 // // . "or waktu_berakhir > now()) "
182 // // . "and id_record_tagihan not in( "
183 // // . " select id_record_tagihan from ca_pembayaran "
184 // // . " where status_pembayaran=1 "
185 // // . ")", mysql_escape_string($nim), mysql_escape_string($nomorPembayaran)
186 // // );
187 // // $result = mysql_query($sql);
188 // // $row = mysql_fetch_assoc($result);
189 // // $sisa_tagihan = intval($row['sisa']);
190 // // mysql_free_result($result);
191 // if (false) {
192 // return true;
193 // }
194 // return false;
195 // }
196 function ambilTagihan($nomorPembayaran) {
197 $nim = $this->konversiNIM($nomorPembayaran);
198 $sql = "SELECT TOP 1 *,TSPembayaran.kode as kd FROM (((((((tsiswa
199 INNER JOIN TSPembayaran ON tsiswa.kode=TSPembayaran.kodesiswa)
200 INNER JOIN tskelas ON tskelas.kode = tsiswa.kodekelas )
201 INNER JOIN tmjurusan ON tsiswa.kodejurusan = tmjurusan.kode)
202 INNER JOIN tmthnpelajaran ON tmthnpelajaran.kode = TSPembayaran.kodethnpelajaran)
203 INNER JOIN TJenisPembayaran ON TJenisPembayaran.kode = TSPembayaran.kodejenispembayaran)
204 INNER JOIN tmkelas ON tmkelas.kode = tskelas.kodekelas)
205 INNER JOIN TUraianPembayaran ON TUraianPembayaran.kode=TSPembayaran.kodeuraian)
206 INNER JOIN tmruang ON tmruang.kode = tskelas.koderuang
207 WHERE tsiswa.noinduk = '$nim' ORDER BY TSPembayaran.kode ASC";
208 $result = $this->db->query($sql);
209 $row = $result->result();
210 if (!$result) {
211 return false;
212 }
213 $total_data = $result->num_rows();
214 if ($total_data < 1) {
215 return false;
216 }
217 foreach ($row as $value) {
218 $dataTagihan = array(
219 'id_record_tagihan' => $value->kd,
220 'nomor_induk' => $nim,
221 'total_nilai_tagihan' => intval(str_replace('.0000', '', $value->besar))+2000,
222 'nama' => $value->nama,
223 'fakultas' => $value->kelas,
224 'jurusan' => $value->ruang,
225 'strata' => $value->jurusan,
226 'periode' => $value->thnpelajaran,
227 'angkatan' => '-',
228 'NamaPembukuan' => $value->NamaPembukuan,
229 'UraianPembukuan' => $value->UraianPembukuan,8
230 );
231 }
232 return $dataTagihan;
233 }
234
235 public function h2h_post()
236 {
237 $action = $this->post("action");
238 if (!in_array($_SERVER['REMOTE_ADDR'], $this->allowed_ips)) {
239 // echo $_SERVER['REMOTE_ADDR'];
240 // $response .= '<response><code>NA</code><message>Fungsi ditutup oleh ' . $this->kampus . ' dari sistem Anda</message></response>';
241 // echo $response;
242 $this->response([
243 'status' => FALSE,
244 'ip' => $_SERVER['REMOTE_ADDR'],
245 'code' => 'NA',
246 'message' => 'FUNGSI DITUTUP OLEH '.$this->kampus.' DARI SISTEM ANDA',
247 ], 200);
248 exit();
249 }
250 switch ($action) {
251 case 'inquiry':
252 $reqinq['kodeBank'] = $this->post('kodeBank');
253 $reqinq['kodeChannel'] = $this->post('kodeChannel');
254 $reqinq['kodeTerminal'] = $this->post('kodeTerminal');
255 $reqinq['nomorPembayaran'] = $this->post('nomorPembayaran');
256 $reqinq['tanggalTransaksi'] = $this->post('tanggalTransaksi');
257 $reqinq['idTransaksi'] = $this->post('idTransaksi');
258
259 // mulai proses
260 // cek apakah variable yang dikirim lengkap?
261 if (empty($reqinq['kodeBank']) || empty($reqinq['kodeChannel']) || empty($reqinq['kodeTerminal']) || empty($reqinq['nomorPembayaran']) || empty($reqinq['tanggalTransaksi']) || empty($reqinq['idTransaksi']))
262 {
263 $this->response([
264 'status' => FALSE,
265 'code' => 30,
266 'message' => 'SALAH FORMAT MESSAGE',
267 ], 200);
268 exit();
269 }
270 // cek apakah bank terdaftar?
271 if (!in_array($reqinq['kodeBank'], $this->allowed_collecting_agents)) {
272 $this->response([
273 'status' => FALSE,
274 'code' => 31,
275 'message' => 'COLLECTING AGENT TIDAK TERDAFTAR DI '.$this->kampus,
276 ], 200);
277 exit();
278 }
279 // cek apakah channel disupport?
280 if (!in_array($reqinq['kodeChannel'], $this->allowed_channels)) {
281 $this->response([
282 'status' => FALSE,
283 'code' => 58,
284 'message' => 'CHANNEL TIDAK DIPERBOLEHKAN DI '.$this->kampus,
285 ], 200);
286 exit();
287 }
288 // cek apakah ada data tagihan?
289 if (!$this->adaTagihan($reqinq['nomorPembayaran'])) {
290 $this->response([
291 'status' => FALSE,
292 'code' => 14,
293 'message' => 'TAGIHAN TIDAK DITEMUKAN DI '.$this->kampus,
294 ], 200);
295 exit();
296 }
297 // cek apakah masih dalam periode pembayaran yang diperbolehkan?
298 // if (!dalamPeriodeTagihan($nomorPembayaran)) {
299 // $this->response([
300 // 'status' => FALSE,
301 // 'code' => 81,
302 // 'message' => 'TIDAK BERLAKU PERIODE BAYAR DI '.$this->kampus,
303 // ], 200);
304 // exit();
305 // }
306 // cek apakah sudah lunas apa belum?
307 // if (!belumLunas($reqinq['nomorPembayaran'])) {
308 // // $response .= '<response><code>88</code><message>Tagihan sudah terbayar di ' . $this->kampus . '</message></response>';
309 // $this->response([
310 // 'status' => FALSE,
311 // 'code' => 88,
312 // 'message' => 'TAGIHAN SUDAH TERBAYAR DI '.$this->kampus,
313 // ], 200);
314 // exit();
315 // }
316 $data = $this->ambilTagihan($reqinq['nomorPembayaran']);
317 if ($data == false) {
318 $this->response([
319 'status' => FALSE,
320 'code' => 14,
321 'message' => 'TAGIHAN YANG BISA DIBAYAR TIDAK DITEMUKAN DI '.$this->kampus,
322 ], 200);
323 exit();
324 }
325 // $detilData = ambilDetilTagihan($data['id_record_tagihan']);
326 // if ($detilData == false) {
327 // $detilData = array();
328 // $detilData[] = array(
329 // 'id_record_detil_tagihan' => $data['id_record_tagihan'] . '0',
330 // 'id_record_tagihan' => $data['id_record_tagihan'],
331 // 'label_jenis_biaya' => 'PEMBAYARAN',
332 // 'label_jenis_biaya_panjang' => 'PEMBAYARAN',
333 // 'nilai_tagihan' => $data['total_nilai_tagihan']
334 // );
335 // }
336 //print_r($detilData); exit();
337 // $jumlahDetail = count($detilData);
338 // //echo $jumlahDetail;exit();
339 // $total_nominal_detil = 0;
340 // for ($i = 0; $i < $jumlahDetail; $i++) {
341 // $total_nominal_detil += $detilData[$i]['nilai_tagihan'];
342 // }
343 // //echo $jumlahDetail;exit();
344 // if ($total_nominal_detil != $data['total_nilai_tagihan']) {
345 // $response .= '<response><code>30</code><message>Salah format nilai tagihan dari ' . $kampus . '</message></response>';
346 // debugLog('RESPONSE: ' . $response);
347 // echo $response;
348 // exit();
349 // }
350 // semua pengecekan sudah selesai
351 if (true) {
352 $resinq['code'] = '00';
353 $resinq['data']['nomorPembayaran'] = $reqinq['nomorPembayaran'];
354 $resinq['data']['idTagihan'] = $data['id_record_tagihan'];
355 $resinq['data']['nomorInduk'] = $data['nomor_induk'];
356 $resinq['data']['nama'] = $data['nama'];
357 $resinq['data']['fakultas'] = $data['fakultas']; // kelas (1,2,A,B)
358 $resinq['data']['jurusan'] = $data['jurusan']; // tingkat (A,B,1,2,3,4)
359 $resinq['data']['strata'] = $data['strata']; // level (sd,smp,sma)
360 $resinq['data']['periode'] = $data['periode']; // tahun pelajaran(thnpelajaran)
361 $resinq['data']['angkatan'] = $data['angkatan'];
362 $resinq['data']['totalNominal'] = $data['total_nilai_tagihan'];
363
364 $resinq['details']['item'][0]['kodeTransaksi'] = (int)'1001'.$data['id_record_tagihan'];
365 $resinq['details']['item'][0]['deskripsiPendek'] = $data['NamaPembukuan'];
366 $resinq['details']['item'][0]['deskripsiPanjang'] = $data['UraianPembukuan'];
367 $resinq['details']['item'][0]['nominalTransaksi'] = $data['total_nilai_tagihan'];
368
369 $resinq['details']['item'][1]['kodeTransaksi'] = (int)'1002'.$data['id_record_tagihan'];
370 $resinq['details']['item'][1]['deskripsiPendek'] = "Admin Bank";
371 $resinq['details']['item'][1]['deskripsiPanjang'] = "Biaya Admin Bank";
372 $resinq['details']['item'][1]['nominalTransaksi'] = 2000;
373
374 // $resinq['daftarItemPembayaran'] = $daftarItemPembayaran;
375
376
377 $this->response($resinq, 200);
378 // $this->response($request->result(), 200);
379 }
380 else {
381 $this->response([
382 'status' => FALSE,
383 'code' => 14,
384 'message' => 'NOMOR PEMBAYARAN TIDAK DITEMUKAN',
385 'origin' => 'UNIVERSITAS'
386 ], REST_Controller::HTTP_NOT_FOUND);
387 }
388
389 break;
390 case 'payment':
391 $reqpay['kodeBank'] = $this->post('kodeBank');
392 $reqpay['kodeChannel'] = $this->post('kodeChannel');
393 $reqpay['kodeTerminal'] = $this->post('kodeTerminal');
394 $reqpay['nomorPembayaran'] = $this->post('nomorPembayaran');
395 $reqpay['idTagihan'] = $this->post('idTagihan');
396 $reqpay['tanggalTransaksi'] = $this->post('tanggalTransaksi');
397
398 $reqpay['kodeTransaksi'] = $this->post('kodeTransaksi');
399 $reqpay['deskripsiPendek'] = $this->post('deskripsiPendek');
400 $reqpay['deskripsiPanjang'] = $this->post('deskripsiPanjang');
401 $reqpay['nominalTransaksi'] = $this->post('nominalTransaksi');
402
403 $reqpay['totalNominal'] = $this->post('totalNominal');
404 $reqpay['idTransaksi'] = $this->post('idTransaksi');
405 $reqpay['nomorJurnalPembukuan'] = $this->post('nomorJurnalPembukuan');
406 $reqpay['daftarPembayaran'] = $this->post('daftarPembayaran');
407
408 // mulai proses
409 // cek apakah variable yang dikirim lengkap?
410 if (empty($reqpay['kodeBank']) || empty($reqpay['kodeChannel']) || empty($reqpay['kodeTerminal']) || empty($reqpay['nomorPembayaran']) || empty($reqpay['tanggalTransaksi']) || empty($reqpay['idTransaksi']) || empty($reqpay['totalNominal']) || empty($reqpay['nomorJurnalPembukuan']) || empty($reqpay['daftarPembayaran']))
411 {
412 $this->response([
413 'status' => FALSE,
414 'code' => 30,
415 'message' => 'SALAH FORMAT MESSAGE',
416 ], 200);
417 exit();
418 }
419 // cek apakah bank terdaftar?
420 if (!in_array($reqpay['kodeBank'], $this->allowed_collecting_agents)) {
421 $this->response([
422 'status' => FALSE,
423 'code' => 31,
424 'message' => 'COLLECTING AGENT TIDAK TERDAFTAR DI '.$this->kampus,
425 ], 200);
426 exit();
427 }
428 // cek apakah channel disupport?
429 if (!in_array($reqpay['kodeChannel'], $this->allowed_channels)) {
430 $this->response([
431 'status' => FALSE,
432 'code' => 58,
433 'message' => 'CHANNEL TIDAK DIPERBOLEHKAN DI '.$this->kampus,
434 ], 200);
435 exit();
436 }
437 // cek detail pembayaran yang dikirim apakah total nominalnya sesuai?
438 // $daftarPembayaranExploded = explode('||', $daftarPembayaran);
439 // $total_nominal_detil = 0;
440 // $item_pembayaran_ca = array();
441 // for ($i = 0; $i < count($daftarPembayaranExploded); $i++) {
442 // $itemPembayaran = explode(';', $daftarPembayaranExploded[$i]);
443 // if (count($itemPembayaran) == 4) {
444 // $total_nominal_detil += (double) $itemPembayaran[3];
445 // $item_pembayaran_ca[] = array(
446 // 'kodeTransaksi' => $itemPembayaran[0],
447 // 'deskripsiPendek' => $itemPembayaran[1],
448 // 'deskripsiPanjang' => $itemPembayaran[2],
449 // 'nominalTransaksi' => (double) $itemPembayaran[3]
450 // );
451 // }
452 // }
453 // if ($total_nominal_detil != $reqpay['totalNominal']) {
454 // $this->response([
455 // 'status' => FALSE,
456 // 'code' => 30,
457 // 'message' => 'SALAH FORMAT NILAI TAGIHAN DARI CA',
458 // ], 200);
459 // exit();
460 // }
461 // cek apakah ada data tagihan?
462 if (!$this->adaTagihan($reqpay['nomorPembayaran'])) {
463 $this->response([
464 'status' => FALSE,
465 'code' => 14,
466 'message' => 'TAGIHAN TIDAK DITEMUKAN DI '.$this->kampus,
467 ], 200);
468 exit();
469 }
470
471 // cek apakah masih dalam periode pembayaran yang diperbolehkan?
472 // if (!dalamPeriodeTagihan($nomorPembayaran)) {
473 // $this->response([
474 // 'status' => FALSE,
475 // 'code' => 81,
476 // 'message' => 'TIDAK BERLAKU PERIODE BAYAR DI '.$this->kampus,
477 // ], 200);
478 // exit();
479 // }
480 // cek apakah sudah lunas apa belum?
481 // if (!belumLunas($reqpay['nomorPembayaran'])) {
482 // // $response .= '<response><code>88</code><message>Tagihan sudah terbayar di ' . $this->kampus . '</message></response>';
483 // $this->response([
484 // 'status' => FALSE,
485 // 'code' => 88,
486 // 'message' => 'TAGIHAN SUDAH TERBAYAR DI '.$this->kampus,
487 // ], 200);
488 // exit();
489 // }
490 $data = $this->ambilTagihan($reqpay['nomorPembayaran']);
491 if ($data == false) {
492 $this->response([
493 'status' => FALSE,
494 'code' => 14,
495 'message' => 'TAGIHAN YANG BISA DIBAYAR TIDAK DITEMUKAN DI '.$this->kampus,
496 ], 200);
497 exit();
498 }
499 // $detilData = ambilDetilTagihan($data['id_record_tagihan']);
500 // if ($detilData == false) {
501 // $detilData = array();
502 // $detilData[] = array(
503 // 'id_record_detil_tagihan' => $data['id_record_tagihan'] . '0',
504 // 'id_record_tagihan' => $data['id_record_tagihan'],
505 // 'label_jenis_biaya' => 'PEMBAYARAN',
506 // 'label_jenis_biaya_panjang' => 'PEMBAYARAN',
507 // 'nilai_tagihan' => $data['total_nilai_tagihan']
508 // );
509 // }
510 //print_r($detilData); exit();
511 // $jumlahDetail = count($detilData);
512 // //echo $jumlahDetail;exit();
513 // $total_nominal_detil = 0;
514 // for ($i = 0; $i < $jumlahDetail; $i++) {
515 // $total_nominal_detil += $detilData[$i]['nilai_tagihan'];
516 // }
517 // //echo $jumlahDetail;exit();
518 // if ($total_nominal_detil != $data['total_nilai_tagihan']) {
519 // $response .= '<response><code>30</code><message>Salah format nilai tagihan dari ' . $kampus . '</message></response>';
520 // debugLog('RESPONSE: ' . $response);
521 // echo $response;
522 // exit();
523 // }
524 // semua pengecekan sudah selesai
525 $nim = $this->konversiNIM($reqpay['nomorPembayaran']);
526 $sql = "SELECT TOP 1 *,TSPembayaran.besar as nominal,
527 (SELECT MAX(kode) FROM ttransaksi) as maxkode
528 FROM (((((((TSPembayaran
529 INNER JOIN tsiswa ON TSPembayaran.kodesiswa=tsiswa.kode)
530 INNER JOIN tskelas ON tskelas.kode = tsiswa.kodekelas )
531 INNER JOIN tmjurusan ON tsiswa.kodejurusan = tmjurusan.kode)
532 INNER JOIN tmthnpelajaran ON tmthnpelajaran.kode = TSPembayaran.kodethnpelajaran)
533 INNER JOIN TJenisPembayaran ON TJenisPembayaran.kode = TSPembayaran.kodejenispembayaran)
534 INNER JOIN tmkelas ON tmkelas.kode = tskelas.kodekelas)
535 INNER JOIN TUraianPembayaran ON TUraianPembayaran.kode=TSPembayaran.kodeuraian)
536 INNER JOIN tmruang ON tmruang.kode = tskelas.koderuang
537 WHERE tsiswa.noinduk = '$nim' ORDER BY TSPembayaran.kode ASC";
538 $request = $this->db->query($sql);
539 # Response
540 if (true) {
541 $time = date("H:i:s");
542 $month = date("m");
543 $tmbulan = array( '07' => 1,
544 '08' => 2,
545 '09' => 3,
546 '10' => 4,
547 '11' => 5,
548 '12' => 6,
549 '01' => 7,
550 '02' => 8,
551 '03' => 9,
552 '04' => 10,
553 '05' => 11,
554 '06' => 12,
555 );
556 $date = date("m/d/Y");
557 $time = date("H:i:s");
558 foreach ($request->result() as $value) {
559 $kode = $value->maxkode + 1;
560 $kodethnpelajaran = $value->kodethnpelajaran;
561 $kodesiswa = $value->kodesiswa;
562 $kodeuraian = $value->kodeuraian;
563 $NamaPembukuan = $value->NamaPembukuan;
564 $thnpelajaran = $value->thnpelajaran;
565
566 }
567 $id_record_pembayaran = $reqpay['nomorPembayaran'] . '-' . uniqid();
568 $billref = $id_record_pembayaran;
569 $sqlInsertTransaction = "INSERT INTO ttransaksi(kode,kodethnpelajaran,[tgl],[tgl_insert],[jam],kodesiswa,kodepembayaran,kodeuraian,kodebln,item,hrg_satuan,potongan,ket1,ket2,ket3,ket4,ket5,debet,kredit,isikut,isbayar,ismasuk,ispembayaran,isbulanan,isangsuran,isperitem,ispost,kodeuser,nokwitansi,nomorjurnalpembukuan,idtransaksi) VALUES($kode,$kodethnpelajaran,(Format(Now(), 'mm/dd/yyyy')),(Format(Now(), 'mm/dd/yyyy')),'$time',$kodesiswa,$kodeuraian,$kodeuraian,$tmbulan[$month],0,$reqpay[totalNominal],0,'Pembayaran $NamaPembukuan','Pembayaran $NamaPembukuan','Pembayaran $NamaPembukuan melalui $reqpay[kodeChannel] BANK $reqpay[kodeBank]',$reqpay[nomorPembayaran],null,$reqpay[totalNominal],0,false,true,true,true,true,false,false,true,6,888,'$reqpay[nomorJurnalPembukuan]','$reqpay[idTransaksi]')";
570 $excInsertTransaction = $this->db->query($sqlInsertTransaction);
571 if ($excInsertTransaction) {
572 # Response
573 $respay['code'] = '00';
574 $respay['data']['nomorPembayaran'] = $reqpay['nomorPembayaran'];
575 $respay['data']['idTagihan'] = $data['id_record_tagihan'];
576 $respay['data']['nomorInduk'] = $data['nomor_induk'];
577 $respay['data']['nama'] = $data['nama'];
578 $respay['data']['fakultas'] = $data['fakultas']; // kelas (1,2,A,B)
579 $respay['data']['jurusan'] = $data['jurusan']; // tingkat (A,B,1,2,3,4)
580 $respay['data']['strata'] = $data['strata']; // level (sd,smp,sma)
581 $respay['data']['periode'] = $thnpelajaran; // tahun pelajaran(thnpelajaran)
582 $respay['data']['angkatan'] = '-';
583 $this->response($respay, 200);
584 }
585 else {
586 $this->response([
587 'status' => FALSE,
588 'code' => 91,
589 'message' => 'DATABASE ERROR SAAT PROSES FLAG DIBAYAR DI '.$this->kampus,
590 ], 200);
591 exit();
592 }
593 } else {
594 $this->response([
595 'status' => FALSE,
596 'code' => 14,
597 'message' => 'NOMOR PEMBAYARAN TIDAK DITEMUKAN',
598 'origin' => 'UNIVERSITAS'
599 ], REST_Controller::HTTP_NOT_FOUND);
600 }
601
602
603 break;
604 case 'reversal':
605 # Request PMSHB-111
606 $reqrev['kodeBank'] = $this->post('kodeBank');
607 $reqrev['kodeChannel'] = $this->post('kodeChannel');
608 $reqrev['kodeTerminal'] = $this->post('kodeTerminal');
609 $reqrev['nomorPembayaran'] = $this->post('nomorPembayaran');
610 $reqrev['idTagihan'] = $this->post('idTagihan');
611 $reqrev['nominalTransaksi'] = $this->post('nominalTransaksi');
612 $reqrev['tanggalTransaksi'] = $this->post('tanggalTransaksi');
613 $reqrev['tanggalTransaksiAsal'] = $this->post('tanggalTransaksiAsal');
614 $reqrev['idTransaksi'] = $this->post('idTransaksi');
615 //echo '<pre>';print_r($_POST);
616 // mulai proses
617 // cek apakah variable yang dikirim lengkap?
618 if (empty($reqrev['kodeBank']) || empty($reqrev['kodeChannel']) || empty($reqrev['kodeTerminal']) || empty($reqrev['nomorPembayaran']) || empty($reqrev['tanggalTransaksi']) || empty($reqrev['tanggalTransaksiAsal']) || empty($reqrev['idTransaksi']) || empty($reqrev['nominalTransaksi'])) {
619 $this->response([
620 'status' => FALSE,
621 'code' => 30,
622 'message' => 'SALAH FORMAT MESSAGE',
623 ], 200);
624 exit();
625 }
626 // cek apakah bank terdaftar?
627 if (!in_array($reqrev['kodeBank'], $this->allowed_collecting_agents)) {
628 $this->response([
629 'status' => FALSE,
630 'code' => 31,
631 'message' => 'COLLECTING AGENT TIDAK TERDAFTAR DI '.$this->kampus,
632 ], 200);
633 exit();
634 }
635 // cek apakah channel disupport?
636 if (!in_array($reqrev['kodeChannel'], $this->allowed_channels)) {
637 $this->response([
638 'status' => FALSE,
639 'code' => 58,
640 'message' => 'CHANNEL TIDAK DIPERBOLEHKAN DI '.$this->kampus,
641 ], 200);
642 exit();
643 }
644 // cek apakah ada transaksi pembayaran tersebut sebelumnya?
645 // $sql = sprintf(
646 // "select * from ca_pembayaran "
647 // . "where "
648 // . "kode_bank = '%s' "
649 // . "and kanal_bayar_bank = '%s' "
650 // . "and kode_terminal_bank = '%s' "
651 // . "and nomor_pembayaran = '%s' "
652 // . "and total_nilai_pembayaran = %d "
653 // . "and waktu_transaksi_bank = '%s' "
654 // . "and kode_unik_transaksi_bank = '%s'"
655 // , mysql_escape_string(trim($kodeBank))
656 // , mysql_escape_string(trim($kodeChannel))
657 // , mysql_escape_string(trim($kodeTerminal))
658 // , mysql_escape_string(trim($nomorPembayaran))
659 // , mysql_escape_string(intval($nominalTransaksi))
660 // , mysql_escape_string(trim($tanggalTransaksiAsal))
661 // , mysql_escape_string(trim($idTransaksi))
662 // );
663 $sql = "SELECT * FROM ttransaksi ttransaksi WHERE ttransaksi.debet = $reqrev[nominalTransaksi] AND ttransaksi.idtransaksi = '$reqrev[idTransaksi]' AND ttransaksi.ismasuk = 1 ";
664 $result = $this->db->query($sql);
665 $jumlahRow = $result->num_rows();
666 if ($jumlahRow == 0) {
667 $this->response([
668 'status' => FALSE,
669 'code' => 63,
670 'message' => 'REVERSAL DITOLAK. TAGIHAN BELUM DIBAYAR DI '.$this->kampus,
671 ], 200);
672 exit();
673 }
674 if ($jumlahRow > 1) {
675 $this->response([
676 'status' => FALSE,
677 'code' => 91,
678 'message' => 'DATA PEMBAYARAN DOUBLE DI '.$this->kampus,
679 ], 200);
680 exit();
681 }
682 $dataPembayaran = $result->result_array(); // harusnya ada 1 row.
683 if ($dataPembayaran[0]['ket5'] == 'REVERSAL') {
684 $this->response([
685 'status' => FALSE,
686 'code' => 94,
687 'message' => 'REVERSAL SEBELUMNYA SUDAH DILAKUKAN DI '.$this->kampus,
688 ], 200);
689 exit();
690 }
691 $nim = $this->konversiNIM($reqrev['nomorPembayaran']);
692 $sql = "SELECT TOP 1 *,TSPembayaran.besar as nominal,
693 (SELECT MAX(kode) FROM ttransaksi) as maxkode
694 FROM (((((((TSPembayaran
695 INNER JOIN tsiswa ON TSPembayaran.kodesiswa=tsiswa.kode)
696 INNER JOIN tskelas ON tskelas.kode = tsiswa.kodekelas )
697 INNER JOIN tmjurusan ON tsiswa.kodejurusan = tmjurusan.kode)
698 INNER JOIN tmthnpelajaran ON tmthnpelajaran.kode = TSPembayaran.kodethnpelajaran)
699 INNER JOIN TJenisPembayaran ON TJenisPembayaran.kode = TSPembayaran.kodejenispembayaran)
700 INNER JOIN tmkelas ON tmkelas.kode = tskelas.kodekelas)
701 INNER JOIN TUraianPembayaran ON TUraianPembayaran.kode=TSPembayaran.kodeuraian)
702 INNER JOIN tmruang ON tmruang.kode = tskelas.koderuang
703 WHERE tsiswa.noinduk = '$nim' ORDER BY TSPembayaran.kode ASC";
704 $result = $this->db->query($sql);
705 if ($result->num_rows() != 1) {
706 $this->response([
707 'status' => FALSE,
708 'code' => 91,
709 'message' => 'DATA TAGIHAN TIDAK DITEMUKAN '.$this->kampus,
710 ], 200);
711 exit();
712 }
713 // $data = $result->result();
714 // unflag
715 $sqlUpdateTransaction = " UPDATE ttransaksi SET ket5 = 'REVERSAL', isbayar = 0,ismasuk = 1, ispembayaran = 0, isbulanan = 0, isangsuran = 0, isperitem = 0, ispost = 0 WHERE idtransaksi = '$reqrev[idTransaksi]' ";
716 $update = $this->db->query($sqlUpdateTransaction);
717 if (!$update) {
718 $this->response([
719 'status' => FALSE,
720 'code' => 91,
721 'message' => 'DATABASE ERROR SAAT PROSES FLAG REVERSAL DI '.$this->kampus,
722 ], 200);
723 exit();
724 }
725 $data = $this->ambilTagihan($reqrev['nomorPembayaran']);
726 // $sql = "SELECT *,TSPembayaran.kodethnpelajaran as kodethnpelajaran,
727 // TSPembayaran.besar as nominal,
728 // (SELECT MAX(kode) FROM ttransaksi) as maxkode FROM (((((((TSPembayaran
729 // INNER JOIN tsiswa ON TSPembayaran.kodesiswa=tsiswa.kode)
730 // INNER JOIN tskelas ON tskelas.kode = tsiswa.kodekelas )
731 // INNER JOIN tmjurusan ON tsiswa.kodejurusan = tmjurusan.kode)
732 // INNER JOIN tmthnpelajaran ON tmthnpelajaran.kode = TSPembayaran.kodethnpelajaran)
733 // INNER JOIN TJenisPembayaran ON TJenisPembayaran.kode = TSPembayaran.kodejenispembayaran)
734 // INNER JOIN tmkelas ON tmkelas.kode = tskelas.kodekelas)
735 // INNER JOIN TUraianPembayaran ON TUraianPembayaran.kode=TSPembayaran.kodeuraian)
736 // INNER JOIN tmruang ON tmruang.kode = tskelas.koderuang
737 // WHERE TSPembayaran.kode = $reqrev[nomorPembayaran]";
738 // belum (tuser,ttransaksi,tmbulan,TUraianPembayaran)
739 // $request = $this->db->query($sql);
740 if (true) {
741 # Response
742 # Response
743 $resrev['code'] = '00';
744 $resrev['data']['nomorPembayaran'] = $reqrev['nomorPembayaran'];
745 $resrev['data']['idTagihan'] = $data['id_record_tagihan'];
746 $resrev['data']['nomorInduk'] = $data['nomor_induk'];
747 $resrev['data']['nama'] = $data['nama'];
748 $resrev['data']['fakultas'] = $data['fakultas']; // kelas (1,2,A,B)
749 $resrev['data']['jurusan'] = $data['jurusan']; // tingkat (A,B,1,2,3,4)
750 $resrev['data']['strata'] = $data['strata']; // level (sd,smp,sma)
751 $resrev['data']['periode'] = $data['periode']; // tahun pelajaran(thnpelajaran)
752 $resrev['data']['angkatan'] = '-';
753 $this->response($resrev, 200);
754 } else {
755 $this->response([
756 'status' => FALSE,
757 'code' => 14,
758 'message' => 'NOMOR PEMBAYARAN TIDAK DITEMUKAN',
759 'origin' => 'UNIVERSITAS'
760 ], REST_Controller::HTTP_NOT_FOUND);
761 }
762 break;
763
764 default:
765 $this->response(NULL, REST_Controller::HTTP_BAD_REQUEST);
766 break;
767 }
768 }
769}