Commit 8542e1b0 by Owo Sugiana

Tambah Kota Tangerang

1 parent 8aa50116
0.5.7 2024-03-14
----------------
- Tambah Kota Tangerang
0.5.6 2024-03-04
----------------
- Kabupaten Kuningan menggunakan PAD versi 2
......
from sqlalchemy import (
Column,
Integer,
String,
DateTime,
Float,
Boolean,
Date,
Text,
Time,
ForeignKey,
UniqueConstraint,
)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Kecamatan(Base):
__tablename__ = 'pad_kecamatan'
id = Column(Integer, primary_key=True)
kode = Column(String(3), nullable=False, unique=True)
nama = Column(String(50))
tmt = Column(DateTime)
enabled = Column(Integer)
created = Column(DateTime)
create_uid = Column(Integer)
updated = Column(DateTime)
update_uid = Column(Integer)
zona_id = Column(Integer, nullable=False)
kode_kemendagri = Column(Integer)
__table_args__ = dict(schema='pad')
class Kelurahan(Base):
__tablename__ = 'pad_kelurahan'
id = Column(Integer, primary_key=True)
kecamatan_id = Column(Integer, ForeignKey(Kecamatan.id), nullable=False)
kode = Column(String(3), nullable=False)
nama = Column(String(25))
tmt = Column(DateTime)
enabled = Column(Integer)
created = Column(DateTime)
create_uid = Column(Integer)
updated = Column(DateTime)
update_uid = Column(Integer)
kualitas_air = Column(String(20))
sumber_alternatif = Column(String(20))
__table_args__ = (
UniqueConstraint('kecamatan_id', 'kode'),
dict(schema='pad'))
class Rekening(Base):
__tablename__ = 'pad_rekening'
id = Column(Integer, primary_key=True)
kode = Column(String(15), nullable=False, unique=True)
nama = Column(String(150))
levelid = Column(Integer)
issummary = Column(Integer, nullable=False)
defsign = Column(Integer)
isppkd = Column(Integer, nullable=False)
tmt = Column(DateTime)
enabled = Column(Integer)
created = Column(DateTime)
create_uid = Column(Integer)
updated = Column(DateTime)
update_uid = Column(Integer)
insidentil = Column(Integer)
usaha_id = Column(Integer)
__table_args__ = dict(schema='pad')
class Usaha(Base):
__tablename__ = 'pad_usaha'
id = Column(Integer, primary_key=True)
nama = Column(String(50), nullable=False)
so = Column(String(1))
tmt = Column(DateTime)
enabled = Column(Integer)
created = Column(DateTime)
create_uid = Column(Integer)
updated = Column(DateTime)
update_uid = Column(Integer)
__table_args__ = dict(schema='pad')
class Pajak(Base):
__tablename__ = 'pad_jenis_pajak'
id = Column(Integer, primary_key=True)
usaha_id = Column(Integer, ForeignKey(Usaha.id), nullable=False)
nama = Column(String(100))
rekening_id = Column(Integer, ForeignKey(Rekening.id), nullable=False)
rekening_kd_sub = Column(String(5))
rekdenda_id = Column(Integer)
masapajak = Column(Integer, nullable=False)
jatuhtempo = Column(Integer)
multiple = Column(Integer)
jalan_kelas_id = Column(Integer)
tmt = Column(DateTime)
enabled = Column(Integer)
created = Column(DateTime)
create_uid = Column(Integer)
updated = Column(DateTime)
update_uid = Column(Integer)
__table_args__ = (
UniqueConstraint('rekening_id', 'rekening_kd_sub'),
dict(schema='pad'))
class Customer(Base):
__tablename__ = 'pad_customer'
id = Column(Integer, primary_key=True)
parent = Column(Integer)
npwpd = Column(String(25))
rp = Column(String(1))
pb = Column(Integer)
formno = Column(Integer, nullable=False)
reg_date = Column(DateTime)
nama = Column(String(255))
kecamatan_id = Column(Integer, ForeignKey(Kecamatan.id))
kelurahan_id = Column(Integer, ForeignKey(Kelurahan.id))
kabupaten = Column(String(25))
alamat = Column(String(255))
kodepos = Column(String(5))
telphone = Column(String(50))
wpnama = Column(String(255))
wpalamat = Column(String(255))
wpkelurahan = Column(String(25))
wpkecamatan = Column(String(25))
wpkabupaten = Column(String(25))
wptelp = Column(String(50))
wpkodepos = Column(String(5))
pnama = Column(String(255))
palamat = Column(String(255))
pkelurahan = Column(String(25))
pkecamatan = Column(String(25))
pkabupaten = Column(String(25))
ptelp = Column(String(50))
pkodepos = Column(String(5))
ijin1 = Column(String(100))
ijin1no = Column(String(100))
ijin1tgl = Column(DateTime)
ijin1tglakhir = Column(DateTime)
ijin2 = Column(String(100))
ijin2no = Column(String(100))
ijin2tgl = Column(DateTime)
ijin2tglakhir = Column(DateTime)
ijin3 = Column(String(100))
ijin3no = Column(String(100))
ijin3tgl = Column(DateTime)
ijin3tglakhir = Column(DateTime)
ijin4 = Column(String(100))
ijin4no = Column(String(100))
ijin4tgl = Column(DateTime)
ijin4tglakhir = Column(DateTime)
kukuhno = Column(String(30))
kukuhnip = Column(Integer)
kukuhtgl = Column(DateTime)
kukuh_jabat_id = Column(Integer)
kukuhprinted = Column(Integer)
enabled = Column(Integer)
create_uid = Column(Integer)
tmt = Column(DateTime)
customer_status_id = Column(Integer)
kembalitgl = Column(DateTime)
kembalioleh = Column(String(30))
kartuprinted = Column(Integer)
kembalinip = Column(Integer)
penerimanm = Column(String(50))
penerimaalamat = Column(String(50))
penerimatgl = Column(DateTime)
catatnip = Column(Integer)
kirimtgl = Column(DateTime)
batastgl = Column(DateTime)
petugas_jabat_id = Column(Integer)
pencatat_jabat_id = Column(Integer)
created = Column(DateTime)
updated = Column(DateTime)
update_uid = Column(Integer)
npwpd_old = Column(String(50))
id_old = Column(Integer)
posted = Column(Integer, nullable=False)
id_reg_customer = Column(Integer)
id_reg_email_wp = Column(Integer)
filename1 = Column(String(200))
filename2 = Column(String(200))
filename3 = Column(String(200))
filename4 = Column(String(200))
email_wp = Column(String(50))
wpemail = Column(String(100))
pemail = Column(String(100))
jenis_usaha_nib = Column(String(250))
__table_args__ = (
UniqueConstraint(
'rp', 'pb', 'formno', 'kecamatan_id', 'kelurahan_id', 'kukuhtgl'),
dict(schema='pad'))
class CustomerUsaha(Base):
__tablename__ = 'pad_customer_usaha'
id = Column(Integer, primary_key=True)
konterid = Column(Integer, nullable=False)
reg_date = Column(DateTime)
customer_id = Column(Integer, ForeignKey(Customer.id), nullable=False)
usaha_id = Column(Integer, ForeignKey(Usaha.id), nullable=False)
so = Column(String(1))
kecamatan_id = Column(Integer, ForeignKey(Kecamatan.id))
kelurahan_id = Column(Integer, ForeignKey(Kelurahan.id))
notes = Column(String(250))
enabled = Column(Integer)
create_uid = Column(Integer)
customer_status_id = Column(Integer)
aktifnotes = Column(String(500))
tmt = Column(DateTime)
air_zona_id = Column(Integer)
air_manfaat_id = Column(Integer)
def_pajak_id = Column(Integer)
opnm = Column(String(255))
opalamat = Column(String(255))
latitude = Column(Float)
longitude = Column(Float)
created = Column(DateTime)
updated = Column(DateTime)
update_uid = Column(Integer)
kd_restojmlmeja = Column(Integer)
kd_restojmlkursi = Column(Integer)
kd_restojmltamu = Column(Integer)
kd_filmkursi = Column(Integer)
kd_filmpertunjukan = Column(Integer)
kd_filmtarif = Column(Float)
kd_bilyarmeja = Column(Integer)
kd_bilyartarif = Column(Float)
kd_bilyarkegiatan = Column(Integer)
kd_diskopengunjung = Column(Integer)
kd_diskotarif = Column(Float)
mall_id = Column(Integer)
cash_register = Column(Integer)
pelaporan = Column(Integer)
pembukuan = Column(Integer)
bandara = Column(Integer)
wajib_pajak = Column(Integer)
jumlah_karyawan = Column(Integer)
tanggal_tutup = Column(DateTime)
parkir_luas = Column(Integer)
parkir_masuk = Column(Integer)
parkir_tarif_mobil = Column(Float)
parkir_tambahan = Column(Float)
parkir_kapasitas_mobil = Column(Integer)
parkir_mobil_hari = Column(Integer)
parkir_keluar = Column(Integer)
parkir_motor_luas = Column(Integer)
parkir_motor_masuk = Column(Integer)
parkir_motor_keluar = Column(Integer)
parkir_tarif_motor = Column(Float)
parkir_motor_tambahan = Column(Float)
parkir_kapasitas_motor = Column(Integer)
parkir_motor_hari = Column(Integer)
kelompok_usaha_id = Column(Integer)
zona_id = Column(Integer)
manfaat_id = Column(Integer)
golongan_id = Column(Integer)
id_old = Column(Integer)
id_reg_customer_usaha = Column(Integer)
pengukuhan = Column(String(10))
key_unik = Column(String(200))
filepengukuhanpdf = Column(String(150))
ijin1 = Column(String(100))
ijin1no = Column(String(100))
ijin1tgl = Column(DateTime)
ijin1tglakhir = Column(DateTime)
ijin2 = Column(String(100))
ijin2no = Column(String(100))
ijin2tgl = Column(DateTime)
ijin2tglakhir = Column(DateTime)
ijin3 = Column(String(100))
ijin3no = Column(String(100))
ijin3tgl = Column(DateTime)
ijin3tglakhir = Column(DateTime)
ijin4 = Column(String(100))
ijin4no = Column(String(100))
ijin4tgl = Column(DateTime)
ijin4tglakhir = Column(DateTime)
filename1 = Column(String(300))
filename2 = Column(String(300))
filename3 = Column(String(300))
filename4 = Column(String(300))
tappingbox = Column(Integer)
jumlahalat = Column(Integer)
rpnama = Column(String(150))
rpalamat = Column(String(300))
rpkecamatan = Column(String(25))
rpkelurahan = Column(String(35))
rpkota = Column(String(20))
rpkodepos = Column(String(6))
rptelp = Column(String(15))
kelompok_usaha_id_new = Column(Integer)
air_tanah_factor_id = Column(Integer)
rstrmedia = Column(Integer)
__table_args__ = (
UniqueConstraint('konterid', 'customer_id', 'usaha_id'),
dict(schema='pad'))
class Invoice(Base):
__tablename__ = 'pad_invoice'
id = Column(Integer, primary_key=True)
source_id = Column(Integer)
source_nama = Column(String(100))
tahun = Column(Integer)
usaha_id = Column(Integer)
invoice_no = Column(Integer)
jenis_usaha = Column(String(100))
jenis_pajak = Column(String(100))
npwpd = Column(String(100))
nama_wp = Column(String(150))
alamat_wp = Column(String(500))
nama_op = Column(String(150))
alamat_op = Column(String(500))
nomor_tagihan = Column(String(15))
pokok = Column(Float)
denda = Column(Float)
bunga = Column(Float)
total = Column(Float)
status_bayar = Column(Integer)
jatuh_tempo = Column(DateTime)
periode = Column(String(15))
rekening_pokok = Column(String(15))
rekening_denda = Column(String(15))
nama_pokok = Column(String(150))
nama_denda = Column(String(150))
create_uid = Column(Integer)
update_uid = Column(Integer)
nopd = Column(String(200))
tanggal_invoice = Column(DateTime)
doc_type_id = Column(Integer)
no_virtual_account = Column(String(15))
no_virtual_account_pemohon = Column(String(18))
expired_virtual_account = Column(DateTime)
pembayaran_melalui = Column(String(20))
status_pembayaran = Column(Integer)
bjb_response = Column(Text)
bjb_token = Column(String(200))
bjb_inquiry = Column(Text)
bjb_inquiry_response_code = Column(String(10))
bjb_callback = Column(Text)
client_refnum = Column(String(50))
id_pembayaran = Column(String(30))
execution_time = Column(String(150))
va_bunga_amount = Column(Float)
va_total_amount = Column(Float)
string_qr = Column(Text)
reference_qr = Column(Text)
invoice_qr = Column(Text)
file_qr = Column(Text)
amount_qr = Column(Integer)
expired_qr = Column(DateTime)
jsoncallback_qr = Column(Text)
update_at_qr = Column(DateTime)
merchantname = Column(String(100))
transactionreference = Column(String(255))
paymentreference = Column(String(255))
merchantmsisdn = Column(String(20))
merchantemail = Column(String(100))
merchantmpan = Column(String(100))
rrn = Column(String(100))
json_body = Column(Text)
customername = Column(String(200))
denda_qr = Column(Integer)
transactiondate = Column(DateTime)
merchantbalance = Column(Integer)
transactionamount = Column(Integer)
class Kohir(Base):
__tablename__ = 'pad_kohir'
id = Column(Integer, primary_key=True)
tahun = Column(Integer, nullable=False)
usaha_id = Column(Integer)
kohirno = Column(Integer, nullable=False)
kohirtgl = Column(DateTime, nullable=False)
spt_id = Column(Integer, primary_key=True)
enabled = Column(Integer)
created = Column(DateTime)
create_uid = Column(Integer)
updated = Column(DateTime)
update_uid = Column(Integer)
petugas_id = Column(Integer)
pejabat_id = Column(Integer)
type_id = Column(Integer)
pejabat_penetap_id = Column(Integer)
kohir_count = Column(Integer)
kohir_status = Column(Integer)
kohir_type = Column(Integer)
__table_args__ = (
UniqueConstraint(tahun, usaha_id, type_id, kohirno, spt_id),)
class Payment(Base):
__tablename__ = 'pad_sspd'
id = Column(Integer, primary_key=True)
tahun = Column(Integer, nullable=False)
sspdno = Column(Integer, nullable=False)
sspdtgl = Column(DateTime, nullable=False)
invoice_id = Column(Integer, ForeignKey(Invoice.id), nullable=False)
keterangan = Column(String(255))
bulan_telat = Column(Integer)
hitung_bunga = Column(Integer)
denda = Column(Float)
bunga = Column(Float)
jml_bayar = Column(Integer)
sisa = Column(Float)
jenis_bayar = Column(Integer)
is_valid = Column(Integer)
enabled = Column(Integer)
created_at = Column(DateTime)
petugas_id = Column(Integer)
pejabat_id = Column(Integer)
__table_args__ = (
UniqueConstraint(tahun, sspdno),
dict(schema='pad'))
class SptType(Base):
__tablename__ = 'pad_spt_type'
id = Column(Integer, primary_key=True)
nama = Column(String(20), nullable=False)
enabled = Column(Integer)
__table_args__ = (
dict(schema='pad'),)
......@@ -83,6 +83,7 @@ def show(inq):
show_rp('Total Bayar', inq.total_bayar)
show_rp('Total Tagihan', inq.total)
show_field(inq.invoice, 'status_pembayaran')
show_field(inq.invoice, 'status_bayar')
if inq.total_bayar:
pay = inq.get_payment()
show_field(pay, 'sspdtgl')
......
......@@ -191,7 +191,7 @@ class BaseInquiry:
self.rekening = self.get_rekening()
self.kelurahan = self.get_kelurahan()
self.kecamatan = self.get_kecamatan()
if self.rekening.rekeningkd in self.conf['rekening_notes']:
if self.get_kode_rekening() in self.conf['rekening_notes']:
alamat = wrap(upper(self.invoice.notes), 40)
if alamat[1:]:
self.alamat1 = alamat[0]
......@@ -485,6 +485,7 @@ class AvailableInvoice:
return q
def get_filter_tahun(self, q):
Invoice = self.get_invoice_model()
if self.option.tahun:
return q.filter(Invoice.tahun == self.option.tahun)
return q
......
from datetime import (
datetime,
date,
)
from calendar import monthrange
from textwrap import wrap
from sqlalchemy import func
from opensipkd.hitung import round_up
from opensipkd.string import FixLength
from opensipkd.string.money import thousand
from ..models.tangerang_kota import (
Rekening,
Pajak,
Invoice,
Customer,
CustomerUsaha,
Kecamatan,
Kelurahan,
Payment,
SptType,
)
from .base import (
get_db_session,
upper,
)
from .default import (
Inquiry as BaseInquiry,
AvailableInvoice as BaseAvailableInvoice,
date_from_str,
)
INVOICE_ID = [
('Tahun', 4, 'N'),
('Usaha', 2, 'N'),
('Urutan', 5, 'N')]
masadari_office_2020 = date(2020, 4, 1)
masasd_office_2020 = date(2022, 3, 31)
masadari_office_sebelum_2020 = date(2020, 4, 1)
masasd_office_sebelum_2020 = date(2022, 3, 31)
pay_skpdkb_awal = date(2020, 9, 1)
pay_skpdkb_akhir = date(2022, 5, 31)
tap_skpdkb_awal = date(2009, 1, 1)
tap_skpdkb_akhir = date(2022, 3, 31)
pay_awal = date(2020, 9, 1)
pay_akhir = date(2022, 5, 31)
masadari_self_2020 = date(2020, 4, 1)
masasd_self_2020 = date(2022, 3, 31)
reklame_id = 4
airtanah_id = 7
pajak_self = [
1, # Hotel
2, # Restoran
3, # Hiburan
5, # Penerangan Jalan
6, # Parkir
]
doc_type_id = [5]
class Inquiry(BaseInquiry):
invoice_id_structure = INVOICE_ID
def __init__(self, invoice_id, conf, tgl_bayar=None):
self.conf = conf
self.invoice_id_raw = invoice_id
self.invoice_id = FixLength(INVOICE_ID)
self.invoice_id.set_raw(invoice_id)
self.invoice = self.get_invoice()
if not self.invoice:
return
self.notes = []
self.tgl_bayar = tgl_bayar or datetime.now()
self.set_profile()
self.hitung()
def get_invoice(self):
DBSession = get_db_session()
q = DBSession.query(Invoice).filter_by(
nomor_tagihan=self.invoice_id_raw)
return q.first()
def get_payment(self): # Override
DBSession = get_db_session()
q = DBSession.query(Payment).filter_by(invoice_id=self.invoice.id)
q = q.order_by(Payment.id.desc())
return q.first()
def hitung_tagihan(self): # Override
self.tagihan = self.discount_denda = self.total_bayar = 0
if self.invoice.status_bayar == 1:
return
if self.invoice.status_pembayaran == 1:
return
total = float(self.invoice.total or 0)
bunga = float(self.invoice.bunga or 0)
pokok_tagihan = total - bunga
self.tagihan = round_up(pokok_tagihan - self.invoice.denda)
def hitung_denda(self): # Override
type_id = self.invoice.doc_type_id
thnskp = self.invoice.tahun
tglskp = self.invoice.tanggal_invoice.date()
yyyy = int(self.invoice.periode[0:4])
mm = int(self.invoice.periode[4:6])
masa = date(yyyy, mm, 1)
tgl_bayar = self.tgl_bayar.date()
usahaid = self.invoice.usaha_id
if (
type_id in doc_type_id and tglskp >= tap_skpdkb_awal and
tglskp <= tap_skpdkb_akhir and
tgl_bayar >= pay_skpdkb_awal and
tgl_bayar <= pay_skpdkb_akhir) or (
thnskp == 2021 and tglskp >= masadari_office_2020 and
tglskp <= masasd_office_2020 and usahaid == reklame_id and
kini >= pay_awal and self.tgl_bayar <= pay_akhir) or (
thnskp >= 2020 and tglskp >= masadari_office_sebelum_2020 and
tglskp <= masasd_office_sebelum_2020 and
usahaid == reklame_id and self.tgl_bayar >= pay_awal and
self.tgl_bayar <= pay_akhir) or (
masa >= masadari_self_2020 and masa <= masasd_self_2020 and
usahaid == airtanah_id and self.tgl_bayar >= pay_awal and
self.tgl_bayar <= pay_akhir):
self.denda = round_up(self.invoice.denda)
self.bln_tunggakan = None
else:
self.bln_tunggakan, denda = self.hitung_denda_waktu()
self.denda = round_up(
self.invoice.bunga + self.invoice.denda + denda)
def hitung_denda_waktu(self):
jatuh_tempo = self.invoice.jatuh_tempo
x = (self.tgl_bayar.year - jatuh_tempo.year) * 12
y = self.tgl_bayar.month - jatuh_tempo.month
bln_tunggakan = x + y + 1
if self.tgl_bayar.day <= jatuh_tempo.day:
bln_tunggakan -= 1
if bln_tunggakan < 1:
bln_tunggakan = 0
tahun_terbit = int(self.invoice.periode[0:4])
if tahun_terbit < 2024:
persen = 2
type_ = self.get_type_name()
if type_:
type_ = type_.strip()
if type_ in ('SSPD', 'SELF', 'SKPD'):
persen = 1
elif type_ in ('SKPDKB', 'SKPDKB', 'STPD', 'ANGSURAN'):
persen = 0.6
else:
persen = self.conf['persen_denda']
persen = bln_tunggakan * persen
if persen > 48:
persen = 48
denda = persen / 100 * self.tagihan
return bln_tunggakan, denda
def get_payment_amount(self): # Override
DBSession = get_db_session()
q = DBSession.query(func.sum(Payment.jml_bayar))
q = q.filter_by(invoice_id=self.invoice.id)
return q.scalar() or 0
def get_masa_1(self, fmt='%d%m%Y'):
s = self.invoice.periode + '01'
tgl = datetime.strptime(s, '%Y%m%d')
return tgl.strftime(fmt)
def get_masa_2(self, fmt='%d%m%Y'):
tahun = self.invoice.periode[:4]
bulan = self.invoice.periode[4:]
tgl_akhir = monthrange(int(tahun), int(bulan))[1]
s = self.invoice.periode + str(tgl_akhir).zfill(2)
tgl = datetime.strptime(s, '%Y%m%d')
return tgl.strftime(fmt)
def get_tgl_kohir(self):
pass
def get_kode_rekening(self):
return self.invoice.rekening_pokok
def get_nama_rekening(self):
return self.invoice.nama_pokok
def get_jenis_usaha(self):
pass
def get_nama_jenis_usaha(self):
pass
def is_self(self):
pass
def get_npwp(self):
return self.invoice.npwpd
def get_nama(self):
return self.invoice.nama_wp
def get_alamat_wp(self):
return self.invoice.alamat_wp
def get_kode_pos_wp(self):
pass
def get_alamat_op(self):
return self.invoice.alamat_op
def get_kelurahan_op(self):
pass
def get_kecamatan_op(self):
pass
def get_jatuh_tempo(self):
return self.invoice.jatuh_tempo
def set_profile(self):
alamat = wrap(upper(self.get_alamat_wp()), 40)
self.alamat1 = alamat[0]
self.alamat2 = alamat[1:] and ' '.join(alamat[1:]) or ''
self.alamat2 = self.alamat2
def get_kecamatan_model(self): # Override
return Kecamatan
def get_kelurahan_model(self): # Override
return Kelurahan
def get_rekening_model(self): # Override
return Rekening
def get_pajak_model(self): # Override
return Pajak
def get_invoice_model(self): # Override
return Invoice
def get_customer_model(self): # Override
return Customer
def get_customer_usaha_model(self): # Override
return CustomerUsaha
def get_payment_model(self): # Override
return Payment
def get_type_model(self): # Override
return SptType
def get_type(self): # Override
DBSession = get_db_session()
SptType = self.get_type_model()
q = DBSession.query(SptType).filter_by(id=self.invoice.doc_type_id)
return q.first()
def get_type_name(self): # Override
t = self.get_type()
return t and t.nama
def do_payment(self, ntb):
Payment = self.get_payment_model()
sspdno = self.get_pay_seq()
kini = datetime.now()
pay = Payment(
tahun=self.invoice.tahun,
sspdno=sspdno,
invoice_id=self.invoice.id,
created_at=kini,
sspdtgl=self.tgl_bayar,
denda=self.denda,
bunga=self.denda,
jml_bayar=self.total,
sisa=0,
keterangan='Pembayaran melalui H2H',
enabled=1,
is_valid=1,
jenis_bayar=1)
self.invoice.status_pembayaran = 1
self.invoice.status_bayar = 1
DBSession = get_db_session()
DBSession.add(pay)
DBSession.add(self.invoice)
DBSession.flush()
return pay
class AvailableInvoice(BaseAvailableInvoice):
def get_invoice_model(self): # Override
return Invoice
def get_query(self): # Override
DBSession = get_db_session()
q = DBSession.query(Invoice.nomor_tagihan, Invoice.tahun)
q = q.filter(Invoice.status_bayar == 0)
q = self.get_filter_tahun(q)
q = self.get_filter_rekening(q)
q = self.get_filter_usaha(q)
q = self.get_filter_nominal(q)
q = self.get_filter_jatuh_tempo(q)
q = self.get_filter_masa(q)
q = self.get_filter_tgl_terima(q)
q = self.get_filter_kohir(q)
q = self.get_filter_type(q)
return q
def get_filter_nominal(self, q):
if self.option.nominal_min:
q = q.filter(
Invoice.total >=
self.option.nominal_min)
if self.option.nominal_max:
q = q.filter(
Invoice.total <=
self.option.nominal_max)
return q
def get_filter_rekening(self, q):
if self.option.rekening:
q = q.filter(Invoice.rekening_pokok == self.option.rekening)
return q
def get_filter_jatuh_tempo(self, q):
if self.option.jatuh_tempo_min:
tgl = date_from_str(self.option.jatuh_tempo_min)
q = q.filter(Invoice.jatuh_tempo >= tgl)
if self.option.jatuh_tempo_max:
tgl = date_from_str(self.option.jatuh_tempo_max)
q = q.filter(Invoice.jatuh_tempo <= tgl)
return q
def get_invoice_id(self, row):
return row.nomor_tagihan
def get_message(self, row):
inq = Inquiry(row.nomor_tagihan, self.conf)
if not inq.invoice:
return
if not inq.total:
return
total = thousand(inq.total)
tagihan = thousand(inq.tagihan)
denda = thousand(inq.denda)
s = f'{row.nomor_tagihan} {inq.get_kode_rekening()}'\
f' {inq.get_nama_rekening()} Rp {total} ='\
f' tagihan Rp {tagihan} + denda Rp {denda}'
jatuh_tempo = inq.get_jatuh_tempo()
if jatuh_tempo:
jatuh_tempo = jatuh_tempo.strftime('%d-%m-%Y')
s = f'{s} jatuh tempo {jatuh_tempo}'
return s
class Reversal:
def __init__(self, invoice_id):
self.invoice_id_raw = invoice_id
self.invoice_id = FixLength(INVOICE_ID)
self.invoice_id.set_raw(invoice_id)
self.invoice = self.get_invoice()
self.payment = None
if not self.invoice:
return
if self.invoice.status_pembayaran != 1:
return
self.payment = self.get_payment()
def get_invoice(self):
DBSession = get_db_session()
q = DBSession.query(Invoice).filter_by(
nomor_tagihan=self.invoice_id_raw)
return q.first()
def get_payment(self): # Override
DBSession = get_db_session()
q = DBSession.query(Payment).filter_by(invoice_id=self.invoice.id)
q = q.order_by(Payment.id.desc())
return q.first()
def do_reversal(self):
DBSession = get_db_session()
if self.payment:
self.payment.jml_bayar = self.payment.denda = \
self.payment.bunga = 0
self.payment.enabled = self.payment.is_valid = 0
DBSession.add(self.payment)
self.invoice.status_pembayaran = 0
DBSession.add(self.invoice)
DBSession.flush()
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!