registrasi.py 5.24 KB
import logging

from opensipkd.models import DBSession
from sqlalchemy import (
    Column, Integer, String, Float, ForeignKey, UniqueConstraint, func, DateTime)
from sqlalchemy.orm import relationship

from . import DefaultModel, Base, PjdlKelurahan, PjdlKecamatan, PAD_TABLE_ARGS
from .customer import WpMaster

_logging = logging.getLogger(__name__)


class PjdlDaftarStatus(Base, DefaultModel):
    __tablename__ = "pad_daftar_status"
    kode = Column(String(2))
    uraian = Column(String(50))
    __table_args__ = (
        PAD_TABLE_ARGS
    )

    @classmethod
    def query_kode(cls, kode):
        return cls.query().filter_by(kode=kode)

    @classmethod
    def get_list(cls):
        query = PjdlDaftarStatus.query().order_by(cls.kode)
        result = [(row.id, f"{row.kode} {row.uraian}") for row in query]
        result.insert(0, ("", "Pilih Status Pendaftaran"))
        return result

    @classmethod
    def query_min_status(cls):
        kode = DBSession.query(func.min(cls.kode)).scalar()
        return DBSession.query(cls.id).filter_by(kode=kode).scalar()

    @classmethod
    def query_max_status(cls):
        kode = DBSession.query(func.max(cls.kode)).scalar()
        return DBSession.query(cls.id).filter_by(kode=kode).scalar()

    @classmethod
    def query_next_status(cls, status_id, max_kode="03"):
        query_kode = DBSession.query(func.min(cls.kode))
        if status_id:
            row = cls.query_id(status_id).first()
            query_kode = query_kode.filter(cls.kode > row.kode,
                                           cls.kode <= max_kode)
        kode = query_kode.scalar()
        if not kode:
            return
        return DBSession.query(cls.id).filter_by(kode=kode).scalar()


class PjdlDaftar(Base, WpMaster):
    __tablename__ = "pad_daftar"
    op_nm = Column(String(100))
    op_alamat = Column(String(100))
    op_usaha_id = Column(Integer)
    op_so = Column(String(1))
    op_kecamatan_id = Column(Integer, ForeignKey(PjdlKecamatan.id))
    op_kelurahan_id = Column(Integer, ForeignKey(PjdlKelurahan.id))
    op_latitude = Column(Float)
    op_longitude = Column(Float)
    op_pajak_id = Column(Integer)
    passwd = Column(String(50))
    kd_park_roda2_luas = Column(Integer)
    kd_park_roda2_jumlah = Column(Integer)
    kd_park_roda2_tarif1 = Column(Integer)
    kd_park_roda2_tarif2 = Column(Integer)
    kd_park_roda2_tarif3 = Column(Integer)
    kd_park_roda4_luas = Column(Integer)
    kd_park_roda4_jumlah = Column(Integer)
    kd_park_roda4_tarif1 = Column(Integer)
    kd_park_roda4_tarif2 = Column(Integer)
    kd_park_roda4_tarif3 = Column(Integer)
    kd_park_rodax_luas = Column(Integer)
    kd_park_rodax_jumlah = Column(Integer)
    kd_park_rodax_tarif1 = Column(Integer)
    kd_park_rodax_tarif2 = Column(Integer)
    kd_park_rodax_tarif3 = Column(Integer)
    ijin1file = Column(String(50))
    ijin2file = Column(String(50))
    ijin3file = Column(String(50))
    ijin4file = Column(String(50))
    status_id = Column(Integer, ForeignKey(
        PjdlDaftarStatus.id, ondelete="RESTRICT"))
    cu_id = Column(Integer)
    ijin1 = Column(String(100))
    ijin1no = Column(String(100))
    ijin1tgl = Column(DateTime)
    ijin1tglakhir = Column(DateTime)
    ijin2 = Column(String(100))
    ijin2no = Column(String(100))
    ijin2tgl = Column(DateTime)
    ijin2tglakhir = Column(DateTime)
    ijin3 = Column(String(100))
    ijin3no = Column(String(100))
    ijin3tgl = Column(DateTime)
    ijin3tglakhir = Column(DateTime)
    ijin4 = Column(String(100))
    ijin4no = Column(String(100))
    ijin4tgl = Column(DateTime)
    ijin4tglakhir = Column(DateTime)

    kd_restojmlmeja = Column(Integer)
    kd_restojmlkursi = Column(Integer)
    kd_restojmltamu = Column(Integer)
    kd_filmkursi = Column(Integer)
    kd_filmpertunjukan = Column(Integer)
    kd_filmtarif = Column(Float())
    kd_bilyarmeja = Column(Integer)
    kd_bilyartarif = Column(Float())
    kd_bilyarkegiatan = Column(Integer)
    kd_diskopengunjung = Column(Integer)
    kd_diskotarif = Column(Float())
    kd_waletvolume = Column(Integer)

    status = relationship('PjdlDaftarStatus',
                          primaryjoin='PjdlDaftar.status_id == PjdlDaftarStatus.id',
                          backref='pad_daftar')
    __table_args__ = (
        UniqueConstraint('rp', 'pb', 'formno', 'kecamatan_id', 'kelurahan_id'),
        PAD_TABLE_ARGS
    )

    @classmethod
    def get_formno(cls):
        formno = DBSession.query(func.max(cls.formno)).scalar()
        formno = formno and formno + 1 or 1
        return formno


class PjdlDaftarHist(Base, DefaultModel):
    __tablename__ = "pad_daftar_hist"
    daftar_id = Column(Integer, ForeignKey(PjdlDaftar.id, ondelete="CASCADE"))
    status_id = Column(Integer, ForeignKey(
        PjdlDaftarStatus.id, ondelete="CASCADE"))
    create_date = Column(DateTime(timezone=False))
    create_uid = Column(Integer)
    keterangan = Column(String(255))
    __table_args__ = (
        PAD_TABLE_ARGS
    )


class PadDaftarKdDet(Base, DefaultModel):
    __tablename__ = "pad_daftar_kd_det"
    daftar_id = Column(ForeignKey(PjdlDaftar.id, onupdate='CASCADE'))
    nourut = Column(Integer)
    notes = Column(String(50))
    tarif = Column(Float)
    kamar = Column(Integer)
    volume = Column(Integer)
    __table_args__ = (
        PAD_TABLE_ARGS
    )