es_log.py 4.35 KB
from sqlalchemy import (Column, ForeignKey, Integer, String, DateTime, func, case)
from sqlalchemy.orm import column_property, relationship

from tangsel.base.models import PartnerModel, Partner
from ..models import Base, DefaultModel, TABLE_ARGS, DBSession
from ..tools import FixNop

PROSES_STATUS = [
    (-1, "Pengajuan"),
    (0, "Proses Penetapan"),
    (1, "Proses TTD"),
    (2, "Tersedia"),
    (3, "Gagal"),
]


def get_status(status):
    if status == 1:
        return "Proses"
    elif status == -1:
        return "Gagal/Permohonan"
    elif status == 2:
        return "Terkirim"
    else:
        return "Draft"


class LogEspptMassal(DefaultModel, Base):
    __tablename__ = 'log_esppt_massal'
    tahun = Column(String(4), nullable=False)
    jenis = Column(String(1), nullable=False)  # 1 Semua SPPT 2 SPPT Terdaftar
    jml_sppt = Column(Integer())
    jml_proses = Column(Integer())
    status = Column(Integer())  # 0 dalam proses 1 selesai proses
    status_text = column_property(case(
        (status == 1, "Proses Generator"),
        (status == 2, "Proses TTD"),
        (status == 3, "Selesai"),
        else_="Proses Parsing"))
    partner_id = Column(Integer(), server_default="0")
    nop = Column(String(32))


class LogEsppt(DefaultModel, Base):
    __tablename__ = 'log_esppt'
    kd_propinsi = Column(String(2), nullable=False)
    kd_dati2 = Column(String(2), nullable=False)
    kd_kecamatan = Column(String(3), nullable=False)
    kd_kelurahan = Column(String(3), nullable=False)
    kd_blok = Column(String(3), nullable=False)
    no_urut = Column(String(4), nullable=False)
    kd_jns_op = Column(String(1), nullable=False)
    tahun = Column(String(4), nullable=False)
    siklus_sppt = Column(Integer, nullable=False)
    partner_id = Column(Integer(), ForeignKey(Partner.id), server_default="0")
    destination = Column(String)
    status = Column(Integer)
    created = Column(DateTime)
    sent = Column(DateTime)
    file_name = Column(String(254))
    nm_wp_sppt = Column(String(30))
    pbb_yg_harus_dibayar_sppt = Column(Integer)
    nop = column_property(
        kd_propinsi + "." + kd_dati2 + "-" + kd_kecamatan + "." +
        kd_kelurahan + "-" + kd_blok + "." + no_urut + "-" + kd_jns_op)
    nop_raw = column_property(
        kd_propinsi + kd_dati2 + kd_kecamatan +
        kd_kelurahan + kd_blok + no_urut + kd_jns_op)
    status_text = column_property(
        case(
            (status == -1, "Pengajuan"),
            (status == 0, "Proses Penetapan"),
            (status == 1, "Proses TTD"),
            (status == 2, "Tersedia"),
            (status == 3, "Gagal"),
            else_="Unknown"
        )
    )

    kecamatan = column_property(kd_propinsi+"."+kd_dati2+"."+kd_kecamatan)
    kelurahan = column_property(
        kd_propinsi+"."+kd_dati2+"."+kd_kecamatan+"."+kd_kelurahan)
    partner = relationship("Partner", backref="log_esppt")
    __table_args__ = (TABLE_ARGS)

    @property
    def nop_as_id(self):
        return "".join([self.kd_propinsi, self.kd_dati2, self.kd_kecamatan,
                        self.kd_kelurahan, self.kd_blok, self.kd_no_urut,
                        self.kd_jns_op, self.tahun])

    @property
    def nop_to_id(self):
        return self.nop_as_id

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

    @classmethod
    def query_id(cls, id):
        return cls.query().filter_by(id=id)

    @classmethod
    def query_nop(cls, nop):
        nop = FixNop(nop)
        return cls.query().filter(
            cls.kd_propinsi == nop['kd_propinsi'],
            cls.kd_dati2 == nop['kd_dati2'],
            cls.kd_kecamatan == nop['kd_kecamatan'],
            cls.kd_kelurahan == nop['kd_kelurahan'],
            cls.kd_blok == nop['kd_blok'],
            cls.no_urut == nop['no_urut'],
            cls.kd_jns_op == nop['kd_jns_op'],
        )


class Passphrase(PartnerModel, Base):
    __tablename__ = 'log_passphrase'
    password = Column(String(64))


class EspptUnduh(PartnerModel, Base):
    __tablename__ = 'log_sppt_unduh'
    nop = Column(String(18))
    tahun = Column(String(4))
    kd_propinsi = Column(String(2))
    kd_dati2 = Column(String(2))
    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))

    @classmethod
    def query_nop(cls, nop):
        return cls.query().filter_by(nop=nop)