Commit f8dbc008 by aa.gusti

webr

1 parent 582299fd
from models_sipkd import Realisasi, Base, DBSession
from models_eis import (ApPayment as EisApPayment,
ByPayment as EisByPayment,
Rekening as EisRekening,
EisBase, EisDBSession)
from conf import sipkd_url
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
Base.metadata.create_all(engine)
now = datetime.now()
tanggal = now.date()
tahun = now.strftime('%Y')
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)
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.strip(),
departemen_kd = departemen_kd.strip(),
).first()
if not induk:
induk = tabel()
induk.tahun = str(tahun)
induk.kode = row.kode.strip()
induk.departemen_kd = departemen_kd.strip()
induk.tanggal = tanggal
induk.departemen_nm = departemen_nm.strip()
induk.level_id = row.kode.count('.')
induk.nama = row.nama.strip()
EisDBSession.add(induk)
EisDBSession.flush()
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.all():
eis = EisDBSession.query(EisApPayment).\
filter_by(tahun = str(row.tahun),
kode = row.kd_rekening.strip(),
departemen_kd = row.kd_opd.strip(),
tanggal = row.tanggal,
).first()
if not eis:
eis = EisApPayment()
eis.tahun = str(row.tahun)
eis.kode = row.kd_rekening.strip()
eis.departemen_kd = row.kd_opd.strip()
eis.tanggal = row.tanggal
eis.level_id = row.kd_rekening.count('.')
eis.nama = row.nm_rekening.strip()
eis.departemen_nm = row.nm_opd.strip()
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):
query = DBSession.query(Realisasi)
if not all:
query = query.filter_by(tanggal=tanggal)
for row in query.filter(Realisasi.kd_rekening.like('6.%')).all():
eis = EisDBSession.query(EisByPayment).\
filter_by(tahun = str(row.tahun),
kode = row.kd_rekening.strip(),
departemen_kd = row.kd_opd.strip(),
tanggal = tanggal,
).first()
if not eis:
eis = EisByPayment()
eis.tahun = str(row.tahun)
eis.kode = row.kd_rekening.strip()
eis.departemen_kd = row.kd_opd.strip()
eis.tanggal = tanggal
eis.level_id = row.kd_rekening.count('.')
eis.nama = row.nm_rekening.strip()
eis.departemen_nm = row.nm_opd.strip()
eis.jumlah = row.realisasi
EisDBSession.add(eis)
EisDBSession.flush()
validate_parent(EisByPayment, eis.departemen_kd, eis.departemen_nm, eis.kode)
EisDBSession.commit()
EisDBSession.commit()
#import_ap(True)
import_by(True)
calculate(EisApPayment,True)
calculate(EisByPayment,True)
from models_webr import Realisasi, Base as WebrBase, DBSession as WebrDBSession
from models_eis import (ArPayment as EisArPayment,
ByPayment as EisByPayment,
Rekening as EisRekening,
EisBase, EisDBSession)
from conf import webr_url as url
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
from models_webr import (ArInvoice as Invoice, ArSspd as Realisasi,
WebrDBSession as DBSession)
now = datetime.now()
tanggal = now.date()
tahun = now.strftime('%Y')
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)
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.strip(),
departemen_kd = departemen_kd.strip(),
).first()
if not induk:
induk = tabel()
induk.tahun = str(tahun)
induk.kode = row.kode.strip()
induk.departemen_kd = departemen_kd.strip()
induk.tanggal = tanggal
induk.departemen_nm = departemen_nm.strip()
induk.level_id = row.kode.count('.')
induk.nama = row.nama.strip()
EisDBSession.add(induk)
EisDBSession.flush()
def import_ar(all=False):
query = DBSession.query(Invoice.unit_kode, Invoice.unit_nama,
Invoice.rek_kode, Invoice.rek_nama,
Realisasi.tgl_bayar,
func.sum(Realisasi.bunga).label('bunga'),
func.sum(Realisasi.bayar).label('bayar'),
).\
join(Invoice, (Realisasi.arinvoice_id = Invoice.id))
if not all:
query = query.filter(Realisasi.tgl_bayar == tanggal)
for row in query.all():
eis = EisDBSession.query(EisArPayment).\
filter_by(tahun = str(tahun),
kode = row.rek_kode.strip(),
departemen_kd = row.unit_kode.strip(),
tanggal = row.tanggal.date(),
).first()
if not eis:
eis = EisArPayment()
eis.tahun = str(row.tahun)
eis.kode = row.rek_kode.strip()
eis.departemen_kd = row.unit_kode.strip()
eis.tanggal = row.tanggal.date()
eis.level_id = row.kd_rekening.count('.')
eis.nama = row.rek_nama.strip()
eis.departemen_nm = row.unit_nama.strip()
eis.jumlah = row.bayar - row.denda
EisDBSession.add(eis)
if row.denda:
pass
# TODO
# eis = EisDBSession.query(EisArPayment).\
# filter_by(tahun = str(tahun),
# kode = row.rek_kode.strip(),
# departemen_kd = row.unit_kode.strip(),
# tanggal = row.tanggal.date(),
# ).first()
# if not eis:
# eis = EisArPayment()
# eis.tahun = str(row.tahun)
# eis.kode = row.rek_kode.strip()
# eis.departemen_kd = row.unit_kode.strip()
# eis.tanggal = row.tanggal.date()
# eis.level_id = row.kd_rekening.count('.')
# eis.nama = row.rek_nama.strip()
# eis.departemen_nm = row.unit_nama.strip()
# eis.jumlah = row.bayar - row.denda
# EisDBSession.add(eis)
EisDBSession.flush()
validate_parent(EisArPayment, eis.departemen_kd, eis.departemen_nm, eis.kode, eis.tanggal)
EisDBSession.commit()
import_ar(True)
calculate(EisArPayment,True)
from datetime import datetime
from sqlalchemy import (
Column,
Integer,
BigInteger,
SmallInteger,
Text,
DateTime,
String,
UniqueConstraint,
ForeignKey,
Index,
create_engine,
)
Base = declarative_base()
DBSession = scoped_session(sessionmaker())
class CommonModel(object):
def to_dict(self): # Elixir like
values = {}
for column in self.__table__.columns:
values[column.name] = getattr(self, column.name)
return values
def from_dict(self, values):
for column in self.__table__.columns:
if column.name in values:
setattr(self, column.name, values[column.name])
def as_timezone(self, fieldname):
date_ = getattr(self, fieldname)
return date_ and as_timezone(date_) or None
class DefaultModel(CommonModel):
id = Column(Integer, primary_key=True)
@classmethod
def query(cls):
return DBSession.query(cls)
@classmethod
def query_id(cls, id):
return cls.query().filter_by(id=id)
@classmethod
def delete(cls, id):
cls.query_id(id).delete()
@classmethod
def count(cls):
return DBSession.query(func.count('id')).scalar()
class KodeModel(DefaultModel):
kode = Column(String(32))
status = Column(SmallInteger, nullable=False, default=0)
created = Column(DateTime, nullable=True, default=datetime.utcnow)
updated = Column(DateTime, nullable=True)
create_uid = Column(Integer, nullable=True, default=1)
update_uid = Column(Integer, nullable=True)
@classmethod
def query_kode(cls,kode):
return cls.query().filter_by(kode=kode)
@classmethod
def get_active(cls):
return cls.query().filter_by(status=1).all()
class NamaModel(KodeModel):
nama = Column(String(128))
@classmethod
def query_nama(cls, nama):
return cls.query().filter_by(nama=nama)
...@@ -21,6 +21,8 @@ from sqlalchemy.orm import ( ...@@ -21,6 +21,8 @@ from sqlalchemy.orm import (
relationship, backref relationship, backref
) )
from models_default import (DefaultModel as BaseDefaultModel,
NamaModel)
from conf import eis_url from conf import eis_url
EisBase = declarative_base() EisBase = declarative_base()
EisDBSession = scoped_session(sessionmaker()) EisDBSession = scoped_session(sessionmaker())
...@@ -31,63 +33,14 @@ EisBase.metadata.bind = engine ...@@ -31,63 +33,14 @@ EisBase.metadata.bind = engine
TABLE_ARGS = {'extend_existing':True, TABLE_ARGS = {'extend_existing':True,
'schema':'eis' 'schema':'eis'
} }
class CommonModel(object): class DefaultModel(BaseDefaultModel):
def to_dict(self): # Elixir like
values = {}
for column in self.__table__.columns:
values[column.name] = getattr(self, column.name)
return values
def from_dict(self, values):
for column in self.__table__.columns:
if column.name in values:
setattr(self, column.name, values[column.name])
def as_timezone(self, fieldname):
date_ = getattr(self, fieldname)
return date_ and as_timezone(date_) or None
class DefaultModel(CommonModel):
id = Column(Integer, primary_key=True)
@classmethod @classmethod
def query(cls): def query(cls):
return EisDBSession.query(cls) return EisDBSession.query(cls)
@classmethod
def query_id(cls, id):
return cls.query().filter_by(id=id)
@classmethod
def delete(cls, id):
cls.query_id(id).delete()
@classmethod @classmethod
def count(cls): def count(cls):
return EisDBSession.query(func.count('id')).scalar() return EisDBSession.query(func.count('id')).scalar()
class KodeModel(DefaultModel):
kode = Column(String(32))
status = Column(SmallInteger, nullable=False, default=0)
created = Column(DateTime, nullable=True, default=datetime.utcnow)
updated = Column(DateTime, nullable=True)
create_uid = Column(Integer, nullable=True, default=1)
update_uid = Column(Integer, nullable=True)
@classmethod
def query_kode(cls,kode):
return cls.query().filter_by(kode=kode)
@classmethod
def get_active(cls):
return cls.query().filter_by(status=1).all()
class NamaModel(KodeModel):
nama = Column(String(128))
@classmethod
def query_nama(cls, nama):
return cls.query().filter_by(nama=nama)
class Anggaran(NamaModel, EisBase): class Anggaran(NamaModel, EisBase):
__tablename__ = 'sipkd_anggaran' __tablename__ = 'sipkd_anggaran'
tahun = Column(String(4)) tahun = Column(String(4))
......
from datetime import datetime
from sqlalchemy import (
Column,
Integer,
BigInteger,
SmallInteger,
Text,
DateTime,
String,
UniqueConstraint,
ForeignKey,
Index,
create_engine,
)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm.exc import NoResultFound
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)
WebrBase.metadata.bind = engine
from models_default import (DefaultModel as BaseDefaultModel,
NamaModel)
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))
subjekpajaks = relationship("SubjekPajak", backref=backref('arinvoices'))
objekpajaks = relationship("ObjekPajak", backref=backref('arinvoices'))
wilayahs = relationship("Wilayah", backref=backref('arinvoices'))
units = relationship("Unit", backref=backref('arinvoices'))
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'))
units = relationship("Unit", backref=backref('arsspds'))
UniqueConstraint(arinvoice_id,pembayaran_ke,name='arsspd_uq')
UniqueConstraint(tahun_id,unit_id,name='arsspd_no_uq')
\ No newline at end of file \ 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!