kelurahan.py 2.51 KB
from sqlalchemy import (
    Column,
    Integer,
    DateTime,
    ForeignKey,
    UniqueConstraint,
    String,
    SmallInteger
)
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import (
    relationship
)

from . import PAD_TABLE_ARGS, DefaultModel, Base, PjdlKecamatan


class PjdlKelurahan(Base, DefaultModel):
    __tablename__ = 'tblkelurahan'
    __table_args__ = (
        UniqueConstraint('kecamatan_id', 'kelurahankd'),
        PAD_TABLE_ARGS
    )

    id = Column(Integer, primary_key=True)
    kecamatan_id = Column(ForeignKey(PjdlKecamatan.id,
                                     ondelete='CASCADE', onupdate='CASCADE'),
                          nullable=False
                          )
    kelurahankd = Column(String(3), nullable=False)
    kelurahannm = Column(String(25))
    tmt = Column(DateTime)
    enabled = Column(SmallInteger)
    create_date = Column(DateTime)
    create_uid = Column(Integer)
    write_date = Column(DateTime)
    write_uid = Column(Integer)

    kecamatan = relationship('PjdlKecamatan',
                             primaryjoin='PjdlKelurahan.kecamatan_id == PjdlKecamatan.id',
                             backref='kelurahan')

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

    @kode.setter
    def kode(self, kode):
        self.kelurahankd = kode

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

    @nama.setter
    def nama(self, kode):
        self.kelurahannm = kode

    @classmethod
    def query_kode(cls, kode):
        return cls.query().filter(cls.kelurahankd == kode)

    @classmethod
    def query_nama(cls, nama):
        return cls.query().filter(cls.kelurahannm == nama)

    @classmethod
    def query_register(cls, order_field="kelurahannm"):
        return cls.query_from(columns =[PjdlKelurahan.kelurahankd.label('Kode Kelurahan'), 
                                        cls.kelurahannm.label('Kelurahan'),
                                        PjdlKecamatan.kecamatannm.label('Kecamatan'),
                                        cls.enabled.label('Aktif')]). \
            outerjoin(PjdlKecamatan, PjdlKecamatan.id == cls.kecamatan_id). \
            order_by(getattr(cls, order_field))

    @classmethod
    def get_list(cls, kecamatan_id=None):
        r = []
        q = cls.query(cls).order_by(cls.kelurahannm)
        if kecamatan_id:
            q.filter(cls.kecamatan_id == kecamatan_id)
        for row in q:
            g = (str(row.id), f"{row.kode}/ {row.nama}")
            r.append(g)
        return r