api_pst.py 13.1 KB
# ###############################################################################
# # Modul WSDL pbb_pst.py digunakan untuk memproses data pelayanan online ke    #
# # SIM PBB                                                                     #
# # Module ini terdiri dari 3 method yaitu                                      #
# # 1. Menerima Data PST dari sistem online                                     #
# # 2. Memperoleh data tracking                                                 #
# # 3. Memperoleh posisi terakhir berkas pelayanan                              #
# ###############################################################################
# import logging
# import sys

# from tangsel.base import get_params
# from tangsel.base.tools import date_from_str
# from tangsel.base.tools.api import auth_from_rpc, JsonRpcDataNotFoundError, JsonRpcInvalidData
# from tangsel.tools.pbb import FixNopel, FixNop
# import time

# LIMIT = 1000
# CODE_OK = 0
# CODE_NOT_FOUND = -1
# CODE_DATA_INVALID = -2
# CODE_INVALID_LOGIN = -10
# CODE_NETWORK_ERROR = -11
# MSG_NOT_FOUND = "Data Tidak Ditemukan"
# MSG_DATA_INVALID = "Data Tidak Sesuai"
# MSG_INVALID_LOGIN = "Gagal Login"
# MSG_NETWORK_ERROR = "Network Error"

# from pyramid_rpc.jsonrpc import jsonrpc_method, JsonRpcError
# from .. import PbbDBSession
# from .. import (
#     PstPermohonan,
#     PstLampiran,
#     PstDetail,
#     PstDataOpBaru,
#     PstPermohonanPengurangan as PstPengurangan,
#     MaxUrutPstOl,
#     PosisiPegawai,
#     BerkasKirim,
#     BerkasTerima
# )
# from datetime import (datetime, timedelta)
# from .api import ApiBase

# log = logging.getLogger(__name__)


# ################################################################################
# # Methode set_pst ini dipanggil pada saat data pelayanan online di approve
# # Parameter
# # kd_kanwil                  : kd_kanwil
# # kd_kantor                  : kd_kantor
# # thn_pelayanan              : thn_pelayanan
# # bundel_pelayanan           : bundel_pelayanan
# # no_urut_pelayanan          : no_urut_pelayanan
# # *parameter diatas isi datanya kosong pada saat data permohonan baru dan diisi
# # jika diupdate datanya
# # no_srt_permohonan          : {no_srt_permohonan}
# # tgl_surat_permohonan       : {tgl_surat_permohonan}
# # nama_pemohon               : {nama_pemohon}
# # alamat_pemohon             : {alamat_pemohon}
# # keterangan_pst             : {keterangan_pst}
# # status_kolektif            : {status_kolektif}
# # kd_propinsi_pemohon        : {kd_propinsi_pemohon}
# # kd_dati2_pemohon           : {kd_dati2_pemohon}
# # kd_kecamatan_pemohon       : {kd_kecamatan_pemohon}
# # kd_kelurahan_pemohon       : {kd_kelurahan_pemohon}
# # kd_blok_pemohon            : {kd_blok_pemohon}
# # no_urut_pemohon            : {no_urut_pemohon}
# # kd_jns_op_pemohon          : {kd_jns_op_pemohon}
# # kd_jns_pelayanan           : {kd_jns_pelayanan}
# # thn_pajak_permohonan       : {thn_pajak_permohonan}
# # l_permohonan               : {l_permohonan}
# # l_surat_kuasa              : {l_surat_kuasa}
# # l_ktp_wp                   : {l_ktp_wp}
# # l_sertifikat_tanah         : {l_sertifikat_tanah}
# # l_sppt                     : {l_sppt}
# # l_imb                      : {l_imb}
# # l_akte_jual_beli           : {l_akte_jual_beli}
# # l_sk_pensiun               : {l_sk_pensiun}
# # l_sppt_stts                : {l_sppt_stts}
# # l_stts                     : {l_stts}
# # l_sk_pengurangan           : {l_sk_pengurangan}
# # l_sk_keberatan             : {l_sk_keberatan}
# # l_skkp_pbb                 : {l_skkp_pbb}
# # l_spmkp_pbb                : {l_spmkp_pbb}
# # l_lain_lain                : {l_lain_lain}
# # l_sket_tanah               : {l_sket_tanah}
# # l_sket_lurah               : {l_sket_lurah}
# # l_npwpd                    : {l_npwpd}
# # l_penghasilan              : {l_penghasilan}
# # l_cagar                    : {l_cagar}
# # jns_pengurangan            : {jns_pengurangan}
# # pct_permohonan_pengurangan : {pct_permohonan_pengurangan}
# def pstdataopbaru(r):
#     return r['kd_jns_pelayanan'] == '01'


# def pstpengurangan(r):
#     return r['kd_jns_pelayanan'] in ['08', '10']


# def filter_nop(qry, nop, tahun=None):
#     nop = FixNop(nop)
#     qry = qry.filter_by(
#         kd_propinsi_pemohon=nop["kd_propinsi"],
#         kd_dati2_pemohon=nop["kd_dati2"],
#         kd_kecamatan_pemohon=nop["kd_kecamatan"],
#         kd_kelurahan_pemohon=nop["kd_kelurahan"],
#         kd_blok_pemohon=nop["kd_blok"],
#         no_urut_pemohon=nop["no_urut"],
#         kd_jns_op_pemohon=nop["kd_jns_op"], )
#     if tahun:
#         qry = qry.filter_by(thn_pajak_sppt=tahun)
#     return qry


# class Api(ApiBase):

#     @jsonrpc_method(method='get_pst', endpoint='pbb-api')
#     def get_pst(self, data):
#         request = self.req
#         if "no_pelayanan" in data:
#             nopel = data["no_pelayanan"]
#         elif "nopel" in data:
#             nopel = data["nopel"]
#         else:
#             raise JsonRpcError(message="Parameter no_pelayanan tidak ada")
#         if len(nopel) == 11:
#             nopel = "".join([get_params("pbb_kantor"), nopel])

#         pst_permohonan = PstPermohonan.query_nopel(nopel).first()
#         if not pst_permohonan:
#             raise JsonRpcDataNotFoundError
#         pst_detail = PstDetail.query_id("".join([nopel, data["nop"]])).first()
#         if not pst_detail:
#             raise JsonRpcDataNotFoundError

#         resp = pst_permohonan.to_dict()
#         resp["detail"] = pst_detail.to_dict()
#         log.warning("Req from {}: {}".format(request.client_addr, resp))
#         return dict(data=resp)

#     @jsonrpc_method(method='set_pst', endpoint='pbb-api')
#     def set_pst(self, data):
#         time.sleep(1)
#         request = self.req
#         log.warning("Req from {}: {}".format(request.client_addr, self.data))
#         auth_from_rpc(request)
#         if "nopel" in data:
#             nopel = data["nopel"]
#         elif "kd_kanwil" in data:
#             nopel = "".join(
#                 [data["kd_kanwil"], data["kd_kantor"], data['thn_pelayanan'],
#                  data['bundel_pelayanan'],
#                  data['no_urut_pelayanan']
#                  ])
#         else:
#             nopel = "".join(MaxUrutPstOl.get_nopel(request))

#         r = data
#         if 'tgl_surat_permohonan' in r and r['tgl_surat_permohonan'] and isinstance(r['tgl_surat_permohonan'],str):
#             r['tgl_surat_permohonan'] = date_from_str(r['tgl_surat_permohonan'])
#         if 'tgl_terima_dokumen_wp' in r and r['tgl_terima_dokumen_wp'] and isinstance(r['tgl_terima_dokumen_wp'],str):
#             r['tgl_terima_dokumen_wp'] = date_from_str(r['tgl_terima_dokumen_wp'])
#         if 'tgl_perkiraan_selesai' in r and r['tgl_perkiraan_selesai'] and isinstance(r['tgl_perkiraan_selesai'],str):
#             r['tgl_perkiraan_selesai'] = date_from_str(r['tgl_perkiraan_selesai'])
#         if 'created' in r and r['created'] and isinstance(r['created'],str):
#             r['created'] = date_from_str(r['created'])
#         if 'updated' in r and r['updated'] and isinstance(r['updated'],str):
#             r['updated'] = date_from_str(r['updated'])
#         if 'tgl_selesai' in r and r['tgl_selesai'] and isinstance(r['tgl_selesai'],str):
#             r['tgl_selesai'] = date_from_str(r['tgl_selesai'])
            
#         r.update(FixNopel(nopel).to_dict())
#         pst_permohonan = PstPermohonan.get_by_nopel(r)
#         if not pst_permohonan:
#             pst_permohonan = PstPermohonan()
#             r['tgl_terima_dokumen_wp'] = datetime.now()
#             if not 'tgl_perkiraan_selesai' in data or not data['tgl_perkiraan_selesai']:
#                 r['tgl_perkiraan_selesai'] = r['tgl_terima_dokumen_wp'] + timedelta(
#                     days=7)
#             # r['tgl_surat_permohonan'] = datetime.strptime(
#                 # r['tgl_surat_permohonan'][:10], '%Y-%m-%d')
#             r['bundel_pelayanan'] = r['bundel']
#             r['no_urut_pelayanan'] = r['urut']

#         pst_permohonan.from_dict(r)
#         PbbDBSession.add(pst_permohonan)
#         PbbDBSession.flush()
#         pst_lampiran = PstLampiran.get_by_nopel(r)
#         if not pst_lampiran:
#             pst_lampiran = PstLampiran()
#         pst_lampiran.from_dict(r)
#         PbbDBSession.add(pst_lampiran)
#         PbbDBSession.flush()

#         pst_detail = PstDetail.get_by_nopel(r)
#         if not pst_detail:
#             pst_detail = PstDetail()

#         posisi = PosisiPegawai.query_nip(r['nip_penerima']).first()
#         if not posisi:
#             raise JsonRpcInvalidData(message='(nip_penerima) Not Found.')
#         posisi = posisi.to_dict()

#         r['kd_seksi_berkas'] = posisi['kd_seksi']  # '80'
#         r['tgl_selesai'] = r['tgl_perkiraan_selesai']
#         r['status_selesai'] = '0'

#         pst_detail.from_dict(r)
#         PbbDBSession.add(pst_detail)
#         PbbDBSession.flush()
#         if pstdataopbaru(r):
#             pst_data_op_baru = PstDataOpBaru.get_by_nopel(r)
#             if not pst_data_op_baru:
#                 pst_data_op_baru = PstDataOpBaru()

#             r['nama_wp_baru'] = r['nama_pemohon'][0:30]
#             r['letak_op_baru'] = r['alamat_pemohon'][0:35]

#             pst_data_op_baru.from_dict(r)
#             PbbDBSession.add(pst_data_op_baru)
#             PbbDBSession.flush()

#         if pstpengurangan(r):
#             pst_pengurangan = PstPengurangan.get_by_nopel(r)
#             if not pst_pengurangan:
#                 pst_pengurangan = PstPengurangan()
#             r['nama_wp_baru'] = r['nama_pemohon']
#             r['letak_op_baru'] = r['alamat_pemohon']

#             pst_pengurangan.from_dict(r)
#             PbbDBSession.add(pst_pengurangan)
#             PbbDBSession.flush()

#         return dict(data=r)

#     @jsonrpc_method(method='get_pst_tracking', endpoint='pbb-api')
#     def get_pst_tracking(self, data):
#         auth_from_rpc(self.req)
#         r = data
#         query = PstDetail.get_tracking().filter(
#             PstDetail.kd_kanwil == r['kd_kanwil'],
#             PstDetail.kd_kantor == r['kd_kantor'],
#             PstDetail.thn_pelayanan == r['thn_pelayanan'],
#             PstDetail.bundel_pelayanan == r['bundel_pelayanan'],
#             PstDetail.no_urut_pelayanan == r['no_urut_pelayanan'],
#             PstDetail.kd_propinsi_pemohon == r['kd_propinsi_pemohon'],
#             PstDetail.kd_dati2_pemohon == r['kd_dati2_pemohon'],
#             PstDetail.kd_kecamatan_pemohon == r['kd_kecamatan_pemohon'],
#             PstDetail.kd_kelurahan_pemohon == r['kd_kelurahan_pemohon'],
#             PstDetail.kd_blok_pemohon == r['kd_blok_pemohon'],
#             PstDetail.no_urut_pemohon == r['no_urut_pemohon'],
#             PstDetail.kd_jns_op_pemohon == r['kd_jns_op_pemohon'],
#         )
#         query = query.order_by(BerkasKirim.tgl_kirim.desc(),
#                                BerkasTerima.tgl_terima.desc())
#         row = query.first()
#         if not row:
#             raise JsonRpcDataNotFoundError

#         fields = row.keys()
#         result = dict(zip(fields, row))
#         return dict(data=result)

#     @jsonrpc_method(method='get_pst_position', endpoint='pbb-api')
#     def get_pst_position(self, data):
#         # Digunakan untuk tracking data permohonan denga parameter
#         # kd_kanwil                  : kd_kanwil
#         # kd_kantor                  : kd_kantor
#         # thn_pelayanan              : thn_pelayanan
#         # bundel_pelayanan           : bundel_pelayanan
#         # no_urut_pelayanan          : no_urut_pelayanan
#         # nop
#         auth_from_rpc(self.req)
#         r = data
#         query = PstDetail.get_position()
#         query.filter(PstDetail.kd_kanwil == r['kd_kanwil'],
#                      PstDetail.kd_kantor == r['kd_kantor'],
#                      PstDetail.thn_pelayanan == r['thn_pelayanan'],
#                      PstDetail.bundel_pelayanan == r['bundel_pelayanan'],
#                      PstDetail.no_urut_pelayanan == r['no_urut_pelayanan'],
#                      PstDetail.kd_propinsi_pemohon == r['kd_propinsi_pemohon'],
#                      PstDetail.kd_dati2_pemohon == r['kd_dati2_pemohon'],
#                      PstDetail.kd_kecamatan_pemohon == r[
#                          'kd_kecamatan_pemohon'],
#                      PstDetail.kd_kelurahan_pemohon == r[
#                          'kd_kelurahan_pemohon'],
#                      PstDetail.kd_blok_pemohon == r['kd_blok_pemohon'],
#                      PstDetail.no_urut_pemohon == r['no_urut_pemohon'],
#                      PstDetail.kd_jns_op_pemohon == r['kd_jns_op_pemohon'], )
#         row = query.first()
#         if not row:
#             raise JsonRpcDataNotFoundError
#         fields = row.keys()
#         result = dict(zip(fields, row))
#         return dict(data=result)

#     @jsonrpc_method(method='get_pst_tracking_detail', endpoint='pbb-api')
#     def get_pst_tracking_detail(self, data):
#         auth_from_rpc(self.req)
#         r = data
#         query = PstDetail.get_tracking_detail(r['nopel'])
#         row = query.all()
#         if not row:
#             raise JsonRpcDataNotFoundError

#         fields = row.keys()
#         result = dict(zip(fields, row))
#         return dict(data=result)