class BaseResponse(object):
    def __init__(self, parent):
        self.parent = parent
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id_raw = parent.from_iso.get_invoice_id()
        self.invoice_id.set_raw(self.invoice_id_raw)

    def is_allowed(self):
        bank_name = self.parent.conf['name']
        tp_conf = host[bank_name]
        if 'kd_tp' not in tp_conf:
            bank_id = self.parent.from_iso.get_bank_id()
            if bank_id not in tp_conf:
                return self.parent.ack_not_allowed()
            tp_conf = tp_conf[bank_id]
        self.parent.conf.update(tp_conf)
        return True

    def is_transaction_owner(self, pay):
        conf = self.parent.conf
        return pay.kd_kanwil_bank == conf['kd_kanwil_bank'] and \
            pay.kd_kppbb_bank == conf['kd_kppbb_bank'] and \
            pay.kd_bank_tunggal == conf['kd_bank_tunggal'] and \
            pay.kd_bank_persepsi == conf['kd_bank_persepsi'] and \
            pay.kd_tp == conf['kd_tp']

    def commit(self):
        DBSession.commit()
        self.parent.ack()
class ReversalByQuery(Reversal):
    def __init__(self, invoice_id_raw):
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id.set_raw(invoice_id_raw)
        Reversal.__init__(self, models, DBSession, self.invoice_id['Propinsi'],
                          self.invoice_id['Kabupaten'],
                          self.invoice_id['Kecamatan'],
                          self.invoice_id['Kelurahan'],
                          self.invoice_id['Blok'], self.invoice_id['Urut'],
                          self.invoice_id['Jenis'],
                          self.invoice_id['Tahun Pajak'])

    def set_unpaid(self):
        pay = Reversal.set_unpaid(self)
        if not pay:
            q = DBSession.query(self.models.Payment).filter_by(
                propinsi=self.invoice.kd_propinsi,
                kabupaten=self.invoice.kd_dati2,
                kecamatan=self.invoice.kd_kecamatan,
                kelurahan=self.invoice.kd_kelurahan,
                blok=self.invoice.kd_blok,
                urut=self.invoice.no_urut,
                jenis=self.invoice.kd_jns_op,
                tahun=self.invoice.thn_pajak_sppt)
            q.delete()
        DBSession.commit()
class BaseResponse(object):
    def __init__(self, parent):
        self.parent = parent
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id_raw = parent.from_iso.get_invoice_id()
        self.invoice_id.set_raw(self.invoice_id_raw)

    def is_allowed(self):
        bank_name = self.parent.conf['name']
        tp_conf = host[bank_name] 
        if 'kd_tp' not in tp_conf:
            bank_id = self.parent.from_iso.get_bank_id()
            if bank_id not in tp_conf:
                return self.parent.ack_not_allowed() 
            tp_conf = tp_conf[bank_id]
        self.parent.conf.update(tp_conf)
        return True

    def is_transaction_owner(self, pay):
        conf = self.parent.conf
        return pay.kd_kanwil_bank == conf['kd_kanwil_bank'] and \
            pay.kd_kppbb_bank == conf['kd_kppbb_bank'] and \
            pay.kd_bank_tunggal == conf['kd_bank_tunggal'] and \
            pay.kd_bank_persepsi == conf['kd_bank_persepsi'] and \
            pay.kd_tp == conf['kd_tp']

    def commit(self):
        DBSession.commit()
        self.parent.ack()
class ReversalByQuery(Reversal):
    def __init__(self, invoice_id_raw):
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id.set_raw(invoice_id_raw)
        Reversal.__init__(
            self, models, DBSession, self.invoice_id['Propinsi'],
            self.invoice_id['Kabupaten'], self.invoice_id['Kecamatan'],
            self.invoice_id['Kelurahan'], self.invoice_id['Blok'],
            self.invoice_id['Urut'], self.invoice_id['Jenis'],
            self.invoice_id['Tahun Pajak'])

    def set_unpaid(self):
        pay = Reversal.set_unpaid(self)
        if not pay:
            q = DBSession.query(self.models.Payment).filter_by(
                propinsi=self.invoice.kd_propinsi,
                kabupaten=self.invoice.kd_dati2,
                kecamatan=self.invoice.kd_kecamatan,
                kelurahan=self.invoice.kd_kelurahan,
                blok=self.invoice.kd_blok,
                urut=self.invoice.no_urut,
                jenis=self.invoice.kd_jns_op,
                tahun=self.invoice.thn_pajak_sppt)
            q.delete()
        DBSession.commit()
class InquiryByQuery(Query):
    def __init__(self, invoice_id_raw):
        Query.__init__(self, models, DBSession)
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id.set_raw(invoice_id_raw)
        q = self.query_invoice(self.invoice_id['Propinsi'],
                self.invoice_id['Kabupaten'], self.invoice_id['Kecamatan'],
                self.invoice_id['Kelurahan'], self.invoice_id['Blok'],
                self.invoice_id['Urut'], self.invoice_id['Jenis'],
                self.invoice_id['Tahun Pajak'])
        self.invoice = q.first()
        self.ket = None
        if not self.invoice:
            return
        self.nama_wp = self.invoice.nm_wp_sppt
        self.payment = self.invoice2payment(self.invoice)
        if self.payment:
            self.total = self.payment.jml_sppt_yg_dibayar
            self.tgl_bayar = self.payment.tgl_rekam_byr_sppt
            self.ket = 'pembayaran ke {n}'.format(n=self.payment.pembayaran_sppt_ke)
            q = DBSession.query(models.TempatPembayaran).filter_by(
                kd_kanwil=self.payment.kd_kanwil_bank,
                kd_kppbb=self.payment.kd_kppbb_bank,
                kd_bank_tunggal=self.payment.kd_bank_tunggal,
                kd_bank_persepsi=self.payment.kd_bank_persepsi,
                kd_tp=self.payment.kd_tp)
            tp = q.first()
            self.tempat_pembayaran = dict()
            if tp:
                self.tempat_pembayaran['nama'] = tp.nm_tp
                alamat = tp.alamat_tp and tp.alamat_tp.strip()
                if alamat:
                    self.tempat_pembayaran['alamat'] = alamat
        self.h2h = self.invoice2iso_pay()

    def invoice2iso_pay(self):
        q = DBSession.query(models.Payment).filter_by(
                propinsi=self.invoice.kd_propinsi,
                kabupaten=self.invoice.kd_dati2,
                kecamatan=self.invoice.kd_kecamatan,
                kelurahan=self.invoice.kd_kelurahan,
                blok=self.invoice.kd_blok,
                urut=self.invoice.no_urut,
                jenis=self.invoice.kd_jns_op,
                tahun=self.invoice.thn_pajak_sppt).order_by(
                models.Payment.ke)
        r = []
        for iso_pay in q:
            q_inq = DBSession.query(models.Inquiry).filter_by(
                    id=iso_pay.inquiry_id)
            iso_inq = q_inq.first()
            total = iso_inq.tagihan + iso_inq.denda
            ket = 'Pembayaran ke {k}'.format(k=iso_pay.ke)
            d = dict(ket=ket, tgl=iso_inq.tgl, total=total)
            r.append(d)
        return r
Exemple #6
0
class Transaction(BaseTransaction):
    def __init__(self, *args, **kwargs):
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_profile = FixLength(INVOICE_PROFILE)
        BaseTransaction.__init__(self, *args, **kwargs)
        self.invoice_id_raw = None

    # Override
    def get_bit_definition(self):
        return TRANSACTION_BITS

    # Override
    def get_inquiry_code(self):
        return INQUIRY_CODE

    # Override
    def get_payment_code(self):
        return PAYMENT_CODE

    # Override
    def set_transaction_response(self):
        self.setMTI('0210')
        self.copy([2, 3, 7, 11, 12, 13, 15, 18, 32, 37, 41, 48, 90])

    # Override
    def get_invoice_id(self):
        if self.invoice_id_raw is not None:
            return self.invoice_id_raw
        raw = self.get_value(48)
        self.invoice_profile.set_raw(raw)
        self.invoice_id_raw = self.invoice_profile['ID Billing'].strip()
        self.invoice_id.set_raw(self.invoice_id_raw)
        return self.invoice_id_raw

    def set_invoice_id(self, raw):
        self.invoice_profile['ID Billing'] = raw
        self.set_invoice_profile()

    # Override
    def set_invoice_profile(self):
        self.setBit(48, self.invoice_profile.get_raw())

    # Override
    def set_ntp(self, ntp):
        self.invoice_profile['NTPD'] = ntp

    # Override
    def get_ntb(self):
        return self.get_value(90)

    def set_ntb(self, raw):
        self.setBit(90, raw)

    # Override
    def payment_response(self):
        self.copy([4])
class Transaction(BaseTransaction):
    def __init__(self, *args, **kwargs):
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_profile = FixLength(INVOICE_PROFILE)
        BaseTransaction.__init__(self, *args, **kwargs)
        self.invoice_id_raw = None
 
    # Override
    def get_bit_definition(self):
        return TRANSACTION_BITS

    # Override
    def get_inquiry_code(self):
        return INQUIRY_CODE

    # Override
    def get_payment_code(self):
        return PAYMENT_CODE

    # Override
    def set_transaction_response(self):
        self.setMTI('0210')
        self.copy([2, 3, 7, 11, 12, 13, 15, 18, 32, 37, 41, 48, 90])

    # Override
    def get_invoice_id(self):
        if self.invoice_id_raw is not None:
            return self.invoice_id_raw
        raw = self.get_value(48)
        self.invoice_profile.set_raw(raw)
        self.invoice_id_raw = self.invoice_profile['ID Billing'].strip()
        self.invoice_id.set_raw(self.invoice_id_raw)
        return self.invoice_id_raw

    def set_invoice_id(self, raw):
        self.invoice_profile['ID Billing'] = raw
        self.set_invoice_profile()

    # Override
    def set_invoice_profile(self):
        self.setBit(48, self.invoice_profile.get_raw())

    # Override
    def set_ntp(self, ntp):
        self.invoice_profile['NTPD'] = ntp

    # Override
    def get_ntb(self):
        return self.get_value(90)

    def set_ntb(self, raw):
        self.setBit(90, raw)

    # Override
    def payment_response(self):
        self.copy([4])
class InquiryByQuery(Query):
    def __init__(self, invoice_id_raw):
        Query.__init__(self, models, DBSession)
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id.set_raw(invoice_id_raw)
        q = self.query_invoice(
            self.invoice_id['Propinsi'], self.invoice_id['Kabupaten'],
            self.invoice_id['Kecamatan'], self.invoice_id['Kelurahan'],
            self.invoice_id['Blok'], self.invoice_id['Urut'],
            self.invoice_id['Jenis'], self.invoice_id['Tahun Pajak'])
        self.invoice = q.first()
        self.ket = None
        if not self.invoice:
            return
        self.nama_wp = self.invoice.nm_wp_sppt
        self.payment = self.invoice2payment(self.invoice)
        if self.payment:
            self.total = self.payment.jml_sppt_yg_dibayar
            self.tgl_bayar = self.payment.tgl_rekam_byr_sppt
            self.ket = 'pembayaran ke {n}'.format(
                n=self.payment.pembayaran_sppt_ke)
            q = DBSession.query(models.TempatPembayaran).filter_by(
                kd_kanwil=self.payment.kd_kanwil_bank,
                kd_kppbb=self.payment.kd_kppbb_bank,
                kd_bank_tunggal=self.payment.kd_bank_tunggal,
                kd_bank_persepsi=self.payment.kd_bank_persepsi,
                kd_tp=self.payment.kd_tp)
            tp = q.first()
            self.tempat_pembayaran = dict()
            if tp:
                self.tempat_pembayaran['nama'] = tp.nm_tp
                alamat = tp.alamat_tp and tp.alamat_tp.strip()
                if alamat:
                    self.tempat_pembayaran['alamat'] = alamat
        self.h2h = self.invoice2iso_pay()

    def invoice2iso_pay(self):
        q = DBSession.query(models.Payment).filter_by(
            propinsi=self.invoice.kd_propinsi,
            kabupaten=self.invoice.kd_dati2,
            kecamatan=self.invoice.kd_kecamatan,
            kelurahan=self.invoice.kd_kelurahan,
            blok=self.invoice.kd_blok,
            urut=self.invoice.no_urut,
            jenis=self.invoice.kd_jns_op,
            tahun=self.invoice.thn_pajak_sppt).order_by(models.Payment.ke)
        r = []
        for iso_pay in q:
            q_inq = DBSession.query(
                models.Inquiry).filter_by(id=iso_pay.inquiry_id)
            iso_inq = q_inq.first()
            total = iso_inq.tagihan + iso_inq.denda
            ket = 'Pembayaran ke {k}'.format(k=iso_pay.ke)
            d = dict(ket=ket, tgl=iso_inq.tgl, total=total)
            r.append(d)
        return r
class ReversalByQuery(InvoiceQuery):
    def __init__(self, invoice_id):
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id.set_raw(invoice_id)
        InvoiceQuery.__init__(self, self.invoice_id['Tahun'],
                              self.invoice_id['SPT No'])
        self.payment = self.invoice and self.get_payment()

    def set_unpaid(self):
        InvoiceQuery.set_unpaid(self)
        self.DBSession.commit()
class ReversalByQuery(InvoiceQuery):
    def __init__(self, invoice_id):
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id.set_raw(invoice_id)
        InvoiceQuery.__init__(
            self, self.invoice_id['Tahun'], self.invoice_id['SPT No'])
        self.payment = self.invoice and self.get_payment()

    def set_unpaid(self):
        InvoiceQuery.set_unpaid(self)
        self.DBSession.commit()
Exemple #11
0
class Invoice(Query):
    def __init__(self, models, iso_models, DBSession, invoice_id_raw):
        Query.__init__(self, models, iso_models, DBSession)
        self.invoice_id_raw = invoice_id_raw
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id.set_raw(invoice_id_raw)
        q = self.query_invoice(self.invoice_id['Tahun'],
                               self.invoice_id['SPT No'])
        self.invoice = q.first()

    def is_paid(self):
        return self.invoice.status_pembayaran == 1

    def get_payment(self):
        return Query.get_payment(self, self.invoice)
Exemple #12
0
class Invoice(Query):
    def __init__(self, models, iso_models, DBSession, invoice_id_raw):
        Query.__init__(self, models, iso_models, DBSession)
        self.invoice_id_raw = invoice_id_raw
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id.set_raw(invoice_id_raw)
        q = self.query_invoice(
                self.invoice_id['Tahun'], self.invoice_id['SPT No'])
        self.invoice = q.first()

    def is_paid(self):
        return self.invoice.status_pembayaran == 1

    def get_payment(self):
        return Query.get_payment(self, self.invoice)
class BaseResponse(object):
    def __init__(self, parent):
        self.parent = parent
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id.set_raw(parent.from_iso.get_invoice_id())
        self.invoice_id_raw = self.invoice_id.get_raw()

    def is_transaction_owner(self, pay):
        conf = host[self.parent.conf['name']]
        return pay.kd_kanwil == conf['kd_kanwil'] and \
            pay.kd_kantor == conf['kd_kantor'] and \
            pay.kd_tp == conf['kd_tp']

    def commit(self):
        DBSession.commit()
        self.parent.ack()
class BaseResponse(object):
    def __init__(self, parent):
        self.parent = parent
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id_raw = parent.from_iso.get_invoice_id()
        self.invoice_id.set_raw(self.invoice_id_raw)

    def is_transaction_owner(self, pay):
        conf = host[self.parent.conf['name']]
        return pay.kd_kanwil == conf['kd_kanwil'] and \
            pay.kd_kantor == conf['kd_kantor'] and \
            pay.kd_tp == conf['kd_tp']

    def commit(self):
        DBSession.commit()
        self.parent.ack()
class BaseResponse(object):
    def __init__(self, parent):
        self.parent = parent
        self.invoice_id_raw = parent.from_iso.get_invoice_id()
        self.invoice_id = FixLength(self.get_invoice_id_structure())
        self.invoice_id.set_raw(self.invoice_id_raw)

    def get_invoice_id_structure(self):
        return INVOICE_ID

    def is_transaction_owner(self, iso_pay):
        conf = host[self.parent.conf['name']]
        return iso_pay.bank_id == conf['id']

    def commit(self):
        DBSession.commit()
        self.parent.ack()
Exemple #16
0
class Invoice(Query):
    def __init__(self, models, DBSession, invoice_id_raw):
        Query.__init__(self, models, DBSession)
        self.invoice_id_raw = invoice_id_raw
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id.set_raw(invoice_id_raw)
        self.invoice = False
        try:
            kode = int(self.invoice_id['Kode'])
        except TypeError:
            return
        except ValueError:
            return
        q = self.query_invoice(self.invoice_id['Tahun'], str(kode),
                               self.invoice_id['SSPD No'])
        self.invoice = q.first()

    def is_paid(self):
        return self.invoice.status_pembayaran == 1

    def get_payment(self):
        return Query.get_payment(self, self.invoice)
Exemple #17
0
class BaseResponse(object):
    def __init__(self, parent):
        self.parent = parent
        self.invoice_id = FixLength(INVOICE_ID)
        self.invoice_id.set_raw(parent.from_iso.get_invoice_id())
        self.invoice_id_raw = self.invoice_id.get_raw()

    def is_transaction_owner(self, pay):
        conf = host[self.parent.conf['name']]
        if pay.kd_kanwil != conf['kd_kanwil']:
            return
        if pay.kd_kantor != conf['kd_kantor']:
            return
        kd_tp = conf['kd_tp']
        if isinstance(kd_tp, dict):
            if pay.kd_tp in kd_tp.values():
                return True
        elif pay.kd_tp == kd_tp:
            return True

    def commit(self):
        DBSession.commit()
        self.parent.ack()

    def nama_kelurahan(self):
        return self.query.cari_kelurahan(self.invoice_id['Propinsi'],
                                         self.invoice_id['Kabupaten'],
                                         self.invoice_id['Kecamatan'],
                                         self.invoice_id['Kelurahan'])

    def nama_kecamatan(self):
        return self.query.cari_kecamatan(self.invoice_id['Propinsi'],
                                         self.invoice_id['Kabupaten'],
                                         self.invoice_id['Kecamatan'])

    def nama_propinsi(self):
        return self.query.cari_propinsi(self.invoice_id['Propinsi'])
 def get_cabang(self):
     f = FixLength(CABANG)
     f.set_raw(self.get_value(107))
     return f
Exemple #19
0
def get_invoice_id(raw):
    invoice_id = FixLength(INVOICE_ID)
    invoice_id.set_raw(raw)
    return invoice_id
Exemple #20
0
 def __init__(self, invoice_id_raw):
     invoice_id = FixLength(self.get_invoice_id_structure())
     invoice_id.set_raw(invoice_id_raw)
     Reversal.__init__(self, models, DBSession, invoice_id)
class DbTransaction(Transaction):
    def __init__(self, *args, **kwargs):
        self.invoice_profile = FixLength(INVOICE_PROFILE)
        Transaction.__init__(self, *args, **kwargs)

    # Override
    def get_bit_definition(self):
        return TRANSACTION_BITS

    # Override
    def get_inquiry_codes(self):
        return (INQUIRY_CODE, )

    # Override
    def get_payment_codes(self):
        return (PAYMENT_CODE, )

    # Override
    def get_methods(self):
        return {
            INQUIRY_CODE: 'inquiry_request_handler',
            PAYMENT_CODE: 'payment_request_handler',
        }

    # Override
    def set_transaction_response(self):
        self.setMTI('0210')
        # Sesuai kolom yang berisi E (Equal) pada dokumentasi
        self.copy([2, 3, 7, 11, 12, 13, 15, 18, 37, 41, 48, 90])
        raw = self.get_invoice_profile()
        self.invoice_profile.set_raw(raw)

    # Override
    # Ini dipanggil dengan from_iso.
    def get_invoice_id(self):
        raw = self.get_invoice_profile()
        self.invoice_profile.set_raw(raw)
        bank_invoice_id_raw = self.invoice_profile['ID Billing'].strip()
        return bank_invoice_id_raw[2:]

    def inquiry_request_handler(self):
        self.transaction_request_handler('inquiry')

    def payment_request_handler(self):
        self.transaction_request_handler('payment')

    def jenis_pajak(self):
        self.invoice_id_raw = self.get_invoice_id()
        length = len(self.invoice_id_raw)
        if length == 12:
            return 'bphtb'
        elif length == 10:
            return 'padl'
        self.ack_invalid_number()

    def transaction_request_handler(self, name):
        jenis_pajak = self.jenis_pajak()
        if not jenis_pajak:
            return
        func_name = '{j}_{n}_request_handler'.format(j=jenis_pajak, n=name)
        func = getattr(self, func_name)
        func()

    def get_invoice_profile(self):
        return self.get_value(48)

    # Override
    def set_invoice_profile(self, raw=None):
        raw = self.invoice_profile.get_raw()
        self.setBit(48, raw)

    # Override
    def set_ntp(self, ntp):
        self.invoice_profile['NTPD'] = ntp

    # Override
    def get_cabang(self):
        return dict(kode=None, user=None)

    # Override
    def get_ntb(self):
        return self.get_value(90).lstrip('0')

    # Override
    def is_reversal_request(self):
        ok = BaseTransaction.is_reversal_request(self)
        if not ok:
            return
        jenis_pajak = self.jenis_pajak()
        if jenis_pajak:
            return '{j}_reversal_request_handler'.format(j=jenis_pajak)

    def bphtb_inquiry_request_handler(self):
        try:
            bphtb.inquiry(self)
        except:
            self.ack_unknown()

    def bphtb_payment_request_handler(self):
        try:
            bphtb.payment(self)
        except:
            self.ack_unknown()

    def padl_inquiry_request_handler(self):
        try:
            padl.inquiry(self)
        except:
            self.ack_unknown()

    def padl_payment_request_handler(self):
        try:
            padl.payment(self)
        except:
            self.ack_unknown()

    # Override
    def bphtb_reversal_request_handler(self):
        try:
            bphtb.reversal(self)
        except:
            self.ack_unknown()

    # Override
    def padl_reversal_request_handler(self):
        try:
            padl.reversal(self)
        except:
            self.ack_unknown()

    def ack_invalid_length(self):
        msg = ERR_INVALID_LENGTH.format(id=self.invoice_id_raw)
        self.ack(RC_INVALID_NUMBER, msg)

    # Override
    def ack_already_paid(self):
        msg = ERR_ALREADY_PAID.format(
            invoice_id=self.from_iso.get_invoice_id())
        self.ack(RC_ALREADY_PAID, msg)

    # Override
    def ack_not_available(self):
        msg = ERR_NOT_AVAILABLE.format(
            invoice_id=self.from_iso.get_invoice_id())
        self.ack(RC_NOT_AVAILABLE, msg)
def get_invoice_id(raw):
    invoice_id = FixLength(INVOICE_ID)
    invoice_id.set_raw(raw)
    return invoice_id
 def get_cabang(self):
     f = FixLength(CABANG)
     f.set_raw(self.get_value(107))
     return f