Commit b267627e by aa.gusti

anggaran

1 parent 545f22da
......@@ -24,7 +24,7 @@ from sqlalchemy.orm import (
from conf import eis_url
EisBase = declarative_base()
EisDBSession = scoped_session(sessionmaker())
engine = create_engine(eis_url)
engine = create_engine(eis_url, echo=False)
EisDBSession.configure(bind=engine)
EisBase.metadata.bind = engine
......@@ -105,11 +105,10 @@ class ArPayment(NamaModel, EisBase):
tanggal = Column(DateTime(timezone=False))
departemen_kd = Column(String(16))
departemen_nm = Column(String(255))
rekening_kd = Column(String(16))
rekening_nm = Column(String(255))
jumlah = Column(BigInteger)
level_id = Column(Integer)
__table_args__ = (UniqueConstraint('kode'),
tahun = Column(String(4))
__table_args__ = (UniqueConstraint('tanggal', 'departemen_kd', 'kode'),
TABLE_ARGS)
class ApPayment(NamaModel, EisBase):
......@@ -118,11 +117,10 @@ class ApPayment(NamaModel, EisBase):
tanggal = Column(DateTime(timezone=False))
departemen_kd = Column(String(16))
departemen_nm = Column(String(255))
rekening_kd = Column(String(16))
rekening_nm = Column(String(255))
jumlah = Column(BigInteger)
level_id = Column(Integer)
__table_args__ = (UniqueConstraint('kode'),
tahun = Column(String(4))
__table_args__ = (UniqueConstraint('tanggal', 'departemen_kd', 'kode'),
TABLE_ARGS)
class ByPayment(NamaModel, EisBase):
......@@ -131,11 +129,10 @@ class ByPayment(NamaModel, EisBase):
tanggal = Column(DateTime(timezone=False))
departemen_kd = Column(String(16))
departemen_nm = Column(String(255))
rekening_kd = Column(String(16))
rekening_nm = Column(String(255))
jumlah = Column(BigInteger)
level_id = Column(Integer)
__table_args__ = (UniqueConstraint('kode'),
tahun = Column(String(4))
__table_args__ = (UniqueConstraint('tanggal', 'departemen_kd', 'kode'),
TABLE_ARGS)
class Rekening(NamaModel, EisBase):
__tablename__ = 'sipkd_rekening'
......
from sipkd_models import Anggaran, Realisasi, Base, DBSession
from eis_models import (Anggaran as EisAnggaran, ApPayment as EisApPayment,
ArPayment as EisArPayment, ByPayment as EisByPayment,
from sipkd_models import Realisasi, Base, DBSession
from eis_models import (ApPayment as EisApPayment,
ByPayment as EisByPayment,
Rekening as EisRekening,
EisBase, EisDBSession)
from conf import sipkd_url
from sqlalchemy import create_engine
from sqlalchemy import create_engine, literal_column, func
from datetime import datetime
from datetime import date
try:
from urllib import quote_plus, quote
except:
from urllib.parse import quote_plus, quote
engine = create_engine(sipkd_url)
DBSession.configure(bind=engine)
Base.metadata.bind = engine
......@@ -14,78 +21,99 @@ now = datetime.now()
tanggal = now.date()
tahun = now.strftime('%Y')
def import_anggaran():
query = DBSession.query(Anggaran).filter_by(tahun=tahun)
for row in query.all():
anggaran = EisDBSession.query(EisAnggaran).\
filter_by(tahun=row.tahun,
kode=row.kd_rekening,
departemen_kd = row.kd_opd,
).first()
if not anggaran:
anggaran = EisAnggaran()
anggaran.tahun = row.tahun
anggaran.kode = row.kd_rekening
anggaran.departemen_kd = row.kd_opd
anggaran.level_id = row.kd_rekening.count('.')
anggaran.nama = row.nm_rekening
anggaran.departemen_nm = row.nm_opd
anggaran.murni = row.ang_murni
anggaran.perubahan = row.ang_perubahan
EisDBSession.add(anggaran)
EisDBSession.flush()
EisDBSession.commit()
def import_ar(all=False):
query = DBSession.query(Realisasi)
def calculate(tabel, all=False):
query = EisDBSession.query(tabel).filter_by(tahun = str(tahun)).\
order_by(tabel.departemen_kd, tabel.tanggal, tabel.kode.desc())
if not all:
query = query.filter_by(tanggal=tanggal)
for row in query.filter(Realisasi.kd_rekening.like('4%')).all():
eis = EisDBSession.query(ArPayment).\
filter_by(tahun = row.tahun,
rekening_kd = row.kd_rekening,
departemen_kd = row.kd_opd,
tanggal = tanggal,
old_level = 0
levels = {}
jumlahs = {}
key = ""
for row in query.all():
if row.level_id > old_level:
print('Lebih', jumlahs, key)
old_level = row.level_id
key = 'a'+str(row.level_id)
#JIKA level sama dengan sebelumnya jumlahkan
if row.level_id == old_level:
print('Sama')
if not key in jumlahs:
jumlahs[key] = row.jumlah
else:
jumlahs[key] += row.jumlah
#JIKA level < sebelumnya update current row
if row.level_id < old_level:
print('Kurang', jumlahs, key)
print('kode: ', row.kode, 'level: ', row.level_id, 'old: ', old_level, 'key: ', key, 'jml: ', row.jumlah, 'jmls: ', jumlahs)
row.jumlah = jumlahs[key]
EisDBSession.add(row)
EisDBSession.flush()
jumlahs[key] = 0 #key sebelumnya diset jadi 0
key = 'a'+str(row.level_id)
if not key in jumlahs:
jumlahs[key] = row.jumlah
else:
jumlahs[key] += row.jumlah
old_level = row.level_id
print('kode: ', row.kode, 'level: ', row.level_id, 'old: ', old_level, 'key: ', key, 'jml: ', row.jumlah, 'jmls: ', jumlahs)
EisDBSession.commit()
def validate_parent(tabel, departemen_kd, departemen_nm, rekening, tanggal):
kode = rekening.split('.')
rekening = "\'" + rekening + "\'"
rows = EisDBSession.query(EisRekening).\
filter(literal_column(rekening).like(
func.concat(EisRekening.kode,'%'))).all()
for row in rows:
if not row.kode:
continue
induk = EisDBSession.query(tabel).\
filter_by(tahun=str(row.tahun),
kode=row.kode,
departemen_kd = departemen_kd,
).first()
if not eis:
eis = EisArPayment()
eis.tahun = row.tahun
eis.kode = row.kd_rekening
eis.departemen_kd = row.kd_opd
eis.tanggal = tanggal
eis.level_id = row.kd_rekening.count('.')
eis.nama = row.nm_rekening
eis.departemen_nm = row.nm_opd
eis.jumlah = row.realisai
EisDBSession.add(anggaran)
if not induk:
induk = tabel()
induk.tahun = str(tahun)
induk.kode = row.kode
induk.departemen_kd = departemen_kd
induk.tanggal = tanggal
induk.departemen_nm = departemen_nm
induk.level_id = row.kode.count('.')
induk.nama = row.nama
EisDBSession.add(induk)
EisDBSession.flush()
EisDBSession.commit()
def import_ap(all=False):
query = DBSession.query(Realisasi)
if not all:
query = query.filter_by(tanggal=tanggal)
query = query.filter(Realisasi.kd_rekening.like('5.%'))
for row in query.filter(Realisasi.kd_rekening.like('5%')).all():
eis = EisDBSession.query(ArPayment).\
for row in query.all():
eis = EisDBSession.query(EisApPayment).\
filter_by(tahun = row.tahun,
rekening_kd = row.kd_rekening,
kode = row.kd_rekening,
departemen_kd = row.kd_opd,
tanggal = tanggal,
tanggal = row.tanggal,
).first()
if not eis:
eis = EisApPayment()
eis.tahun = row.tahun
eis.kode = row.kd_rekening
eis.departemen_kd = row.kd_opd
eis.tanggal = tanggal
eis.tanggal = row.tanggal
eis.level_id = row.kd_rekening.count('.')
eis.nama = row.nm_rekening
eis.departemen_nm = row.nm_opd
eis.jumlah = row.realisai
eis.jumlah = row.realisasi
EisDBSession.add(eis)
EisDBSession.flush()
validate_parent(EisApPayment, eis.departemen_kd, eis.departemen_nm, eis.kode, eis.tanggal)
EisDBSession.commit()
def import_by(all=False):
......@@ -93,8 +121,8 @@ def import_by(all=False):
if not all:
query = query.filter_by(tanggal=tanggal)
for row in query.filter(Realisasi.kd_rekening.like('6%')).all():
eis = EisDBSession.query(ArPayment).\
for row in query.filter(Realisasi.kd_rekening.like('6.%')).all():
eis = EisDBSession.query(EisByPayment).\
filter_by(tahun = row.tahun,
rekening_kd = row.kd_rekening,
departemen_kd = row.kd_opd,
......@@ -112,9 +140,11 @@ def import_by(all=False):
eis.jumlah = row.realisai
EisDBSession.add(eis)
EisDBSession.flush()
validate_parent(EisByPayment, eis.departemen_kd, eis.departemen_nm, eis.kode)
EisDBSession.commit()
EisDBSession.commit()
import_anggaran()
import_ap()
import_ar()
\ No newline at end of file
import_ap(True)
import_by(True)
calculate(EisApPayment,True)
calculate(EisByPayment,True)
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!