log.py 12.9 KB
import sys
from datetime import datetime
from sqlalchemy import (
    Column,
    Integer,
    DateTime,
    String,
    Float,
    BigInteger,
    Numeric,
)
from .tools import FixNopelDetail
from ..models import (
    CommonModel,
    PbbBase,
    PbbDBSession,
    PBB_ARGS
)
from .pelayanan import PstDetail


class LogKeluaranPst(PbbBase, CommonModel):
    __tablename__ = 'log_keluaran_pst'
    kd_kanwil = Column(String(2), primary_key=True)
    kd_kantor = Column(String(2), primary_key=True)
    thn_pelayanan = Column(String(4), primary_key=True)
    bundel_pelayanan = Column(String(4), primary_key=True)
    no_urut_pelayanan = Column(String(3), primary_key=True)
    kd_propinsi_pemohon = Column(String(2), primary_key=True)
    kd_dati2_pemohon = Column(String(2), primary_key=True)
    kd_kecamatan_pemohon = Column(String(3), primary_key=True)
    kd_kelurahan_pemohon = Column(String(3), primary_key=True)
    kd_blok_pemohon = Column(String(3), primary_key=True)
    no_urut_pemohon = Column(String(4), primary_key=True)
    kd_jns_op_pemohon = Column(String(1), primary_key=True)
    log_tahun_pajak = Column(String(4), primary_key=True)
    kd_jns_pelayanan = Column(String(2))
    log_sppt = Column(Integer, default=0)
    log_stts = Column(Integer, default=0)
    log_dhkp = Column(Integer, default=0)
    log_sk = Column(Integer, default=0)
    log_status = Column(Integer, default=0)
    __table_args__ = (PBB_ARGS,)

    @classmethod
    def query(cls):
        return PbbDBSession.query(cls)

    @classmethod
    def query_id(cls, id):
        fix_nopel_det = FixNopelDetail(id)
        return cls.query(). \
            filter(cls.kd_kanwil == fix_nopel_det['kd_kanwil'],
                   cls.kd_kantor == fix_nopel_det['kd_kantor'],
                   cls.thn_pelayanan == fix_nopel_det['tahun'],
                   cls.bundel_pelayanan == fix_nopel_det['bundel'],
                   cls.no_urut_pelayanan == fix_nopel_det['urut'],
                   cls.kd_propinsi_pemohon == fix_nopel_det['kd_propinsi'],
                   cls.kd_dati2_pemohon == fix_nopel_det['kd_dati2'],
                   cls.kd_kecamatan_pemohon == fix_nopel_det['kd_kecamatan'],
                   cls.kd_kelurahan_pemohon == fix_nopel_det['kd_kelurahan'],
                   cls.kd_blok_pemohon == fix_nopel_det['kd_blok'],
                   cls.no_urut_pemohon == fix_nopel_det['no_urut'],
                   cls.kd_jns_op_pemohon == fix_nopel_det['kd_jns_op'])

    @classmethod
    def query_id_by_jns_pelayanan(cls, id, jns_ply):
        return cls.query_id(id).filter(cls.kd_jns_pelayanan == jns_ply)

    @classmethod
    def query_id_by_jns_and_tahun(cls, id, jns_ply, thn):
        return cls.query_id_by_jns_pelayanan(id, jns_ply).filter(cls.log_tahun_pajak == thn)

    @classmethod
    def pst_add_log_keluaran(cls, values):
        fixNopel = values["fixNopelDetail"]
        q = PbbDBSession.query(PstDetail). \
            filter(
            PstDetail.kd_kanwil == fixNopel['kd_kanwil'],
            PstDetail.kd_kantor == fixNopel['kd_kantor'],
            PstDetail.thn_pelayanan == fixNopel['tahun'],
            PstDetail.bundel_pelayanan == fixNopel['bundel'],
            PstDetail.no_urut_pelayanan == fixNopel['urut'],
            PstDetail.kd_propinsi_pemohon == fixNopel['kd_propinsi'],
            PstDetail.kd_dati2_pemohon == fixNopel['kd_dati2'],
            PstDetail.kd_kecamatan_pemohon == fixNopel['kd_kecamatan'],
            PstDetail.kd_kelurahan_pemohon == fixNopel['kd_kelurahan'],
            PstDetail.kd_blok_pemohon == fixNopel['kd_blok'],
            PstDetail.no_urut_pemohon == fixNopel['no_urut'],
            PstDetail.kd_jns_op_pemohon == fixNopel['kd_jns_op'],
        )

        row = q.first()
        if row:
            q_cls = PbbDBSession.query(cls). \
                filter(cls.kd_kanwil == fixNopel['kd_kanwil'],
                       cls.kd_kantor == fixNopel['kd_kantor'],
                       cls.thn_pelayanan == fixNopel['tahun'],
                       cls.bundel_pelayanan == fixNopel['bundel'],
                       cls.no_urut_pelayanan == fixNopel['urut'],
                       cls.kd_propinsi_pemohon == fixNopel['kd_propinsi'],
                       cls.kd_dati2_pemohon == fixNopel['kd_dati2'],
                       cls.kd_kecamatan_pemohon == fixNopel['kd_kecamatan'],
                       cls.kd_kelurahan_pemohon == fixNopel['kd_kelurahan'],
                       cls.kd_blok_pemohon == fixNopel['kd_blok'],
                       cls.no_urut_pemohon == fixNopel['no_urut'],
                       cls.kd_jns_op_pemohon == fixNopel['kd_jns_op'], )

            row_cls = q_cls.first()
            if not row_cls:
                row_cls = cls()
                row_cls.from_dict(row.to_dict())
                row_cls.from_dict(values)
                row_cls.log_tahun_pajak = row.thn_pajak_permohonan
                PbbDBSession.add(row_cls)
                PbbDBSession.flush()

    @classmethod
    def add_log_from_exist_detail(cls, par_detail, log_option={}, flushed=True):
        '''
        if not log_option:
            log_option = {"log_sppt":0, 
                        "log_stts":0, 
                        "log_dhkp":0, 
                        "log_sk":0, 
                        "log_status":0}
        '''

        row = PbbDBSession.query(cls). \
            filter(cls.kd_kanwil == par_detail['kd_kanwil'],
                   cls.kd_kantor == par_detail['kd_kantor'],
                   cls.thn_pelayanan == par_detail['thn_pelayanan'],
                   cls.bundel_pelayanan == par_detail['bundel_pelayanan'],
                   cls.no_urut_pelayanan == par_detail['no_urut_pelayanan'],
                   cls.kd_propinsi_pemohon == par_detail['kd_propinsi_pemohon'],
                   cls.kd_dati2_pemohon == par_detail['kd_dati2_pemohon'],
                   cls.kd_kecamatan_pemohon == par_detail['kd_kecamatan_pemohon'],
                   cls.kd_kelurahan_pemohon == par_detail['kd_kelurahan_pemohon'],
                   cls.kd_blok_pemohon == par_detail['kd_blok_pemohon'],
                   cls.no_urut_pemohon == par_detail['no_urut_pemohon'],
                   cls.kd_jns_op_pemohon == par_detail['kd_jns_op_pemohon']). \
            first()
        if not row:
            row = cls()
        row.from_dict(par_detail)
        row.log_tahun_pajak = par_detail['thn_pajak_permohonan']
        row.from_dict(log_option)
        PbbDBSession.add(row)
        if flushed:
            PbbDBSession.flush()

        return row


class PembetulanSpptSkpStp(PbbBase, CommonModel):
    __tablename__ = 'pembetulan_spptskpstp'
    kd_kanwil = Column(String(2), primary_key=True)
    kd_kantor = Column(String(2), primary_key=True)
    thn_pelayanan = Column(String(4), primary_key=True)
    bundel_pelayanan = Column(String(4), primary_key=True)
    no_urut_pelayanan = Column(String(3), primary_key=True)
    kd_propinsi_pemohon = Column(String(2), primary_key=True)
    kd_dati2_pemohon = Column(String(2), primary_key=True)
    kd_kecamatan_pemohon = Column(String(3), primary_key=True)
    kd_kelurahan_pemohon = Column(String(3), primary_key=True)
    kd_blok_pemohon = Column(String(3), primary_key=True)
    no_urut_pemohon = Column(String(4), primary_key=True)
    kd_jns_op_pemohon = Column(String(1), primary_key=True)
    thn_pembetulan = Column(String(1), primary_key=True)
    jns_sk = Column(String(1))
    no_sk = Column(String(30))
    pbl_nama_wp = Column(String(30))
    pbl_jalan_wp = Column(String(30))
    pbl_blok_kav_no_wp = Column(String(15))
    pbl_luas_bumi = Column(Float, default=0, nullable=True)
    pbl_luas_bng = Column(Float, default=0, nullable=True)
    pbl_njop_bumi = Column(Float, default=0, nullable=True)
    pbl_njop_bng = Column(Float, default=0, nullable=True)
    pbl_pbb = Column(Float, default=0, nullable=True)
    pbl_status = Column(String(1))
    jns_surat_yg_dibetulkan = Column(String(2))
    no_surat_yg_dibetulkan = Column(String(30))
    tgl_surat_yg_dibetulkan = Column(DateTime)
    __table_args__ = (PBB_ARGS,)


class NopMutasi(PbbBase, CommonModel):
    __tablename__ = 'nop_mutasi'
    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)
    indeks_mutasi = Column(Integer, primary_key=True)
    kd_propinsi_mutasi = Column(String(2))
    kd_dati2_mutasi = Column(String(2))
    kd_kecamatan_mutasi = Column(String(3))
    kd_kelurahan_mutasi = Column(String(3))
    kd_blok_mutasi = Column(String(3))
    no_urut_mutasi = Column(String(4))
    kd_jns_op_mutasi = Column(String(1))
    luas_bumi_mutasi = Column(BigInteger)
    tgl_rekam_nop_mutasi = Column(DateTime(timezone=False))
    nip_perekam_nop_mutasi = Column(String(18))
    __table_args__ = (PBB_ARGS,)


class LogZnt(PbbBase, CommonModel):
    __tablename__ = 'log_znt'
    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)
    status_log_znt = Column(Integer)
    tgl_rekam_log_znt = Column(DateTime(timezone=False))
    nip_perekam_log_znt = Column(String(18))
    __table_args__ = (PBB_ARGS,)


# baru dari penagihan
from .ref import BaseModelUptd

class LogSrtPenagihan(PbbBase, BaseModelUptd):
    __tablename__ = 'log_srt_penagihan'

    no_surat = Column(String(30), primary_key=True)
    jns_surat = Column(String(1), nullable=False)
    surat_ke = Column(Integer, default=1)
    tgl_surat = Column(DateTime)
    no_surat_1 = Column(String(30))
    tgl_surat_1 = Column(DateTime)
    no_surat_2 = Column(String(30))
    tgl_surat_2 = Column(DateTime)
    hari = Column(String(10))
    tanggal = Column(DateTime)
    waktu = Column(String(15))
    nm_kecamatan = Column(String(30))
    nm_kelurahan = Column(String(30))
    nop = Column(String(24))
    kd_propinsi = Column(String(2), nullable=False)
    kd_dati2 = Column(String(2), nullable=False)
    kd_kecamatan = Column(String(3))
    kd_kelurahan = Column(String(3))
    kd_blok = Column(String(3))
    no_urut = Column(String(4))
    kd_jns_op = Column(String(1))
    thn_pajak_awal = Column(String(4))
    thn_pajak_akhir = Column(String(4))
    ketetapan = Column(Numeric(precision=19, scale=0), default=0, nullable=False)
    piutang = Column(Numeric(precision=19, scale=0), default=0, nullable=False)
    potensi_denda = Column(Numeric(precision=19, scale=0), default=0, nullable=False)
    potensi_bayar = Column(Numeric(precision=19, scale=0), default=0, nullable=False)
    nm_wp = Column(String(30))
    alamat_wp = Column(String(60))
    kel_kota_wp = Column(String(65))
    alamat_op = Column(String(60))
    kd_uptd = Column(String(2), nullable=False)
    no_tempat = Column(Integer)
    id_user = Column(Integer, default=0, nullable=False)
    tgl_perekaman = Column(DateTime(timezone=False))

    __table_args__ = (PBB_ARGS)

    def date_formats(self) -> dict:
        return {
            "tgl_perekaman": "%d-%m-%Y %H:%M:%S",
        }


class LogSrtPenagihanItem(PbbBase, BaseModelUptd):
    __tablename__ = 'log_srt_penagihan_item'

    no_surat = Column(String(30), nullable=False, primary_key=True)
    kd_propinsi = Column(String(2), nullable=False, primary_key=True)
    kd_dati2 = Column(String(2), nullable=False, primary_key=True)
    kd_kecamatan = Column(String(3), nullable=False, primary_key=True)
    kd_kelurahan = Column(String(3), nullable=False, primary_key=True)
    kd_blok = Column(String(3), nullable=False, primary_key=True)
    no_urut = Column(String(4), nullable=False, primary_key=True)
    kd_jns_op = Column(String(1), nullable=False, primary_key=True)
    thn_pajak_sppt = Column(String(4), nullable=False, primary_key=True)
    tgl_jatuh_tempo_sppt = Column(DateTime)
    ketetapan = Column(Numeric(precision=19, scale=0), default=0, nullable=False)
    denda_byr = Column(Numeric(precision=19, scale=0), default=0, nullable=False)
    jumlah_byr = Column(Numeric(precision=19, scale=0), default=0, nullable=False)
    piutang = Column(Numeric(precision=19, scale=0), default=0, nullable=False)
    potensi_denda = Column(Numeric(precision=19, scale=0), default=0, nullable=False)
    potensi_bayar = Column(Numeric(precision=19, scale=0), default=0, nullable=False)
    nm_wp_sppt = Column(String(30))

    __table_args__ = (PBB_ARGS)


class MaxUrutSurat(PbbBase, BaseModelUptd):
    __tablename__ = 'max_urut_surat'

    kd_propinsi = Column(String(2), nullable=False, primary_key=True)
    kd_dati2 = Column(String(2), nullable=False, primary_key=True)
    kd_uptd = Column(String(2), nullable=False, primary_key=True)
    thn_surat = Column(String(4), nullable=False, primary_key=True)
    jns_surat = Column(String(1), nullable=False, primary_key=True)
    no_urut_surat = Column(Integer, default=0, primary_key=True)

    __table_args__ = (PBB_ARGS)