__init__.py 10.7 KB
# from .config import pbb_schema
import logging
from datetime import datetime
import os

from tangsel.base import get_params
from tangsel.base.models import Partner
from sqlalchemy import engine_from_config, func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import (scoped_session, sessionmaker)

from .tools import column_concat, get_settings
from zope.sqlalchemy import register

from tangsel.base.models import CommonModel
from deform import widget
import colander
from .routes import routes
# PbbDBSession = scoped_session(sessionmaker(extension=ZTE))
session_factory = sessionmaker()
PbbDBSession = scoped_session(session_factory)
register(PbbDBSession)
PbbBase = declarative_base()
pbb_schema = 'pbb'
PBB_ARGS = {'extend_existing': True, 'schema': pbb_schema}
_logging = logging.getLogger(__name__)

class PbbModel(CommonModel):
    @classmethod
    def query(cls):
        return PbbDBSession.query(cls)


from .base_table import (BasePropinsi, BaseDati2, BaseKecamatan, BaseKelurahan,
                         BaseBlok, BaseNop, BaseSppt, BaseKanwil, BaseKantor,
                         BasePbb,
                         BaseDokumen)
from .ref import *


def pelayanan_list(table=JenisPelayanan, db_session=PbbDBSession):
    return db_session.query(table.kd_jns_pelayanan,
                            column_concat([table.kd_jns_pelayanan, " - ",
                                           table.nm_jenis_pelayanan])
                            ). \
        order_by(table.kd_jns_pelayanan).all()


# from .ref import (
#     Propinsi, Dati2, Kecamatan, Kelurahan, Kanwil, Kantor, AdmKantor,
#     TempatPembayaran, Seksi, Tarif, NJOPTKP,
#     LookupGroup, LookupItem, JPB, JenisSektor, Jabatan, Buku,
#     Umum, TpSpptMasal, Dokumen, RefJpb, PbbMin,
# )


from .resources import *
# from .resources import (Pekerjaan, Kegiatan, GroupResource, ItemResource,
#                         VolResource, HrgResource, )
#
from .pendataan import *
# from .pendataan import (DatObjekPajak, HisObjekPajak, DatSubjekPajak, DatOpBumi, HisOpBumi,
#                         DatOpBangunan, DatOpInduk, DatOpAnggota, HisOpAnggota,
#                         DatZnt, DatPetaZnt, DatPetaBlok, DatNir, PenghapusanOp, JalanStandard,
#                         KelasTanah, KelasBng, PerubahanNop)
#
from .bangunan import *
# from .bangunan import (DatOpBangunan, HisOpBangunan, Fasilitas, DatFasilitasBangunan, DatJpb2,
#                        DatJpb3, DatJpb4, DatJpb5, DatJpb6, DatJpb7, DatJpb8,
#                        DatJpb9, DatJpb12, DatJpb13, DatJpb14, DatJpb15, DatJpb16,
#                        DatKunjunganKembali, DatNilaiIndividu, HisNilaiIndividu)
#
# from .fasilitas import (Fasilitas, DbkbStandard, FasNonDep, FasDepMinMax,
#                         FasDepJpbKlsBintang, BangunanLantai, TipeBangunan)
#
# from .fasilitas import (DayaDukung, DbkbDayaDukung, DbkbMaterial, DbkbMezanin,
#                         Dbkb02, Dbkb03, Dbkb04, Dbkb05, Dbkb06, Dbkb07, Dbkb08,
#                         Dbkb09, Dbkb12, Dbkb13, Dbkb14, Dbkb15, Dbkb16)
#
from .sppt import (Sppt, SpptOpBersama, HisSppt, TtrSppt)
from .sppt import (SpptAkrual, SpptRekap, SrtTegoran, TtrSrtTegoran)

from .pembayaran import (PembayaranSppt, PembayaranRekap)
from .pegawai import (Pegawai, DatLogin, PosisiPegawai, Wewenang)
from .base_table import filter_nopel
from .pelayanan import (PstPermohonan, PstLampiran, PstDetail, PstDataOpBaru,
                        PstPermohonanPengurangan, MaxUrutPstOl, KeluaranPst,
                        BerkasKirim, BerkasTerima, PenguranganPermanen,
                        MaxUrutPst, Spb, Skkpp, PenerimaKompensasi)

from .temp import *
# from .temp import TempDataOP
from .sppt import (Sppt, SpptAkrual, SpptRekap, SpptOpBersama, TtrSppt)
from .temp import TempDataOP, TempSppt
from .log import (
    LogKeluaranPst, NopMutasi, LogZnt, 
    LogSrtPenagihan, LogSrtPenagihanItem, MaxUrutSurat)
from .pengurangan_covid import PenguranganCovid
from .dafnom import DafnomOp

logg = logging.getLogger(__name__)

def DAFTAR_TP():
    return PbbDBSession.query(TempatPembayaran.kd_tp, TempatPembayaran.nm_tp). \
        order_by(TempatPembayaran.kd_tp).all()


def seksi_list():
    return PbbDBSession.query(Seksi.kd_seksi,
                              column_concat(
                                  [Seksi.kd_seksi, ' - ', Seksi.nm_seksi])
                              ). \
        order_by(Seksi.kd_seksi).all()


#
def tp_list():
    return DAFTAR_TP()


def group_items_list(group_id):
    return LookupItem.query_group_list_item(group_id) \
        .order_by(LookupItem.kd_lookup_item).all()


def jpb_list():
    return JPB.query_list().order_by(JPB.kd_jpb).all()


def pekerjaan_list():
    return LookupItem.query_group_list_item('08') \
        .filter(LookupItem.kd_lookup_item != '0') \
        .order_by(LookupItem.kd_lookup_item).all()


def bumi_list():
    return LookupItem.query_group_list_item('20') \
        .order_by(LookupItem.kd_lookup_item).all()

def lahan_list():
    return LookupItem.query_group_list_item('84') \
        .order_by(LookupItem.kd_lookup_item).all()


def kondisi_bng_list():
    return LookupItem.query_group_list_item('21') \
        .order_by(LookupItem.kd_lookup_item).all()

def konstruksi_list():
    return LookupItem.query_group_list_item('22') \
        .order_by(LookupItem.kd_lookup_item).all()

def atap_list():
    return LookupItem.query_group_list_item('41') \
        .order_by(LookupItem.kd_lookup_item).all()

def dinding_list():
    return LookupItem.query_group_list_item('42') \
        .order_by(LookupItem.kd_lookup_item).all()

def lantai_list():
    return LookupItem.query_group_list_item('43') \
        .order_by(LookupItem.kd_lookup_item).all()

def langit_langit_list():
    return LookupItem.query_group_list_item('44') \
        .order_by(LookupItem.kd_lookup_item).all()

def finishing_kolam_renang_list():
    return LookupItem.query_group_list_item('39') \
        .order_by(LookupItem.kd_lookup_item).all()

def bahan_pagar_list():
    return LookupItem.query_group_list_item('40') \
        .order_by(LookupItem.kd_lookup_item).all()

def jpb_2_9_list():
    return LookupItem.query_group_list_item('45') \
        .order_by(LookupItem.kd_lookup_item).all()

def jpb_4_list():
    return LookupItem.query_group_list_item('46') \
        .order_by(LookupItem.kd_lookup_item).all()

def jpb_5_list():
    return LookupItem.query_group_list_item('50') \
        .order_by(LookupItem.kd_lookup_item).all()

def jpb_6_list():
    return LookupItem.query_group_list_item('47') \
        .order_by(LookupItem.kd_lookup_item).all()

def jpb_7_jenis_list():
    return LookupItem.query_group_list_item('28') \
        .order_by(LookupItem.kd_lookup_item).all()

def jpb_7_bintang_list():
    return LookupItem.query_group_list_item('51') \
        .order_by(LookupItem.kd_lookup_item).all()

def jpb_12_list():
    return LookupItem.query_group_list_item('49') \
        .order_by(LookupItem.kd_lookup_item).all()

def jpb_13_list():
    return LookupItem.query_group_list_item('52') \
        .order_by(LookupItem.kd_lookup_item).all()

def jpb_15_list():
    return LookupItem.query_group_list_item('09') \
        .order_by(LookupItem.kd_lookup_item).all()

def jpb_16_list():
    return LookupItem.query_group_list_item('48') \
        .order_by(LookupItem.kd_lookup_item).all()

def peta_znt_list(blok):
    data = DatPetaZnt.get_list(blok) \
        .order_by(DatPetaZnt.kd_znt).all()
    return data


def status_wp_list():
    return LookupItem.query_group_list_item('10') \
        .order_by(LookupItem.nm_lookup_item).all()


def status_kolektif():
    return LookupItem.query_group_list_item('03') \
        .order_by(LookupItem.kd_lookup_item).all()


# Berikut ini daftar tabel pendukung pbb yang disimpan di public

# from oth_ref import PbbPelayanan, PbbSyarat, PbbSyaratPelayanan

nip_admin_pbb = '060000000000000000'


def is_admin_pbb(nip):
    return nip == get_params("nip_admin_pbb", nip_admin_pbb)


def nip_pbb(request):
    user = request.user
    if not user:
        return

    if user.user_name == 'admin':
        return get_params("nip_admin_pbb", nip_admin_pbb)

    # cek di base partner
    partner = Partner.query_user_id(user.id).first()
    if not partner:
        return

    # note: partner.kode adalah nip
    # ambil data dari pbb pegawai
    row = Pegawai.query_id(partner.kode).first()
    if row:
        return row.nip


#


def pegawai_seksi(nip, kd_kanwil, kd_kantor):
    sekarang = datetime.now().strftime("%Y-%m-%d")
    return PbbDBSession.query(
        Pegawai.nip,
        Pegawai.nm_pegawai,
        PosisiPegawai.kd_kanwil,
        PosisiPegawai.kd_kantor,
        PosisiPegawai.kd_seksi,
        Seksi.nm_seksi,
        PosisiPegawai.kd_wewenang,
        PosisiPegawai.tgl_awal_berlaku,
        PosisiPegawai.tgl_akhir_berlaku,
        PosisiPegawai.kd_jabatan,
    ). \
        select_from(Pegawai). \
        join(PosisiPegawai, PosisiPegawai.nip == Pegawai.nip). \
        join(Seksi, Seksi.kd_seksi == PosisiPegawai.kd_seksi). \
        filter(Pegawai.nip == nip). \
        filter(PosisiPegawai.kd_kanwil == kd_kanwil). \
        filter(PosisiPegawai.kd_kantor == kd_kantor). \
        filter(
        PosisiPegawai.tgl_awal_berlaku <= func.to_date(sekarang, 'YYYY-MM-DD'),
        PosisiPegawai.tgl_akhir_berlaku >= func.to_date(sekarang, 'YYYY-MM-DD')
    )


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

    if "lib_dir" in settings and settings["lib_dir"]:
        try:
            from cx_Oracle import init_oracle_client
        except:
            from oracledb import init_oracle_client
        
        lib_dir = rf"{settings['lib_dir']}"
        init_oracle_client(lib_dir=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)
    PbbDBSession.configure(bind=pbb_engine)
    PbbBase.metadata.bind = pbb_engine
    settings['pbb_connected'] = True


def get_data_file(filename):
    base_dir = os.path.split(__file__)[0]
    fullpath = os.path.join(base_dir, 'scripts', 'data', filename)
    _logging.info('pjdl_data_file: %s' % fullpath)
    return open(fullpath)

def includeme(config):
    get_connection()
    app_id = 20
    # set_routes(config, app_id)
    # routes_by_array(config, routes)
    PBBMODELAPP.static_view(config)
    # PBBMODELAPP.route_from_csv(
    #     config, paket="tangsel.pbb.models.views")
    config.scan('.')
    print("+", __name__, "includeme class loaded")


from tangsel.base import BaseApp
class PbbModelApp(BaseApp):
    def __init__(self):
        super().__init__()

PBBMODELAPP = PbbModelApp()
from .sppt import *