spt_air.py 4.64 KB
from sqlalchemy import (Column, Integer, DateTime, ForeignKey, String,
                        SmallInteger, BigInteger, Float)
from sqlalchemy.orm import (relationship)

# from opensipkd.pjdl.models.bak.air import AtSumberAlternatif

from . import PAD_TABLE_ARGS, Base, DBSession, DefaultModel
from . import (
    PjdlOp, PjdlKecamatan, PjdlKelurahan, PjdlAirtanahZona,
    PjdlAirtanahKualitas, PjdlAirtanahSumberAlternatif,
    PjdlAirtanahJenisSumber, PjdlAirtanahJenisManfaat)


class PjdlSptAir(Base, DefaultModel):
    __tablename__ = 'pad_spt_at_det'
    __table_args__ = PAD_TABLE_ARGS

    id = Column(BigInteger, primary_key=True)
    spt_id = Column(ForeignKey('pad.pad_spt.id'))
    customer_usaha_id = Column(ForeignKey(
        PjdlOp.id, ondelete='CASCADE', onupdate='CASCADE'))
    alamat = Column(String(255))
    kecamatan_id = Column(ForeignKey(PjdlKecamatan.id, onupdate='CASCADE'))
    kelurahan_id = Column(ForeignKey(PjdlKelurahan.id, onupdate='CASCADE'))
    titik_ke = Column(Integer)
    zona_id = Column(ForeignKey(PjdlAirtanahZona.id, onupdate='CASCADE'))
    kualitas_id = Column(ForeignKey(
        PjdlAirtanahKualitas.id, onupdate='CASCADE'))
    sumber_alternatif_id = Column(ForeignKey(
        PjdlAirtanahSumberAlternatif.id, onupdate='CASCADE'))
    jenis_sumber_id = Column(ForeignKey(
        PjdlAirtanahJenisSumber.id, onupdate='CASCADE'))
    manfaat_id = Column(ForeignKey(
        PjdlAirtanahJenisManfaat.id, onupdate='CASCADE'))
    volume = Column(Integer)
    ksda = Column(Float(53))
    volume_progresif = Column(String(50))
    volume_progresif_val = Column(Integer)
    indeks_kp = Column(Float(53))
    kp = Column(Float(53))
    fna = Column(Float(53))
    hab = Column(Float(53))
    hda = Column(BigInteger)
    npa = Column(BigInteger)
    # penggunaan_id = Column(ForeignKey('pad.pad_at_penggunaan.id'))
    volume_id = Column(ForeignKey('pad.pad_at_volume.id'))
    no_izin = Column(String(255))
    tanggal_izin = Column(DateTime)
    status = Column(SmallInteger)

    tanggal_pencatatan = Column(DateTime)
    volume_diizinkan = Column(Integer)
    meteran_awal = Column(Integer)
    meteran_akhir = Column(Integer)
    volume_pemakaian = Column(Integer)
    volume_kelebihan_pemakaian = Column(Integer)
    npa_normal = Column(BigInteger)
    npa_kelebihan = Column(BigInteger)
    npa_kelebihan_sanksi = Column(BigInteger)
    uraian = Column(String(256))

    customer_usaha = relationship('PjdlOp', backref='pad_spt_at_dets')
    sumber_alternatif = relationship(
        'PjdlAirtanahSumberAlternatif', backref='pad_spt_at_dets')
    zona = relationship('PjdlAirtanahZona', backref='pad_spt_at_dets')
    jenis_sumber = relationship(
        'PjdlAirtanahJenisSumber', backref='pad_spt_at_dets')
    kecamatan = relationship('PjdlKecamatan', backref='pad_spt_at_dets')
    kelurahan = relationship('PjdlKelurahan', backref='pad_spt_at_dets')
    kualitas = relationship('PjdlAirtanahKualitas', backref='pad_spt_at_dets')
    manfaat = relationship('PjdlAirtanahJenisManfaat',
                           backref='pad_spt_at_dets')
    spt = relationship('PjdlInvoice', backref='pad_spt_at_dets')
    sumber_alternatif = relationship(
        'PjdlAirtanahSumberAlternatif', backref='pad_spt_at_dets')
    zona = relationship('PjdlAirtanahZona', backref='pad_spt_at_dets')

    # at_penggunaan = relationship('AtPenggunaan')
    # at_volume = relationship('AtVolume')

    @classmethod
    def get_sda(cls, atid):
        result = DBSession.query(
            cls.id,
            PjdlAirtanahZona.nilai_komponen_sda.label('zonasda'),
            PjdlAirtanahZona.nilai_indeks.label('zonaidx'),
            PjdlAirtanahKualitas.nilai_indeks.label('kualitasidx'),
            PjdlAirtanahSumberAlternatif.nilai_indeks.label('alternatifidx'),
            PjdlAirtanahJenisSumber.nilai_indeks.label('sumberidx')
        ).\
            join(PjdlAirtanahZona, PjdlAirtanahZona.id == cls.zona_id).\
            join(PjdlAirtanahKualitas, PjdlAirtanahKualitas.id == cls.kualitas_id).\
            join(PjdlAirtanahSumberAlternatif, PjdlAirtanahSumberAlternatif.id == cls.sumber_alternatif_id).\
            join(PjdlAirtanahJenisSumber,
                 PjdlAirtanahJenisSumber.id == cls.jenis_sumber_id)
        result = result.filter(cls.id == atid)
        result = result.first()

        if result:
            rzonasda = result.zonasda
            rzonaidx = result.zonaidx
            rkualitasidx = result.kualitasidx
            ralternatifidx = result.alternatifidx
            rsumberidx = result.sumberidx

            sda = rzonasda * (rzonaidx + rkualitasidx +
                              ralternatifidx + rsumberidx)
        else:
            sda = 0.0

        return sda