pegawai.py 2.27 KB
from sqlalchemy import (
    Column,
    Integer,
    BigInteger,
    DateTime,
    ForeignKey,
    UniqueConstraint,
    String,
    SmallInteger
)
from sqlalchemy.orm import (
    relationship,
    backref
)

from opensipkd.models import Partner
from ..models import DBSession, Base
from ..models import (DefaultModel, NamaModel, TABLE_ARGS,
                      Departemen)


class Eselon(Base, NamaModel):
    __tablename__ = 'eselon'
    pangkat = Column(String(32))
    ruang = Column(String(1))
    tunjangan = Column(BigInteger)
    __table_args__ = TABLE_ARGS


class Jabatan(Base, NamaModel):
    __tablename__ = 'jabatan'
    jenis = Column(SmallInteger)
    nama_lain = Column(String(128))
    nama_pendek = Column(String(128))
    eselon_id = Column(SmallInteger, ForeignKey(Eselon.id))
    __table_args__ = TABLE_ARGS


class Pangkat(Base, NamaModel):
    __tablename__ = 'pangkat'
    pangkat = Column(String(32))
    ruang = Column(String(1))
    __table_args__ = TABLE_ARGS


class PartnerDepartemen(Base, DefaultModel):
    __tablename__ = 'partner_departemen'
    partner_id = Column(Integer, ForeignKey(Partner.id))
    departemen_id = Column(Integer, ForeignKey(Departemen.id))
    # fungsional_id = Column(Integer, ForeignKey(Jabatan.id))
    jabatan_id = Column(SmallInteger, ForeignKey(Jabatan.id))
    mulai = Column(DateTime(timezone=False))
    selesai = Column(DateTime(timezone=False))

    partner = relationship(Partner, backref=backref("partner_departemen"))
    departemen = relationship(Departemen, foreign_keys=[
                              departemen_id], backref=backref("partner_departemen"))
    # fungsional = relationship(Jabatan, foreign_keys=[fungsional_id], backref=backref("partner_funsional"), )
    jabatan = relationship(Jabatan, foreign_keys=[
                           jabatan_id], backref=backref("partner_jabatan", ))
    __table_args__ = (UniqueConstraint('partner_id', 'departemen_id', 'jabatan_id',
                                       'mulai', name='partner_dept_uq'),
                      TABLE_ARGS)

    @classmethod
    def query_jabatan(cls, partner_id, tanggal):
        query = DBSession.query(cls). \
            filter(cls.partner_id == partner_id,
                   tanggal >= cls.mulai,
                   tanggal <= cls.selesai)
        return query