pegawai.py 4.4 KB
from datetime import datetime
from sqlalchemy import (
    Column, DateTime, String, func, ForeignKeyConstraint
)
from sqlalchemy.ext.hybrid import hybrid_property
from ..models import PbbBase, PbbDBSession, PBB_ARGS, Kantor, BasePbb
from .tools import number_only, FixKantor, column_concat


class Wewenang(PbbBase, BasePbb):
    __tablename__ = 'wewenang'
    kd_wewenang = Column(String(2), primary_key=True)
    nm_wewenang = Column(String(30))
    __table_args__ = (PBB_ARGS,)

    @hybrid_property
    def kode(self):
        return self.kd_wewenang

    @hybrid_property
    def nama(self):
        return self.nm_wewenang

    @classmethod
    def query_id(cls, sid):
        return cls.query(). \
            filter(cls.kd_wewenang == sid, )

    @classmethod
    def get_list(cls):
        query = PbbDBSession.query(cls.kd_wewenang, cls.nm_wewenang)
        return [(row.kd_wewenang, row.nm_wewenang) for row in query.all()]


class Pegawai(PbbBase, BasePbb):
    __tablename__ = 'pegawai'
    nip = Column(String(18), primary_key=True)
    nm_pegawai = Column(String(30))
    __table_args__ = (PBB_ARGS,)

    @hybrid_property
    def kode(self):
        return self.nip

    @hybrid_property
    def nama(self):
        return self.nm_pegawai

    @classmethod
    def query_id(cls, sid):
        return cls.query(). \
            filter(cls.nip == sid, )

    # @classmethod
    # def get_list(cls):
    #     return PbbDBSession.query(cls.nip, cls.nm_pegawai)

    @classmethod
    def get_list(cls):
        query = PbbDBSession.query(cls.nip, cls.nm_pegawai)
        return [(row.nip, row.nm_pegawai) for row in query]


class DatLogin(PbbBase, BasePbb):
    __tablename__ = 'dat_login'
    nm_login = Column(String(18), primary_key=True)
    nip = Column(String(18))
    password = Column(String(50))
    __table_args__ = (PBB_ARGS,)

    @classmethod
    def query_id(cls, sid):
        return cls.query(). \
            filter(cls.nm_login == sid, )


class PosisiPegawai(PbbBase, BasePbb):
    __tablename__ = 'posisi_pegawai'
    kd_kanwil = Column(String(2), primary_key=True)
    kd_kantor = Column(String(2), primary_key=True)
    nip = Column(String(18), primary_key=True)
    kd_seksi = Column(String(2))
    tgl_awal_berlaku = Column(DateTime(timezone=False))
    tgl_akhir_berlaku = Column(DateTime(timezone=False))
    kd_wewenang = Column(String(2))
    kd_jabatan = Column(String(2))
    __table_args__ = (
        ForeignKeyConstraint((nip,), [Pegawai.nip]),
        ForeignKeyConstraint((kd_kanwil, kd_kantor),
                             [Kantor.kd_kanwil, Kantor.kd_kantor]),
        ForeignKeyConstraint((kd_wewenang,), [Wewenang.kd_wewenang]),
        PBB_ARGS,)

    @hybrid_property
    def kode_kantor(self):
        return "{}.{}".format(self.kd_kanwil, self.kd_kantor)

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

    @classmethod
    def query_id(cls, sid):
        kode = number_only(sid)
        kantor = FixKantor(kode)
        jabatan = kode[4:6]
        nip = kode[6:]
        return cls.query(). \
            filter(cls.kd_kanwil == kantor["kd_kanwil"],
                   cls.kd_kantor == kantor["kd_kantor"],
                   cls.nip == nip,
                   cls.kd_jabatan == jabatan)

    @classmethod
    def query_nip(cls, sid):
        return cls.query(). \
            filter(cls.nip == sid, )

    @classmethod
    def get_posisi(cls, nip):
        sekarang = datetime.now().strftime("%Y-%m-%d")
        row = cls.query(). \
            filter(cls.nip == nip). \
            filter(cls.tgl_awal_berlaku <= func.to_date(sekarang, 'YYYY-MM-DD'),
                   cls.tgl_akhir_berlaku >= func.to_date(sekarang,
                                                         'YYYY-MM-DD')). \
            first()
        if not row:
            return
        return row.to_dict()

    @classmethod
    def get_ttd_restitusi_kompensasi(cls, kantor):
        sekarang = datetime.now().strftime("%Y-%m-%d")
        return Pegawai.query(). \
            filter(cls.nip == Pegawai.nip). \
            filter(cls.kd_kanwil == kantor['kd_kanwil']). \
            filter(cls.kd_kantor == kantor['kd_kantor']). \
            filter(cls.kd_jabatan == '10', cls.kd_wewenang == '10'). \
            filter(cls.tgl_awal_berlaku <= func.to_date(sekarang, 'YYYY-MM-DD'),
                   cls.tgl_akhir_berlaku >= func.to_date(sekarang,
                                                         'YYYY-MM-DD')). \
            first()