models_webr.py 6.06 KB
from datetime import datetime
from sqlalchemy import (
    Column,
    Integer,
    BigInteger,
    SmallInteger,
    Text,
    DateTime,
    String,
    Float,
    Date,
    UniqueConstraint,
    ForeignKey,
    Index,
    create_engine,
    )

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

from conf import webr_url as url

WebrBase = declarative_base()
WebrDBSession = scoped_session(sessionmaker())    
engine_webr = create_engine(url, echo=False)
WebrDBSession.configure(bind=engine_webr)
WebrBase.metadata.bind = engine_webr

from models_default import (DefaultModel as BaseDefaultModel,
                            NamaModel, CommonModel)
                            
class DefaultModel(BaseDefaultModel):
    @classmethod
    def query(cls):
        return WebrDBSession.query(cls)

    @classmethod
    def count(cls):
        return WebrDBSession.query(func.count('id')).scalar()
    
class Rekening(NamaModel,WebrBase):
    __tablename__ = 'rekenings'
    id            = Column(Integer,    primary_key=True)
    kode          = Column(String(24), unique=True)
    nama          = Column(String(128))
    level_id      = Column(SmallInteger)
    is_summary    = Column(SmallInteger)
    parent_id     = Column(SmallInteger)

    
class ARInvoice(CommonModel, WebrBase):
    __tablename__   = 'arinvoices'
    id              = Column(Integer, primary_key=True)
    tahun_id        = Column(Integer)
    unit_id         = Column(Integer, ForeignKey("units.id"))
    no_id           = Column(Integer)
    subjek_pajak_id = Column(Integer, ForeignKey("subjekpajaks.id"))
    objek_pajak_id  = Column(Integer, ForeignKey("objekpajaks.id"))
    kode            = Column(String(32), unique=True)
    unit_kode       = Column(String(32))
    unit_nama       = Column(String(128))
    rekening_id     = Column(Integer, ForeignKey("rekenings.id"))
    rek_kode        = Column(String(16))    
    rek_nama        = Column(String(64))   
    wp_kode         = Column(String(16))
    wp_nama         = Column(String(64))
    wp_alamat_1     = Column(String(128))
    wp_alamat_2     = Column(String(128))
    op_kode         = Column(String(16))
    op_nama         = Column(String(64))
    op_alamat_1     = Column(String(128))
    op_alamat_2     = Column(String(128))
    #------------------------------Khusus untuk SPTPD--------------------------------------------#
    dasar           = Column(BigInteger)  # dasar = sum(dpp)
    tarif           = Column(Float)       # dasar/jumlah (agak berbeda dengan tarif yang di item)
    pokok           = Column(BigInteger)  # pokok = sum(total_pajak)
    denda           = Column(BigInteger)  
    bunga           = Column(BigInteger)  
    jumlah          = Column(BigInteger)  # pokok + denda + bunga
    #--------------------------------------------------------------------------------------------#
    periode_1       = Column(Date)
    periode_2       = Column(Date)
    tgl_tetap       = Column(Date)
    jatuh_tempo     = Column(Date)
    status_grid     = Column(SmallInteger, nullable=False, default=0) # 0 Register - 1 Pembayaran_cepat - 2 SPTPD
    status_bayar    = Column(SmallInteger, nullable=False, default=0) # 0 belum bayar - 1 sudah bayar - 2 batal
    is_sspd         = Column(SmallInteger, nullable=False, default=0) # Penambahan baru (29122016)
    is_tbp          = Column(SmallInteger, nullable=False, default=0) # Penambahan baru (29122016)
    is_sts          = Column(SmallInteger, nullable=False, default=0) # Penambahan baru (29122016)
    owner_id        = Column(Integer) # user login yg membuat invoice
    wilayah_id      = Column(Integer, ForeignKey("wilayahs.id"))
    create_uid      = Column(Integer)
    update_uid      = Column(Integer)
    create_date     = Column(DateTime(timezone=True))
    update_date     = Column(DateTime(timezone=True))
    UniqueConstraint(tahun_id,unit_id,no_id,name='arinvoice_uq')

    
class ARSspd(CommonModel, WebrBase):
    __tablename__ = 'arsspds'
    id            = Column(Integer, primary_key=True)
    tahun_id      = Column(Integer)
    unit_id       = Column(Integer, ForeignKey("units.id"))
    arinvoice_id  = Column(Integer, ForeignKey("arinvoices.id"))
    pembayaran_ke = Column(Integer)
    bunga         = Column(BigInteger)
    bayar         = Column(BigInteger)
    tgl_bayar     = Column(DateTime)
    create_uid    = Column(Integer)
    update_uid    = Column(Integer)
    create_date   = Column(DateTime(timezone=True))
    update_date   = Column(DateTime(timezone=True))
    posted        = Column(SmallInteger, nullable=False, default=0)
    ntb           = Column(String(20))   
    ntp           = Column(String(20))
    bank_id       = Column(Integer)
    channel_id    = Column(Integer)
    arinvoices    = relationship("ARInvoice", backref=backref('arsspds'))
    UniqueConstraint(arinvoice_id,pembayaran_ke,name='arsspd_uq')
    UniqueConstraint(tahun_id,unit_id,name='arsspd_no_uq')
    
class Pajak(NamaModel, WebrBase):
    __tablename__     = 'pajaks'
    status            = Column(Integer, default=1)
    rekening_id       = Column(Integer, ForeignKey("rekenings.id"))
    tahun             = Column(Integer, nullable=False, default=0)
    tarif             = Column(Float,   nullable=False, default=0)
    denda_rekening_id = Column(Integer, nullable=True,  default=0)

    UniqueConstraint('rekening_id','tahun', name='rekening_tahun')

class ObjekPajak(NamaModel, WebrBase):
    __tablename__  = 'objekpajaks'
    __table_args__ = (UniqueConstraint('subjekpajak_id', 'kode', 
                                       name='objekpajak_kode_uq'),)
    status_grid    = Column(SmallInteger, nullable=False, default=0) # 0 Biasa - 1 SPTPD
    status         = Column(Integer, default=1) # 0 Inaktif - 1 Aktif
    alamat_1       = Column(String(128))
    alamat_2       = Column(String(128))
    wilayah_id     = Column(Integer, ForeignKey("wilayahs.id"))
    unit_id        = Column(Integer, ForeignKey("units.id"))
    pajak_id       = Column(Integer, ForeignKey("pajaks.id"))
    subjekpajak_id = Column(Integer, ForeignKey("subjekpajaks.id"))