diff --git a/migrate/parse api/data.json b/migrate/parse api/data.json new file mode 100644 index 0000000000000000000000000000000000000000..811b2d0f4d01a0f1325cfe5796b2e39742c3a726 Binary files /dev/null and b/migrate/parse api/data.json differ diff --git a/migrate/parse api/data_short.json b/migrate/parse api/data_short.json new file mode 100644 index 0000000000000000000000000000000000000000..a5218a9760f08577b9774cac30e66197cc616bb1 --- /dev/null +++ b/migrate/parse api/data_short.json @@ -0,0 +1,77 @@ +{"jumlah_data": 179633, "data": [ + { + "tahun": 2019, + "idskpd": 1, + "kodeskpd": "1.01.01", + "namaskpd": "Dinas Pendidikan", + "kodeurusan": "1", + "namaurusan": "URUSAN PEMERINTAHAN WAJIB", + "idbidang": 1, + "kodebidang": "1.01", + "namabidang": "Pendidikan", + "idskpdsub": 2, + "kodeskpdsub": "1.01.01.01", + "namaskpdsub": "Sekretariat", + "idprogram": 56, + "kodeprogram": "1.01.001", + "namaprogram": "Program Pendidikan Menengah", + "idgiat": 1050, + "kodegiat": "1.01.1.01.01.01.1.001", + "namagiat": "KEGIATAN PENGEMBANGAN LAYANAN ASRAMA BINA SISWA CISARUA LEMBANG", + "idjenisgiat": 0, + "namajenisgiat": null, + "iddana": 1, + "namadana": "PAD", + "idbl": 4766, + "pagu": "3000000000", + "idakun": 610, + "kodeakun": "5.2.1.03.02", + "namaakun": "Uang Saku", + "idblrinci": 207886, + "kodekomponen": "10.1.1.01.01.01.001.00091", + "namakomponen": "Uang saku", + "spek": "", + "volume": "1386", + "koefisien": "1386 Orang", + "pajak": 0, + "hargasatuan": "75000", + "rincian": "103950000" + }, { + "tahun": 2009, + "idskpd": 1, + "kodeskpd": "1.01.01", + "namaskpd": "Dinas Pariwisata", + "kodeurusan": "1", + "namaurusan": "URUSAN PEMERINTAHAN WAJIB", + "idbidang": 1, + "kodebidang": "1.01", + "namabidang": "Pendidikan", + "idskpdsub": 2, + "kodeskpdsub": "1.01.01.01", + "namaskpdsub": "Sekretariat", + "idprogram": 56, + "kodeprogram": "1.01.001", + "namaprogram": "Program Pendidikan Menengah", + "idgiat": 1050, + "kodegiat": "1.01.1.01.01.01.1.001", + "namagiat": "KEGIATAN PENGEMBANGAN LAYANAN ASRAMA BINA SISWA CISARUA LEMBANG", + "idjenisgiat": 0, + "namajenisgiat": null, + "iddana": 1, + "namadana": "PAD", + "idbl": 4766, + "pagu": "3000000000", + "idakun": 610, + "kodeakun": "5.2.1.03.02", + "namaakun": "Uang Saku", + "idblrinci": 207886, + "kodekomponen": "10.1.1.01.01.01.001.00091", + "namakomponen": "Uang saku", + "spek": "", + "volume": "1386", + "koefisien": "1386 Orang", + "pajak": 0, + "hargasatuan": "75000", + "rincian": "103950000" + }] + } \ No newline at end of file diff --git a/migrate/parse api/dumpFromAPI.py b/migrate/parse api/dumpFromAPI.py new file mode 100644 index 0000000000000000000000000000000000000000..6ba6118e7cc416ae4f8da5d9296ce391e8512961 --- /dev/null +++ b/migrate/parse api/dumpFromAPI.py @@ -0,0 +1,6 @@ +import requests +import json +solditems = requests.get('http://apbd.jabarprov.go.id/api/bl-all?tahun=2019') # (your url) +data = solditems.json() +with open('data.json', 'w') as f: + json.dump(data, f) \ No newline at end of file diff --git a/migrate/parse api/parseData.py b/migrate/parse api/parseData.py new file mode 100644 index 0000000000000000000000000000000000000000..3cf233e4b4f4a39022fc14edc49701b4b1e2c2e3 --- /dev/null +++ b/migrate/parse api/parseData.py @@ -0,0 +1,157 @@ +import json +import mongoengine + +mongo = mongoengine + +mongo.connect('viz-masy', host='localhost', port=27017) + +class Rekening(mongo.Document): + id_kegiatan = mongo.IntField(required=True) + kode_rekening = mongo.StringField(required=True) + nama_rekening = mongo.StringField(required=True) + jumlah_rincian = mongo.StringField(required=True) + +class Kegiatan(mongo.Document): + id_program = mongo.IntField(required=True) + id_kegiatan = mongo.IntField(required=True) + nama_kegiatan = mongo.StringField(required=True) + rekening = mongo.ListField(mongo.StringField(), default=[], required=True) + jumlah_rincian = mongo.StringField(default = '0') + +class Program(mongo.Document): + id_skpd = mongo.IntField(required=True) + id_program = mongo.IntField(required=True) + nama_program = mongo.StringField(required=True) + kegiatan = mongo.ListField(mongo.IntField(), default=[], required=True) + jumlah_rincian = mongo.StringField(default = '0') + +class SKPD(mongo.Document): + id_urusan = mongo.IntField(required=True) + id_skpd = mongo.IntField(required=True) + nama_skpd = mongo.StringField(required=True) + program = mongo.ListField(mongo.IntField(), default=[], required=True) + jumlah_rincian = mongo.StringField(default = '0') + +class Urusan(mongo.Document): + tahun = mongo.IntField(required=True) + id_urusan = mongo.IntField(required=True) + nama_urusan = mongo.StringField(required=True) + skpd = mongo.ListField(mongo.IntField(), default=[], required=True) + jumlah_rincian = mongo.StringField(default = '0') + +# Memuat data json dari file +with open('data.json') as f: + data = json.load(f) +# Data yang dipakai adalah sebuah list of dict +# data['data'] + +# Memasukkan data urusan +print("Memroses data urusan...") +urusan = { } +for row in data['data']: + id_urusan = int(row['idbidang']) + nama_urusan = row['namabidang'] + id_skpd = int(row['idskpd']) + if not(id_urusan in urusan): + newUrusan = {'id_urusan': id_urusan, 'nama_urusan': nama_urusan, 'skpd': [id_skpd]} + urusan[id_urusan] = newUrusan + else: + if not id_skpd in urusan[id_urusan]['skpd']: + urusan[id_urusan]['skpd'].append(id_skpd) +for key in urusan.keys(): + id_urusan = urusan[key]["id_urusan"] + nama_urusan = urusan[key]["nama_urusan"] + skpd = urusan[key]["skpd"] + new_urusan = Urusan(id_urusan=id_urusan, nama_urusan=nama_urusan, skpd=skpd, tahun=2019) + new_urusan.save() + +# memasukkan data skpd +print("Memroses data skpd...") +skpd = { } +for row in data['data']: + id_urusan = int(row['idbidang']) + id_skpd = int(row['idskpd']) + nama_skpd = row['namaskpd'] + id_program = int(row['idprogram']) + if not(id_skpd in skpd): + newSKPD = {'id_urusan': id_urusan, 'id_skpd': id_skpd, 'nama_skpd': nama_skpd, 'program': [id_program]} + skpd[id_skpd] = newSKPD + else: + if not id_program in skpd[id_skpd]['program']: + skpd[id_skpd]['program'].append(id_program) + +for key in skpd.keys(): + new_skpd = SKPD(id_urusan=skpd[key]['id_urusan'], id_skpd=skpd[key]['id_skpd'], nama_skpd=skpd[key]['nama_skpd'], program=skpd[key]['program']) + new_skpd.save() + +# memasukkan data program +print("Memroses data program...") +program = { } +for row in data['data']: + id_skpd = int(row['idskpd']) + id_program = int(row['idprogram']) + nama_program = row['namaprogram'] + id_kegiatan = int(row['idgiat']) + if not(id_program in program): + newProgram = {'id_skpd': id_skpd, 'id_program': id_program, 'nama_program': nama_program, 'kegiatan': [id_kegiatan]} + program[id_program] = newProgram + else: + if not id_kegiatan in program[id_program]['kegiatan']: + program[id_program]['kegiatan'].append(id_kegiatan) +for key in program.keys(): + new_program = Program(id_skpd=program[key]['id_skpd'], id_program=program[key]['id_program'], nama_program=program[key]['nama_program'], kegiatan=program[key]['kegiatan']) + new_program.save() + +# memasukkan data kegiatan +print("Memroses data kegiatan...") +kegiatan = { } +for row in data['data']: + id_program = int(row['idprogram']) + id_kegiatan = int(row['idgiat']) + nama_kegiatan = row['namagiat'] + kode_rekening = row['kodeakun'] + if not(id_kegiatan in kegiatan): + newKegiatan = {'id_program': id_program, 'id_kegiatan': id_kegiatan, 'nama_kegiatan': nama_kegiatan, 'rekening': [kode_rekening]} + kegiatan[id_kegiatan] = newKegiatan + else: + if not kode_rekening in kegiatan[id_kegiatan]['rekening']: + kegiatan[id_kegiatan]['rekening'].append(kode_rekening) +for key in kegiatan.keys(): + new_kegiatan = Kegiatan(id_program=kegiatan[key]['id_program'], id_kegiatan=kegiatan[key]['id_kegiatan'], nama_kegiatan=kegiatan[key]['nama_kegiatan'], rekening=kegiatan[key]['rekening']) + new_kegiatan.save() + +# memasukkan data rekening +print("Memroses data rekening...") +rekening = [] +for row in data['data']: + id_kegiatan = int(row['idgiat']) + kode_rekening = row['kodeakun'] + nama_rekening = row['namaakun'] + jumlah_rincian = str(row['rincian']) + newRekening = {'id_kegiatan': id_kegiatan, 'kode_rekening': kode_rekening, 'nama_rekening': nama_rekening, 'jumlah_rincian': jumlah_rincian} + rekening.append(newRekening) + +#menyimpan rekening dan mengupdate jumlah rincian +for key in rekening: + nominal = int(key['jumlah_rincian']) + new_rekening = Rekening(id_kegiatan=key['id_kegiatan'], kode_rekening=key['kode_rekening'], nama_rekening=key['nama_rekening'], jumlah_rincian=key['jumlah_rincian']) + new_rekening.save() + # Tambahkan jumlah rincian kegiatan + parent_kegiatan = Kegiatan.objects(id_kegiatan=key['id_kegiatan']) + id_program = parent_kegiatan[0]['id_program'] + jumlah_rincian_kegiatan = int(parent_kegiatan[0]['jumlah_rincian']) + nominal + parent_kegiatan.update_one(set__jumlah_rincian=str(jumlah_rincian_kegiatan)) + # Tambahkan jumlah rincian program + parent_program = Program.objects(id_program=id_program) + id_skpd = parent_program[0]['id_skpd'] + jumlah_rincian_program = int(parent_program[0]['jumlah_rincian']) + nominal + parent_program.update_one(set__jumlah_rincian=str(jumlah_rincian_program)) + # Tambahkan jumlah rincian skpd + parent_skpd = SKPD.objects(id_skpd=id_skpd) + id_urusan = parent_skpd[0]['id_urusan'] + jumlah_rincian_skpd = int(parent_skpd[0]['jumlah_rincian']) + nominal + parent_skpd.update_one(set__jumlah_rincian=str(jumlah_rincian_skpd)) + # Tambahkan jumlah rincian urusan + parent_urusan = Urusan.objects(id_urusan=id_urusan) + jumlah_rincian_urusan = int(parent_urusan[0]['jumlah_rincian']) + nominal + parent_urusan.update_one(set__jumlah_rincian=str(jumlah_rincian_urusan)) \ No newline at end of file diff --git a/tests/unit_test.py b/tests/unit_test.py new file mode 100644 index 0000000000000000000000000000000000000000..96ab85cd6e7020e2f2f1f1533e96ec606897124b --- /dev/null +++ b/tests/unit_test.py @@ -0,0 +1,20 @@ +import unittest + +class TestStringMethods(unittest.TestCase): + + def test_upper(self): + self.assertEqual('foo'.upper(), 'FOO') + + def test_isupper(self): + self.assertTrue('FOO'.isupper()) + self.assertFalse('Foo'.isupper()) + + def test_split(self): + s = 'hello world' + self.assertEqual(s.split(), ['hello', 'world']) + # check that s.split fails when the separator is not a string + with self.assertRaises(TypeError): + s.split(2) + +if __name__ == '__main__': + # unittest.main() \ No newline at end of file