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

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


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

    def __init__(self):
        pass


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

    def __init__(self):
        pass


# class Pangkat(Base, NamaModel):
#     __tablename__ = 'pangkat'
#     pangkat = Column(String(32))
#     ruang = Column(String(1))
#     __table_args__ = TABLE_ARGS
#
#     def __init__(self):
#         pass


class PartnerDepartemen(Base, DefaultModel):
    __tablename__ = 'partner_departemen'
    partner_id = Column(Integer, ForeignKey(Partner.id))
    departemen_id = Column(Integer, ForeignKey(Departemen.id))
    jabatan_id = Column(Integer, ForeignKey(Jabatan.id))
    struktural_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"))
    jabatan = relationship(Jabatan, foreign_keys=[jabatan_id], backref=backref("partner_departemen"), )
    struktural = relationship(Jabatan, foreign_keys=[struktural_id], backref=backref("partner_struktural", ))
    __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


# class PartnerPangkat(Base, DefaultModel):
#     __tablename__ = 'partner_pangkat'
#     partner_id = Column(Integer, ForeignKey(Partner.id))
#     pangkat_id = Column(Integer, ForeignKey(Pangkat.id))
#     tmt = Column(DateTime(timezone=False))
#     partner = relationship(Partner, backref=backref("partner_pangkat"))
#     pangkat = relationship(Pangkat, backref=backref("partner_pangkat"))
#     __table_args__ = (UniqueConstraint('partner_id', 'pangkat_id'),
#                       TABLE_ARGS)

    # @classmethod
    # def query_pangkat(cls, partner_id, tanggal):
    #     tmt = DBSession.query(func.max(cls.tmt)). \
    #         filter(
    #         cls.partner_id == partner_id,
    #         cls.tmt <= tanggal).first()
    #     return DBSession.query(cls). \
    #         filter(cls.partner_id == partner_id,
    #                cls.tmt <= tmt)
    #

class PartnerLogin(Base):
    __tablename__ = 'partner_login'
    partner_id = Column(Integer, ForeignKey(Partner.id), unique=True)
    user_id = Column(Integer, ForeignKey(User.id), primary_key=True, )  # ,
    partner = relationship(Partner, backref=backref('partner_login'))
    users = relationship(User, backref=backref('partner_login'))
    __table_args__ = TABLE_ARGS

    @classmethod
    def query_user(cls, user_id):
        return DBSession.query(cls).filter_by(user_id=user_id)