resources.py 8.46 KB
from tangsel.tools import number_only
from tangsel.tools.pbb import FixDati2
from sqlalchemy import (Column, String, Float, func)
from sqlalchemy.ext.hybrid import hybrid_property
from . import PbbBase, BasePbb, PbbDBSession, PBB_ARGS
from .tools import column_concat


class Pekerjaan(PbbBase, BasePbb):
    __tablename__ = 'pekerjaan'
    kd_pekerjaan = Column(String(2), primary_key=True)
    nm_pekerjaan = Column(String(30))
    status_pekerjaan = Column(String(1))
    __table_args__ = (PBB_ARGS,)

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

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

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

    @classmethod
    def query_kode(cls, kode):
        kode = number_only(kode)
        return cls.query().filter_by(kd_pekerjaan=kode)

    @classmethod
    def query_id(cls, id):
        return cls.query_kode(id)

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


class Kegiatan(PbbBase, BasePbb):
    __tablename__ = 'pekerjaan_kegiatan'
    kd_pekerjaan = Column(String(2), primary_key=True)
    kd_kegiatan = Column(String(2), primary_key=True)
    nm_kegiatan = Column(String(30))
    __table_args__ = (PBB_ARGS,)

    @hybrid_property
    def kode(self):
        return "{}.{}".format(self.kd_pekerjaan, self.kd_kegiatan)

    @hybrid_property
    def id(self):
        return self.kode().replace(".", "")

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

    @classmethod
    def get_list(cls):
        query = PbbDBSession.query(
            column_concat([cls.kd_pekerjaan, cls.kd_kegiatan]).label("kode"),
            cls.nm_kegiatan
        ).order_by(cls.nm_kegiatan)
        return [(row.kode, row.nm_kegiatan) for row in query.all()]

    @classmethod
    def query_kode(cls, kode):
        kode = number_only(kode)
        keys = dict(kd_pekerjaan=kode[:2],
                    kd_kegiatan=kode[2:4])
        return cls.query().filter_by(kd_pekerjaan=keys['kd_pekerjaan'],
                                     kd_kegiatan=keys['kd_kegiatan'])

    @classmethod
    def query_id(cls, id):
        return cls.query_kode(id)


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


class GroupResource(PbbBase, BasePbb):
    __tablename__ = 'group_resource'
    kd_group_resource = Column(String(2), primary_key=True)
    nm_group_resource = Column(String(45))
    __table_args__ = (PBB_ARGS,)

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

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

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

    @classmethod
    def query_kode(cls, kode):
        kode = number_only(kode)
        keys = dict(kd_group_resource=kode)
        return cls.query().filter_by(
            kd_group_resource=keys['kd_group_resource'])

    @classmethod
    def query_id(cls, id):
        return cls.query_kode(id)

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


class ItemResource(PbbBase, BasePbb):
    __tablename__ = 'item_resource'
    kd_group_resource = Column(String(2), primary_key=True)
    kd_resource = Column(String(2), primary_key=True)
    nm_resource = Column(String(45))
    satuan_resource = Column(String(15))
    __table_args__ = (PBB_ARGS,)

    @hybrid_property
    def kode(self):
        return "{}.{}".format(self.kd_group_resource, self.kd_resource)

    @hybrid_property
    def id(self):
        return self.kode().replace(".", "")

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

    @classmethod
    def get_list(cls, kd_group_resource=None):
        query = PbbDBSession.query(
            column_concat([cls.kd_group_resource, cls.kd_resource]).label(
                "kode"),
            cls.nm_resource
        ).order_by(cls.nm_resource)
        if kd_group_resource:
            query=query.filter_by(kd_group_resource=kd_group_resource)
        return [(row.kode, row.nm_resource) for row in query.all()]

    @classmethod
    def query_kode(cls, kode):
        kode = number_only(kode)
        keys = dict(kd_group_resource=kode[:2],
                    kd_resource=kode[2:4])
        return cls.query().filter_by(
            kd_group_resource=keys['kd_group_resource'],
            kd_resource=keys['kd_resource'])

    @classmethod
    def query_id(cls, id):
        return cls.query_kode(id)


class VolResource(PbbBase, BasePbb):
    __tablename__ = 'vol_resource'
    kd_pekerjaan = Column(String(2), primary_key=True)
    kd_kegiatan = Column(String(2), primary_key=True)
    kd_group_resource = Column(String(2), primary_key=True)
    kd_resource = Column(String(2), primary_key=True)
    vol_resource = Column(Float)
    __table_args__ = (PBB_ARGS,)

    @hybrid_property
    def kode(self):
        return "{}.{}.{}.{}".format(self.kd_pekerjaan, self.kd_kegiatan,
                                    self.kd_group_resource, self.kd_resource)

    @hybrid_property
    def id(self):
        return self.kode().replace(".", "")

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

    @classmethod
    def query_kode(cls, kode):
        kode = number_only(kode)
        keys = dict(kd_pekerjaan=kode[:2],
                    kd_kegiatan=kode[2:4],
                    kd_group_resource=kode[4:6],
                    kd_resource=kode[6:8])
        return cls.query().filter_by(kd_pekerjaan=keys['kd_pekerjaan'],
                                     kd_kegiatan=keys['kd_kegiatan'],
                                     kd_group_resource=keys[
                                         'kd_group_resource'],
                                     kd_resource=keys['kd_resource'])

    @classmethod
    def query_id(cls, id):
        return cls.query_kode(id)


class HrgResource(PbbBase, BasePbb):
    __tablename__ = 'hrg_resource'
    kd_propinsi = Column(String(2), primary_key=True)
    kd_dati2 = Column(String(2), primary_key=True)
    thn_hrg_resource = Column(String(4), primary_key=True)
    kd_group_resource = Column(String(2), primary_key=True)
    kd_resource = Column(String(2), primary_key=True)
    kd_kanwil = Column(String(2))
    kd_kantor = Column(String(2))
    jns_dokumen = Column(String(1))
    no_dokumen = Column(String(11))
    hrg_resource = Column(Float)
    __table_args__ = (PBB_ARGS,)

    @hybrid_property
    def kode(self):
        return "{}.{}.{}.{}".format(self.kd_propinsi, self.kd_dati2,
                                    self.thn_hrg_resource,
                                    self.kd_group_resource,
                                    self.kd_resource)

    @hybrid_property
    def id(self):
        return self.kode.replace(".", "")

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

    @classmethod
    def count(cls):
        return PbbDBSession.query(func.count(cls.kd_propinsi).label('cnt'))

    @classmethod
    def query_kode(cls, kode):
        kode = number_only(kode)
        keys = FixDati2(kode).to_dict()
        keys.update(dict(thn_hrg_resource=kode[4:8],
                         kd_group_resource=kode[8:10],
                         kd_resource=kode[10:12]))
        return cls.query().filter_by(kd_propinsi=keys['kd_propinsi'],
                                     kd_dati2=keys['kd_dati2'],
                                     thn_hrg_resource=keys['thn_hrg_resource'],
                                     kd_group_resource=keys[
                                         'kd_group_resource'],
                                     kd_resource=keys['kd_resource'])

    @classmethod
    def query_id(cls, id):
        return cls.query_kode(id)

    @classmethod
    def save(cls, values, row=None):
        if not row:
            row = cls()
        row.from_dict(values)
        PbbDBSession.add(row)
        PbbDBSession.flush()

    @classmethod
    def pembentukan_dbkb(cls, idk):
        kd_pro = idk[:2]
        kd_dat = idk[2:4]
        thn = idk[4:8]
        cls.callproc("PEMBETUKAN_DBKB", [thn, kd_pro, kd_dat])