only_va.py
3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from datetime import datetime
from sqlalchemy import func
from opensipkd.string import FixLength
from opensipkd.waktu import dmyhms
from sismiop.services.base import INVOICE_ID
from ..models import Pbb
from ..common import (
BaseApp,
one_day,
VaInvoice,
VaPayment,
)
class App(BaseApp):
conf_name = 'pbb va payment last date'
report_orm = Pbb
va_product_code = '02'
def filter_query(self, q):
tgl_awal = self.tgl_awal.strftime('%Y-%m-%d %H:%M:%S')
tgl_akhir = self.tgl_akhir + one_day
tgl_akhir = tgl_akhir.strftime('%Y-%m-%d %H:%M:%S')
return q.filter(
VaPayment.va_invoice_id == VaInvoice.id,
VaInvoice.product_code == self.va_product_code,
VaPayment.transaction_date >= tgl_awal,
VaPayment.transaction_date < tgl_akhir)
def get_payment_query(self): # Override
q = self.va_session.query(
VaInvoice.invoice_no,
VaInvoice.va_type,
VaPayment.id,
VaPayment.rrn,
VaInvoice.customer_name,
VaPayment.transaction_date,
VaPayment.transaction_amount,
VaInvoice.fine,
VaInvoice.discount)
q = self.filter_query(q)
return q.order_by(VaPayment.id)
def get_count(self): # Override
q = self.va_session.query(func.count())
q = self.filter_query(q)
return q.scalar()
def create_data(self, pay): # Override
self.invoice_id = pay.invoice_no
if pay.va_type == 'a':
channel_nama = 'VA'
elif pay.va_type == 'q':
channel_nama = 'QRIS'
else:
raise Exception(
f'Invoice ID {self.invoice_id} va_type {pay.va_type} '
'belum dipahami, perbaiki script')
inv_id = FixLength(INVOICE_ID)
inv_id.set_raw(pay.invoice_no)
tgl = datetime.strptime(pay.transaction_date, '%Y-%m-%d %H:%M:%S')
rpt_id = - pay.id
denda = pay.fine or 0
diskon = pay.discount or 0
diskon_denda = denda-diskon
bayar = pay.transaction_amount or 0
pokok = bayar-diskon_denda
return dict(
id=rpt_id,
kd_propinsi=inv_id['Propinsi'], kd_dati2=inv_id['Kabupaten'],
kd_kecamatan=inv_id['Kecamatan'], kd_kelurahan=inv_id['Kelurahan'],
kd_blok=inv_id['Blok'], no_urut=inv_id['Urut'],
kd_jns_op=inv_id['Jenis'], thn_pajak_sppt=inv_id['Tahun'],
pembayaran_sppt_ke=1, ntb=pay.rrn,
jml_sppt_yg_dibayar=bayar, denda_sppt=diskon_denda,
discount=diskon, tgl_pembayaran_sppt=tgl.date(),
tgl_rekam_byr_sppt=tgl,
nm_wp_sppt=pay.customer_name, channel_kode='0000',
channel_nama=channel_nama, bank_id='110',
pbb_yg_harus_dibayar_sppt=pokok)
def get_report(self, pay): # Override
inv_id = FixLength(INVOICE_ID)
inv_id.set_raw(pay.invoice_no)
q = self.rpt_session.query(Pbb).filter_by(
kd_propinsi=inv_id['Propinsi'], kd_dati2=inv_id['Kabupaten'],
kd_kecamatan=inv_id['Kecamatan'],
kd_kelurahan=inv_id['Kelurahan'],
kd_blok=inv_id['Blok'], no_urut=inv_id['Urut'],
kd_jns_op=inv_id['Jenis'], thn_pajak_sppt=inv_id['Tahun'],
pembayaran_sppt_ke=1)
return q.first()
def get_last_time(self): # Override
tgl = datetime.strptime(
self.last_pay.transaction_date, '%Y-%m-%d %H:%M:%S')
return dmyhms(tgl)