utils_pbb.py 8.02 KB

import sys
import logging
from tangsel.pbb.models import (
    PbbBase, PbbDBSession, Sppt, PosisiPegawai, DatObjekPajak, SpptOpBersama,
    JenisSektor, Kelurahan, Kecamatan, Dati2, Kanwil, Kantor, TempatPembayaran,
    KodeMap, Tarif, Jabatan, Pegawai)
from sqlalchemy import and_

from . import FixNop
from .pbb_daemon import PdfProses, sppt_ttd, send_email, parsing
log = logging.getLogger(__name__)
from .. import SPPT_CLASS

class PbbProses(PdfProses):
    def __init__(self, config, option):
        super().__init__(config, option)
        self.pbb_dbsession = PbbDBSession
        self.pbb_base = PbbBase
        self.sppt = Sppt
        self.posisi_pegawai = PosisiPegawai
        self.dat_objek_pajak = DatObjekPajak
        self.sppt_op_bersama = SpptOpBersama
        self.jenis_sektor = JenisSektor
        self.kelurahan = Kelurahan
        self.kecamatan = Kecamatan
        self.dati2 = Dati2
        self.kanwil = Kanwil
        self.kantor = Kantor
        self.tempat_pembayaran = TempatPembayaran
        self.kode_map = KodeMap
        self.tarif = Tarif
        self.jabatan = Jabatan
        self.pegawai = Pegawai
        self.set_engine()

    def get_sppt(self, nop, tahun):
        log.debug("Get SPPT")
        fxNop = FixNop(nop)
        if not SPPT_CLASS.mirror_url:
            return PbbDBSession.query(
            self.sppt.nm_wp_sppt,
            self.sppt.jln_wp_sppt,
            self.sppt.blok_kav_no_wp_sppt,
            self.sppt.kelurahan_wp_sppt,
            self.sppt.kota_wp_sppt,
            self.sppt.npwp_sppt,
            self.sppt.no_persil_sppt,
            self.sppt.siklus_sppt,
            self.sppt.kd_kls_tanah,
            self.sppt.thn_awal_kls_tanah,
            self.sppt.kd_propinsi,
            self.sppt.kd_dati2,
            self.sppt.kd_kecamatan,
            self.sppt.kd_kelurahan,
            self.sppt.kd_blok,
            self.sppt.no_urut,
            self.sppt.kd_jns_op,
            self.sppt.kd_kls_bng,
            self.sppt.thn_awal_kls_bng,
            self.sppt.tgl_jatuh_tempo_sppt,
            self.sppt.luas_bumi_sppt,
            self.sppt.luas_bng_sppt,
            self.sppt.njop_bumi_sppt,
            self.sppt.njop_bng_sppt,
            self.sppt.njop_sppt,
            self.sppt.njoptkp_sppt,
            self.sppt.pbb_terhutang_sppt,
            self.sppt.faktor_pengurang_sppt,
            self.sppt.pbb_yg_harus_dibayar_sppt,
            self.sppt.tgl_terbit_sppt,
            self.sppt.tgl_cetak_sppt,
            # self.sppt.nop,
            self.sppt.thn_pajak_sppt,
            self.sppt.kd_kanwil,
            self.sppt.kd_kantor,
            self.sppt.kd_tp,
            self.sppt.status_pembayaran_sppt,
            self.dat_objek_pajak.subjek_pajak_id,
            self.dat_objek_pajak.jalan_op,
            self.dat_objek_pajak.blok_kav_no_op,
            self.dat_objek_pajak.rt_op,
            self.dat_objek_pajak.rw_op,
            self.dat_objek_pajak.no_persil,
            self.sppt_op_bersama.kd_kls_tanah.label('kd_kls_tanah_ber'),
            self.sppt_op_bersama.thn_awal_kls_tanah.label(
                'thn_awal_kls_tanah_ber'),
            self.sppt_op_bersama.kd_kls_bng.label('kd_kls_bng_ber'),
            self.sppt_op_bersama.thn_awal_kls_bng.label(
                'thn_awal_kls_bng_ber'),
            self.sppt_op_bersama.luas_bumi_beban_sppt,
            self.sppt_op_bersama.luas_bng_beban_sppt,
            self.sppt_op_bersama.njop_bumi_beban_sppt,
            self.sppt_op_bersama.njop_bng_beban_sppt,
            self.jenis_sektor.nm_sektor,
            self.kelurahan.nm_kelurahan,
            self.kecamatan.nm_kecamatan,
            self.dati2.nm_dati2,
            self.kanwil.nm_kanwil,
            self.kantor.nm_kantor,
            self.kantor.kota_terbit,
            self.tempat_pembayaran.nm_tp,
            self.tempat_pembayaran.alamat_tp,
            self.tempat_pembayaran.no_rek_tp,
            self.kode_map.kd_map,
            # self.tarif.nilai_tarif,
        ). \
            select_from(self.sppt) \
            .outerjoin(
                self.sppt_op_bersama,
            and_(
                self.sppt_op_bersama.kd_propinsi == self.sppt.kd_propinsi,
                self.sppt_op_bersama.kd_dati2 == self.sppt.kd_dati2,
                self.sppt_op_bersama.kd_kecamatan == self.sppt.kd_kecamatan,
                self.sppt_op_bersama.kd_kelurahan == self.sppt.kd_kelurahan,
                self.sppt_op_bersama.kd_blok == self.sppt.kd_blok,
                self.sppt_op_bersama.no_urut == self.sppt.no_urut,
                self.sppt_op_bersama.kd_jns_op == self.sppt.kd_jns_op,
                self.sppt_op_bersama.thn_pajak_sppt == self.sppt.thn_pajak_sppt
            )) \
            .outerjoin(self.kelurahan,
                       and_(
                           self.sppt.kd_propinsi == self.kelurahan.kd_propinsi,
                           self.sppt.kd_dati2 == self.kelurahan.kd_dati2,
                           self.sppt.kd_kecamatan == self.kelurahan.kd_kecamatan,
                           self.sppt.kd_kelurahan == self.kelurahan.kd_kelurahan
                       )) \
            .outerjoin(self.jenis_sektor, self.jenis_sektor.kd_sektor == self.kelurahan.kd_sektor) \
            .outerjoin(self.kecamatan,
                       and_(
                           self.kecamatan.kd_propinsi == self.sppt.kd_propinsi,
                           self.kecamatan.kd_dati2 == self.sppt.kd_dati2,
                           self.kecamatan.kd_kecamatan == self.sppt.kd_kecamatan
                       )) \
            .outerjoin(self.dati2,
                       and_(
                           self.sppt.kd_propinsi == Dati2.kd_propinsi,
                           self.sppt.kd_dati2 == Dati2.kd_dati2
                       )) \
            .outerjoin(self.tempat_pembayaran,
                       and_(
                           self.tempat_pembayaran.kd_kantor == self.sppt.kd_kantor,
                           self.tempat_pembayaran.kd_kanwil == self.sppt.kd_kanwil,
                           self.tempat_pembayaran.kd_tp == self.sppt.kd_tp
                       )) \
            .outerjoin(Kantor,
                       and_(
                           Kantor.kd_kantor == self.sppt.kd_kantor,
                           Kantor.kd_kanwil == self.sppt.kd_kanwil
                       )) \
            .outerjoin(Kanwil, self.sppt.kd_kanwil == Kanwil.kd_kanwil) \
            .outerjoin(DatObjekPajak,
                       and_(
                           self.dat_objek_pajak.kd_propinsi == self.sppt.kd_propinsi,
                           self.dat_objek_pajak.kd_dati2 == self.sppt.kd_dati2,
                           self.dat_objek_pajak.kd_kecamatan == self.sppt.kd_kecamatan,
                           self.dat_objek_pajak.kd_kelurahan == self.sppt.kd_kelurahan,
                           self.dat_objek_pajak.kd_blok == self.sppt.kd_blok,
                           self.dat_objek_pajak.no_urut == self.sppt.no_urut,
                           self.dat_objek_pajak.kd_jns_op == self.sppt.kd_jns_op
                       ))\
            .outerjoin(KodeMap, KodeMap.kd_sektor == self.jenis_sektor.kd_sektor)\
            .filter(self.sppt.kd_propinsi == fxNop['kd_propinsi'],
                    self.sppt.kd_dati2 == fxNop['kd_dati2'],
                    self.sppt.kd_kecamatan == fxNop['kd_kecamatan'],
                    self.sppt.kd_kelurahan == fxNop['kd_kelurahan'],
                    self.sppt.kd_blok == fxNop['kd_blok'],
                    self.sppt.no_urut == fxNop['no_urut'],
                    self.sppt.kd_jns_op == fxNop['kd_jns_op'],
                    self.sppt.thn_pajak_sppt == tahun,
                    self.sppt.status_pembayaran_sppt.in_(['0', '1'])
                    )\
            .first()


def main(argv=sys.argv):
    option, remain = parsing(argv)
    pdf_proses = PbbProses(argv[1], option)
    act = option.action
    if act == "massal":
        pdf_proses.sppt_massal()
    elif act == "pdf":
        pdf_proses.sppt2pdf()
    elif act == "ttd":
        sppt_ttd(option)
    elif act == "email":
        send_email(argv[1], option)
    else:
        sys.exit("Action tidak sesuai")