sismiop.py 18.5 KB
from tangsel.pbb.models import PBB_ARGS
from sqlalchemy import (
    Column,
    ForeignKey,
    String,
    Float,
    DateTime,
)
import logging


# from tangsel.base import routes_by_array
from sqlalchemy import engine_from_config
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import (scoped_session, sessionmaker)

from tangsel.tools import get_settings
from zope.sqlalchemy import register

from tangsel.base.models import CommonModel
session_factory = sessionmaker()
SismiopDBSession = scoped_session(session_factory)
register(SismiopDBSession)
SismiopBase = declarative_base()
pbb_schema = 'pbb'
PBB_ARGS = {'extend_existing': True, 'schema': pbb_schema}
_logging = logging.getLogger(__name__)


class SismiopModel(CommonModel):
    @classmethod
    def query(cls):
        return SismiopDBSession.query(cls)


class Sismiop(object):
    class Sppt(SismiopModel, SismiopBase):
        __tablename__ = 'sppt'
        kd_propinsi = Column(String(2), primary_key=True)
        kd_dati2 = Column(String(2), primary_key=True)
        kd_kecamatan = Column(String(3), primary_key=True)
        kd_kelurahan = Column(String(3), primary_key=True)
        kd_blok = Column(String(3), primary_key=True)
        no_urut = Column(String(4), primary_key=True)
        kd_jns_op = Column(String(1), primary_key=True)
        thn_pajak_sppt = Column(String(4), primary_key=True)
        siklus_sppt = Column(Float, nullable=False)
        kd_kanwil_bank = Column(String(2), nullable=False)
        kd_kppbb_bank = Column(String(2), nullable=False)
        kd_bank_tunggal = Column(String(2), nullable=False)
        kd_bank_persepsi = Column(String(2), nullable=False)
        kd_tp = Column(String(2), nullable=False)
        nm_wp_sppt = Column(String(100), nullable=False)
        jln_wp_sppt = Column(String(100), nullable=False)
        blok_kav_no_wp_sppt = Column(String(15))
        rw_wp_sppt = Column(String(2))
        rt_wp_sppt = Column(String(3))
        kelurahan_wp_sppt = Column(String(30))
        kota_wp_sppt = Column(String(30))
        kd_pos_wp_sppt = Column(String(5))
        npwp_sppt = Column(String(18))
        no_persil_sppt = Column(String(5))
        kd_kls_tanah = Column(String(3), nullable=False)
        thn_awal_kls_tanah = Column(String(4), nullable=False)
        kd_kls_bng = Column(String(3), nullable=False)
        thn_awal_kls_bng = Column(String(4), nullable=False)
        tgl_jatuh_tempo_sppt = Column(DateTime, nullable=False)
        luas_bumi_sppt = Column(Float, nullable=False)
        luas_bng_sppt = Column(Float, nullable=False)
        njop_bumi_sppt = Column(Float, nullable=False)
        njop_bng_sppt = Column(Float, nullable=False)
        njop_sppt = Column(Float, nullable=False)
        njoptkp_sppt = Column(Float, nullable=False)
        njkp_sppt = Column(Float, nullable=False)
        pbb_terhutang_sppt = Column(Float, nullable=False)
        faktor_pengurang_sppt = Column(Float)
        pbb_yg_harus_dibayar_sppt = Column(Float, nullable=False)
        status_pembayaran_sppt = Column(String(1), nullable=False)
        status_tagihan_sppt = Column(String(1), nullable=False)
        status_cetak_sppt = Column(String(1), nullable=False)
        tgl_terbit_sppt = Column(DateTime, nullable=False)
        tgl_cetak_sppt = Column(DateTime, nullable=False)
        nip_pencetak_sppt = Column(String(9), ForeignKey(
            'pbb.pegawai.nip'), nullable=False)
        discount = Column(Float)
        no_tlp = Column(String(20))
        nik = Column(String(20))
        __table_args__ = (PBB_ARGS
                          #     ForeignKeyConstraint([kd_kanwil_bank, kd_kppbb_bank, kd_bank_tunggal, kd_bank_persepsi, kd_tp],
                          #                          [Pbb.TempatPembayaran.kd_kanwil, Pbb.TempatPembayaran.kd_kppbb, Pbb.TempatPembayaran.kd_bank_tunggal, Pbb.TempatPembayaran.kd_bank_persepsi, Pbb.TempatPembayaran.kd_tp]),
                          #     ForeignKeyConstraint([kd_kls_tanah, thn_awal_kls_tanah], [
                          #                          Pbb.KelasTanah.kd_kls_tanah, Pbb.KelasTanah.thn_awal_kls_tanah]),
                          #     ForeignKeyConstraint([kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, kd_blok, no_urut, kd_jns_op], [Pbb.DatObjekPajak.kd_propinsi, Pbb.DatObjekPajak.kd_dati2,
                          #                          Pbb.DatObjekPajak.kd_kecamatan, Pbb.DatObjekPajak.kd_kelurahan, Pbb.DatObjekPajak.kd_blok, Pbb.DatObjekPajak.no_urut, Pbb.DatObjekPajak.kd_jns_op]),
                          #     ForeignKeyConstraint([kd_kls_bng, thn_awal_kls_bng], [Pbb.KelasBangunan.kd_kls_bng, Pbb.KelasBangunan.thn_awal_kls_bng])
                          )

    class DatObjekPajak(SismiopModel, SismiopBase):
        __tablename__ = 'dat_objek_pajak'
        kd_propinsi = Column(String(2), primary_key=True)
        kd_dati2 = Column(String(2), primary_key=True)
        kd_kecamatan = Column(String(3), primary_key=True)
        kd_kelurahan = Column(String(3), primary_key=True)
        kd_blok = Column(String(3), primary_key=True)
        no_urut = Column(String(4), primary_key=True)
        kd_jns_op = Column(String(1), primary_key=True)
        subjek_pajak_id = Column(String(30), ForeignKey(
            'pbb.dat_subjek_pajak.subjek_pajak_id'), nullable=False)
        no_formulir_spop = Column(String(11), nullable=False)
        no_persil = Column(String(5))
        jalan_op = Column(String(75), nullable=False)
        blok_kav_no_op = Column(String(15))
        rw_op = Column(String(2))
        rt_op = Column(String(3))
        kd_status_cabang = Column(Float, nullable=False)
        kd_status_wp = Column(String(1), nullable=False)
        total_luas_bumi = Column(Float, nullable=False)
        total_luas_bng = Column(Float, nullable=False)
        njop_bumi = Column(Float, nullable=False)
        njop_bng = Column(Float, nullable=False)
        status_peta_op = Column(Float, nullable=False)
        jns_transaksi_op = Column(String(1), nullable=False)
        tgl_pendataan_op = Column(DateTime, nullable=False)
        nip_pendata = Column(String(9), ForeignKey(
            'pbb.pegawai.nip'), nullable=False)
        tgl_pemeriksaan_op = Column(DateTime, nullable=False)
        nip_pemeriksa_op = Column(String(9), ForeignKey(
            'pbb.pegawai.nip'), nullable=False)
        tgl_perekaman_op = Column(DateTime, nullable=False)
        nip_perekam_op = Column(String(9), ForeignKey(
            'pbb.pegawai.nip'), nullable=False)
        tgl_rekam_nop = Column(DateTime)
        no_sertifikat = Column(String(32))
        create_date = Column(DateTime)

    class PembayaranSppt(SismiopModel, SismiopBase):
        __tablename__ = 'pembayaran_sppt'
        kd_propinsi = Column(String(2), primary_key=True)
        kd_dati2 = Column(String(2), primary_key=True)
        kd_kecamatan = Column(String(3), primary_key=True)
        kd_kelurahan = Column(String(3), primary_key=True)
        kd_blok = Column(String(3), primary_key=True)
        no_urut = Column(String(4), primary_key=True)
        kd_jns_op = Column(String(1), primary_key=True)
        thn_pajak_sppt = Column(String(4), primary_key=True)
        pembayaran_sppt_ke = Column(Float, primary_key=True)
        kd_kanwil_bank = Column(String(2), primary_key=True)
        kd_kppbb_bank = Column(String(2), primary_key=True)
        kd_bank_tunggal = Column(String(2), primary_key=True)
        kd_bank_persepsi = Column(String(2), primary_key=True)
        kd_tp = Column(String(2), primary_key=True)
        denda_sppt = Column(Float)
        jml_sppt_yg_dibayar = Column(Float, nullable=False)
        tgl_pembayaran_sppt = Column(DateTime, nullable=False)
        tgl_rekam_byr_sppt = Column(DateTime, nullable=False)
        nip_rekam_byr_sppt = Column(String(9), ForeignKey(
            'pbb.pegawai.nip'), nullable=False)
        kd_bayar_bank = Column(String(30))
        kd_bayar_pemda = Column(String(30))
        __table_args__ = (PBB_ARGS
                          # ForeignKeyConstraint([kd_kanwil_bank, kd_kppbb_bank, kd_bank_tunggal, kd_bank_persepsi, kd_tp], [Pbb.TempatPembayaran.kd_kanwil,
                          #                      Pbb.TempatPembayaran.kd_kppbb, Pbb.TempatPembayaran.kd_bank_tunggal, Pbb.TempatPembayaran.kd_bank_persepsi, Pbb.TempatPembayaran.kd_tp]),
                          # ForeignKeyConstraint([kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, kd_blok, no_urut, kd_jns_op, thn_pajak_sppt], [Pbb.Sppt.kd_propinsi, Pbb.Sppt.kd_dati2, Pbb.Sppt.kd_kecamatan, Pbb.Sppt.kd_kelurahan, Pbb.Sppt.kd_blok, Pbb.Sppt.no_urut, Pbb.Sppt.kd_jns_op, Pbb.Sppt.thn_pajak_sppt])
                          )

    class SpptOpBersama(SismiopModel, SismiopBase):
        __tablename__ = 'sppt_op_bersama'
        kd_propinsi = Column(String(2), primary_key=True)
        kd_dati2 = Column(String(2), primary_key=True)
        kd_kecamatan = Column(String(3), primary_key=True)
        kd_kelurahan = Column(String(3), primary_key=True)
        kd_blok = Column(String(3), primary_key=True)
        no_urut = Column(String(4), primary_key=True)
        kd_jns_op = Column(String(1), primary_key=True)
        thn_pajak_sppt = Column(String(4), primary_key=True)
        kd_kls_tanah = Column(String(3), nullable=False)
        thn_awal_kls_tanah = Column(String(4), nullable=False)
        kd_kls_bng = Column(String(3), nullable=False)
        thn_awal_kls_bng = Column(String(4), nullable=False)
        luas_bumi_beban_sppt = Column(Float, nullable=False)
        luas_bng_beban_sppt = Column(Float, nullable=False)
        njop_bumi_beban_sppt = Column(Float, nullable=False)
        njop_bng_beban_sppt = Column(Float, nullable=False)
        __table_args__ = (PBB_ARGS
                          # ForeignKeyConstraint([kd_kls_bng, thn_awal_kls_bng], [
                          #                      Pbb.KelasBangunan.kd_kls_bng, Pbb.KelasBangunan.thn_awal_kls_bng]),
                          # ForeignKeyConstraint([kd_kls_tanah, thn_awal_kls_tanah], [
                          #                      Pbb.KelasTanah.kd_kls_tanah, Pbb.KelasTanah.thn_awal_kls_tanah]),
                          # ForeignKeyConstraint([kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, kd_blok, no_urut, kd_jns_op, thn_pajak_sppt], [Pbb.Sppt.kd_propinsi, Pbb.Sppt.kd_dati2, Pbb.Sppt.kd_kecamatan, Pbb.Sppt.kd_kelurahan, Pbb.Sppt.kd_blok, Pbb.Sppt.no_urut, Pbb.Sppt.kd_jns_op, Pbb.Sppt.thn_pajak_sppt])
                          )

    class DatOpBumi(SismiopModel, SismiopBase):
        __tablename__ = 'dat_op_bumi'
        kd_propinsi = Column(String(2), primary_key=True)
        kd_dati2 = Column(String(2), primary_key=True)
        kd_kecamatan = Column(String(3), primary_key=True)
        kd_kelurahan = Column(String(3), primary_key=True)
        kd_blok = Column(String(3), primary_key=True)
        no_urut = Column(String(4), primary_key=True)
        kd_jns_op = Column(String(1), primary_key=True)
        no_bumi = Column(Float, primary_key=True)
        kd_znt = Column(String(2), nullable=False)
        luas_bumi = Column(Float, nullable=False)
        jns_bumi = Column(String(1), nullable=False)
        nilai_sistem_bumi = Column(Float, nullable=False)
        __table_args__ = (PBB_ARGS,
                          # ForeignKeyConstraint([kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, kd_blok, kd_znt], [
                          #                                       Pbb.DatPetaZnt.kd_propinsi, Pbb.DatPetaZnt.kd_dati2, Pbb.DatPetaZnt.kd_kecamatan, Pbb.DatPetaZnt.kd_kelurahan, Pbb.DatPetaZnt.kd_blok, Pbb.DatPetaZnt.kd_znt])

                          )

    class RefPropinsi(SismiopModel, SismiopBase):
        __tablename__ = 'ref_propinsi'
        kd_propinsi = Column(String(2), primary_key=True)
        nm_propinsi = Column(String(30), nullable=False)
        __table_args__ = (PBB_ARGS)

    class RefDati2(SismiopModel, SismiopBase):
        __tablename__ = 'ref_dati2'
        kd_propinsi = Column(String(2), ForeignKey(
            'pbb.ref_propinsi.kd_propinsi'), primary_key=True)
        kd_dati2 = Column(String(2), primary_key=True)
        nm_dati2 = Column(String(30), nullable=False)
        __table_args__ = (PBB_ARGS)

    class RefKecamatan(SismiopModel, SismiopBase):
        __tablename__ = 'ref_kecamatan'
        kd_propinsi = Column(String(2), primary_key=True)
        kd_dati2 = Column(String(2), primary_key=True)
        kd_kecamatan = Column(String(3), primary_key=True)
        nm_kecamatan = Column(String(30), nullable=False)
        __table_args__ = (PBB_ARGS)

        # ForeignKeyConstraint(
        # [kd_propinsi, kd_dati2], [Pbb.RefDati2.kd_propinsi, Pbb.RefDati2.kd_dati2])
        # )
    class RefKelurahan(SismiopModel, SismiopBase):
        __tablename__ = 'ref_kelurahan'
        kd_propinsi = Column(String(2), primary_key=True)
        kd_dati2 = Column(String(2), primary_key=True)
        kd_kecamatan = Column(String(3), primary_key=True)
        kd_kelurahan = Column(String(3), primary_key=True)
        kd_sektor = Column(String(2), ForeignKey(
            'pbb.ref_jns_sektor.kd_sektor'), nullable=False)
        nm_kelurahan = Column(String(30), nullable=False)
        no_kelurahan = Column(Float)
        kd_pos_kelurahan = Column(String(5))
        __table_args__ = (PBB_ARGS)

        # __table_args__ = ForeignKeyConstraint([kd_propinsi, kd_dati2, kd_kecamatan], [
        #                                       Pbb.RefKecamatan.kd_propinsi, Pbb.RefKecamatan.kd_dati2, Pbb.RefKecamatan.kd_kecamatan])

    class Pegawai(SismiopModel, SismiopBase):
        __tablename__ = 'pegawai'
        nip = Column(String(9), primary_key=True)
        nm_pegawai = Column(String(50), nullable=False)
        nip_baru = Column(String(18))
        __table_args__ = (PBB_ARGS)

    class RefJnsSektor(SismiopModel, SismiopBase):
        __tablename__ = 'ref_jns_sektor'
        kd_sektor = Column(String(2), primary_key=True)
        nm_sektor = Column(String(75), nullable=False)
        __table_args__ = (PBB_ARGS)

    class RefMap(SismiopModel, SismiopBase):
        __tablename__ = 'ref_map'
        kd_sektor = Column(String(2), primary_key=True)
        kd_map = Column(String(6), nullable=False)
        __table_args__ = (PBB_ARGS)

    class RefJabatan(SismiopModel, SismiopBase):
        __tablename__ = 'ref_jabatan'
        kd_jabatan = Column(String(2), primary_key=True)
        nm_jabatan = Column(String(30), nullable=False)
        singkatan_jabatan = Column(String(30))
        __table_args__ = (PBB_ARGS)

    class Tarif(SismiopModel, SismiopBase):
        __tablename__ = 'tarif'
        kd_propinsi = Column(String(2), primary_key=True)
        kd_dati2 = Column(String(2), primary_key=True)
        thn_awal = Column(String(4), primary_key=True)
        thn_akhir = Column(String(4), primary_key=True)
        njop_min = Column(Float, primary_key=True)
        njop_max = Column(Float)
        nilai_tarif = Column(Float)
        __table_args__ = (PBB_ARGS)

    class PosisiPegawai(SismiopModel, SismiopBase):
        __tablename__ = 'posisi_pegawai'
        kd_kanwil = Column(String(2), primary_key=True)
        kd_kppbb = Column(String(2), primary_key=True)
        nip = Column(String(9), ForeignKey(
            'pbb.pegawai.nip'), primary_key=True)
        kd_seksi = Column(String(2), primary_key=True)
        kd_subseksi = Column(String(2), primary_key=True)
        tgl_awal_berlaku = Column(DateTime, primary_key=True)
        tgl_akhir_berlaku = Column(DateTime, nullable=False)
        kd_wewenang = Column(String(2), ForeignKey(
            'pbb.wewenang.kd_wewenang'), nullable=False)
        kd_jabatan = Column(String(2), ForeignKey(
            'pbb.ref_jabatan.kd_jabatan'), nullable=False)
        __table_args__ = (PBB_ARGS)
        # __table_args__ = (
        #     ForeignKeyConstraint([kd_seksi, kd_subseksi], [
        #                          Pbb.RefSubSeksi.kd_seksi, Pbb.RefSubSeksi.kd_subseksi]),
        #     ForeignKeyConstraint([kd_kanwil, kd_kppbb], [Pbb.RefKppbb.kd_kanwil, Pbb.RefKppbb.kd_kppbb]))

    class RefKantor(SismiopModel, SismiopBase):
        __tablename__ = 'ref_kantor'
        kd_kanwil = Column(String(2), primary_key=True)
        kd_kantor = Column(String(2), primary_key=True)
        nm_kantor = Column(String(30), nullable=False)
        al_kantor = Column(String(50), nullable=False)
        kota_terbit = Column(String(30), nullable=False)
        no_faksimili = Column(String(50))
        no_telpon = Column(String(50))
        __table_args__ = (PBB_ARGS)

    class RefKanwil(SismiopModel, SismiopBase):
        __tablename__ = 'ref_kanwil'
        kd_kanwil = Column(String(2), primary_key=True)
        nm_kanwil = Column(String(30), nullable=False)
        al_kanwil = Column(String(50), nullable=False)
        kota_terbit_kanwil = Column(String(30), nullable=False)
        no_faksimili = Column(String(50))
        no_telpon = Column(String(50))
        __table_args__ = (PBB_ARGS)

    class TempatPembayaran(SismiopModel, SismiopBase):
        __tablename__ = 'tempat_pembayaran'
        kd_kanwil = Column(String(2), primary_key=True)
        kd_kppbb = Column(String(2), primary_key=True)
        kd_bank_tunggal = Column(String(2), primary_key=True)
        kd_bank_persepsi = Column(String(2), primary_key=True)
        kd_tp = Column(String(2), primary_key=True)
        nm_tp = Column(String(85), nullable=False)
        alamat_tp = Column(String(50), nullable=False)
        no_rek_tp = Column(String(15))
        __table_args__ = (PBB_ARGS)
        # __table_args__ = ForeignKeyConstraint([kd_kanwil, kd_kppbb, kd_bank_tunggal, kd_bank_persepsi], [
        #                                       Pbb.BankPersepsi.kd_kanwil, Pbb.BankPersepsi.kd_kppbb, Pbb.BankPersepsi.kd_bank_tunggal, Pbb.BankPersepsi.kd_bank_persepsi])

    class RefJnsPelayanan(SismiopModel, SismiopBase):
        __tablename__ = 'ref_jns_pelayanan'
        kd_jns_pelayanan = Column(String(2), primary_key=True)
        nm_jenis_pelayanan = Column(String(50), nullable=False)
        __table_args__ = (PBB_ARGS)

        
def get_connection(settings=None):
    if not settings:
        settings = get_settings()

    if "lib_dir" in settings and settings["lib_dir"]:
        import cx_Oracle
        lib_dir = rf"{settings['lib_dir']}"
        cx_Oracle.init_oracle_client(lib_dir=lib_dir)
        _logging.debug(lib_dir)

    url = 'pbb.url' in settings and settings['pbb.url'] and 'pbb.' or ''
    if not url:
        msg = "pbb.url belum terdapat dalam SETTING"
        _logging.error(msg)
        raise Exception(msg)

    pbb_engine = engine_from_config(settings, url, max_identifier_length=30)
    SismiopDBSession.configure(bind=pbb_engine)
    SismiopBase.metadata.bind = pbb_engine
    settings['pbb_connected'] = True


def includeme(config):
    get_connection()
    print("+", __name__, "includeme class loaded")