models_eis.py 3.43 KB
from datetime import datetime
from sqlalchemy import (
    Column,
    Integer,
    BigInteger,
    SmallInteger,
    Text,
    DateTime,
    String,
    UniqueConstraint,
    ForeignKey,
    Index,
    create_engine,
    )

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.orm import (
    scoped_session,
    sessionmaker,
    relationship, backref
    )

from models_default import (DefaultModel as BaseDefaultModel,
                            NamaModel)
from conf import eis_url    
EisBase = declarative_base()
EisDBSession = scoped_session(sessionmaker())    
engine = create_engine(eis_url, echo=False)
EisDBSession.configure(bind=engine)
EisBase.metadata.bind = engine

TABLE_ARGS = {'extend_existing':True,
              'schema':'eis'
              }
class DefaultModel(BaseDefaultModel):
    @classmethod
    def query(cls):
        return EisDBSession.query(cls)
    @classmethod
    def count(cls):
        return EisDBSession.query(func.count('id')).scalar()
        
class Anggaran(NamaModel, EisBase):
    __tablename__ = 'sipkd_anggaran'
    tahun = Column(String(4))
    departemen_kd = Column(String(16))
    departemen_nm = Column(String(255))
    jumlah = Column(BigInteger)
    murni = Column(BigInteger)
    perubahan = Column(BigInteger)
    level_id = Column(Integer)
    __table_args__ = (UniqueConstraint('tahun', 'kode', 'departemen_kd'),
                      TABLE_ARGS)

class ArPayment(NamaModel, EisBase):
    __tablename__ = 'sipkd_ar_payment'
    tanggal = Column(DateTime(timezone=False))
    departemen_kd = Column(String(16))
    departemen_nm = Column(String(255))
    jumlah = Column(BigInteger)
    level_id = Column(Integer)
    tahun = Column(String(4))
    __table_args__ = (UniqueConstraint('tanggal', 'departemen_kd', 'kode'),
                      TABLE_ARGS)

class ApPayment(NamaModel, EisBase):
    __tablename__ = 'sipkd_ap_payment'
    tanggal = Column(DateTime(timezone=False))
    tanggal = Column(DateTime(timezone=False))
    departemen_kd = Column(String(16))
    departemen_nm = Column(String(255))
    jumlah = Column(BigInteger)
    level_id = Column(Integer)
    tahun = Column(String(4))
    __table_args__ = (UniqueConstraint('tanggal', 'departemen_kd', 'kode'),
                      TABLE_ARGS)

class ByPayment(NamaModel, EisBase):
    __tablename__ = 'sipkd_pb_payment'
    tanggal = Column(DateTime(timezone=False))
    tanggal = Column(DateTime(timezone=False))
    departemen_kd = Column(String(16))
    departemen_nm = Column(String(255))
    jumlah = Column(BigInteger)
    level_id = Column(Integer)
    tahun = Column(String(4))
    __table_args__ = (UniqueConstraint('tanggal', 'departemen_kd', 'kode'),
                      TABLE_ARGS)
class Rekening(NamaModel, EisBase):
    __tablename__ = 'sipkd_rekening'
    tahun     = Column(Integer)
    level_id  = Column(SmallInteger, default=1)
    parent_id = Column(Integer, ForeignKey('eis.sipkd_rekening.id'),)
    status  = Column(SmallInteger, default=1)
    defsign   = Column(SmallInteger, default=1)
    children  = relationship("Rekening", 
                   backref=backref('parent', remote_side='Rekening.id'))
    __table_args__= (
                      UniqueConstraint('kode', 'tahun', name='rekening_uq'),
                      #ForeignKeyConstraint(['parent_id'], ForeignKey('rekening.id')),
                      TABLE_ARGS
                    )
EisBase.metadata.create_all(engine)