kpk.py 7.39 KB
# """
# {
#     "jsonrpc": "2.0",
#     "method": "inquiry",
#     "id": 1,
#     "params": {
#         "data": {
#             "nik":"XXXXXXXXXXXXXXXXXX",
#             "nama":"NAMA WP",
#             "alamat_wp":"ALAMAT WP",
#             "nop":"XXXXXXXXXXXXXXXXXX",
#             "alamat_op":"ALAMAT OP",
#         }
#     }
# }
# """
# """
# {
#     "jsonrpc": "2.0",
#     "id": 1,
#     "result": {
#         "count":1,
#         "data": {[
#             “nop”: “328989898291829182918”
#             "alamat_op": "JL BATULAWANG",
#             "kelurahan_op": "KELURAHAN HEGARSARI",
#             "kecamatan_op": "KECAMATAN PATARUMAN",
#             "kota_op": "Ciamis",
#             "luas_tanah": 105,
#             "luas_bangunan": 85,
#             "njop_bumi": 99880000,  
#             "njop_bng": 99880000,
#             "njop_bng": 99880000,
#             "nama_wp": "JL BATULAWANG",
#             "alamat_wp": "Bunisari",
#             "kelurahan_wp": "Bunisari",
#             "kecamatan_wp": "Bunisari",
#             "kota_wp": "Ciamis"  
#         ]}
#     }
# }
# """
# import logging
# import sys

# from tangsel.base import get_settings
# from tangsel.base.tools import number_only, round_up
# from tangsel.base.tools.api import (auth_from_rpc,
#                                       JsonRpcDataNotFoundError, JsonRpcInvalidData)
# from pyramid_rpc.jsonrpc import jsonrpc_method
# from sqlalchemy import func

# from tangsel.pbb.models import DatSubjekPajak, DatObjekPajak

# if sys.version[0] == '2':
#     raise Exception("Harus Python 3")


# log = logging.getLogger(__name__)


# class Kpk:
#     def __init__(self, request):
#         self.req = request
#         self.settings = get_settings()
#         self.data = None
#         self.nama = self.nop = self.nik = None
#         self.alamat_wp = self.alamat_op = None
#         self.limit = 10
#         self.page = 1
#         self.count = 0
#         self.pages = 1

#     def set_search(self):
#         self.nama = 'nama' in self.data and self.data["nama"].strip().upper() or None
#         self.nop = 'nop' in self.data and number_only(self.data["nop"].strip()) or None
#         self.nik = 'nik' in self.data and number_only(self.data['nik'].strip()) or None
#         self.alamat_wp = 'alamat_wp' in self.data and \
#                          self.data['alamat_wp'].strip().upper() or None
#         self.alamat_op = 'alamat_op' in self.data and \
#                          self.data['alamat_op'].strip().upper() or None
#         if not self.nama and not self.nop and not self.nik and not self.alamat_wp \
#                 and not self.alamat_op:
#             raise JsonRpcInvalidData

#     def get_subjek(self):
#         subjek = DatSubjekPajak.query()
#         if self.nama:
#             nama = self.nama.replace("*", "%")
#             # log.info(nama)
#             subjek = subjek.filter(
#                 DatSubjekPajak.nm_wp.like(nama))

#         if self.nik:
#             subjek = subjek.filter(
#                 func.trim(DatSubjekPajak.subjek_pajak_id) == self.nik)

#         if self.alamat_wp:
#             alamat = self.alamat_wp.replace("*", "%")
#             subjek = subjek.filter(DatSubjekPajak.jalan_wp.like(alamat))

#         # log.setLevel()
#         # print(subjek)
#         if not subjek.first():
#             return

#         # log.info("Subjek: {}".format(subjek.count()))
#         return subjek

#     def get_objek(self, subjek=None):
#         if self.nop:
#             objek = DatObjekPajak.query_nop(self.nop)
#         else:
#             objek = DatObjekPajak.query()

#         if self.alamat_op:
#             alamat = self.alamat_op.replace("*", "%")
#             objek = objek.filter(DatObjekPajak.jalan_op.like(alamat))

#         if self.nik:
#             objek = objek.filter(func.trim(DatObjekPajak.subjek_pajak_id) == self.nik)

#         if subjek:
#             subjek_id = [s.subjek_pajak_id.strip() for s in subjek.all()]
#             objek = objek.filter(func.trim(DatObjekPajak.subjek_pajak_id) \
#                                  .in_(subjek_id))

#         self.count = objek.count()
#         if not self.count:
#             raise JsonRpcDataNotFoundError

#         self.pages = round_up(self.count / float(self.limit))
#         return objek

#     def get_data(self):
#         self.set_search()
#         self.data = []
#         if self.nop or self.alamat_op or self.nik:
#             objek = self.get_objek()
#         else:
#             subjek = self.get_subjek()
#             if not subjek:
#                 raise JsonRpcDataNotFoundError
#             objek = self.get_objek(subjek)

#         return self.get_profile(objek.limit(self.limit) \
#                                 .offset((self.page-1) * self.limit))

#     @jsonrpc_method(method='inquiry', endpoint='api-kpk-pbb')
#     def inquiry(self, data):
#         self.data = data
#         request = self.req
#         log.warning("Req from {}: {}".format(request.client_addr, self.data))
#         auth_from_rpc(request)
#         if "page" in data and data["page"]:
#             self.page = int(data["page"])

#         if "limit" in data and data["limit"]:
#             self.limit = int(data["limit"])

#         self.get_data()
#         if not self.data:
#             raise JsonRpcDataNotFoundError

#         log.warning("Resp to {}: {}".format(request.client_addr, self.data))
#         return dict(count=self.count,
#                     page=self.page,
#                     limit=self.limit,
#                     pages=self.pages,
#                     data=self.data)

#     def get_profile(self, objek):
#         for o in objek.all():
#             d = self.get_profile_(o.subjek_pajak, o)
#             if d:
#                 self.data.append(d)

#     def get_profile_(self, s, objek):
#         # log.info(s.to_dict())
#         # log.info(objek.to_dict())
#         if self.nama:
#             nama = self.nama.replace('*', '').replace('%', '')
#             if s.nm_wp.find(nama) < 0:
#                 return

#         return {"nop": objek.nop,
#                 "nik": objek.subjek_pajak_id.strip(),
#                 "alamat_op": "{} {} RT {}/{}".format(
#                     objek.jalan_op and objek.jalan_op.strip() or "",
#                     objek.blok_kav_no_op and objek.blok_kav_no_op.strip() or "",
#                     objek.rt_op and objek.rt_op.strip() or "000",
#                     objek.rw_op and objek.rw_op.strip() or "00"
#                 ),
#                 "kelurahan_op": objek.kelurahan.nm_kelurahan.strip(),
#                 "kecamatan_op": objek.kecamatan.nm_kecamatan.strip(),
#                 "kota_op": objek.dati2.nm_dati2.strip(),
#                 "luas_bumi": int(objek.total_luas_bumi),
#                 "luas_bng": int(objek.total_luas_bng),
#                 "njop_bumi": int(objek.njop_bumi),
#                 "njop_bng": int(objek.njop_bng),
#                 "njop": int(objek.njop_bumi + objek.njop_bng),
#                 "nama_wp": s.nm_wp.strip(),
#                 "alamat_wp": "{} {} RT {}/{}".format(
#                     s.jalan_wp and s.jalan_wp.strip() or "",
#                     s.blok_kav_no_wp and s.blok_kav_no_wp.strip() or "",
#                     s.rt_wp and s.rt_wp.strip() or "000",
#                     s.rw_wp and s.rw_wp.strip() or "00"),
#                 "kelurahan_wp": s.kelurahan_wp and s.kelurahan_wp.strip() or "",
#                 "kecamatan_wp": "",
#                 "kota_wp": s.kota_wp and s.kota_wp.strip() or ""}