Commit 8b84f7c2 by Solo Group

transaction date time

1 parent 6db83713
import traceback import json
# from opensipkd.iso8583.base.modules.network import models # from opensipkd.iso8583.base.modules.network import models
import re import re
from opensipkd.iso8583.bjb.samsat.transaction import Transaction import sys
from datetime import datetime import traceback
import requests
from opensipkd.iso8583.bjb.samsat.structure import ( from opensipkd.iso8583.bjb.samsat.structure import (
INVOICE_ID, INVOICE_ID,
INVALID_NIK, INVALID_NIK,
INVOICE_PROFILE, INVOICE_PROFILE,
INQUIRY_CODE,
PAYMENT_CODE,
RC_OK,
RC_NOT_AVAILABLE, RC_NOT_AVAILABLE,
RC_ALREADY_PAID, RC_ALREADY_PAID,
RC_INVALID_NIK,
RC_INVALID_NUMBER, RC_INVALID_NUMBER,
RC_EXPIRE, RC_EXPIRE,
RC_DUPLIKASI_TGL_AKHIR_PAJAK, RC_DUPLIKASI_TGL_AKHIR_PAJAK,
...@@ -20,11 +18,9 @@ from opensipkd.iso8583.bjb.samsat.structure import ( ...@@ -20,11 +18,9 @@ from opensipkd.iso8583.bjb.samsat.structure import (
ERR_INVALID_NUMBER_2, ERR_INVALID_NUMBER_2,
ERR_NOT_AVAILABLE, ERR_NOT_AVAILABLE,
ERR_ALREADY_PAID, ERR_ALREADY_PAID,
ERR_INVALID_CHANNEL,
ERR_INQUIRY_TIMEOUT, ERR_INQUIRY_TIMEOUT,
ERR_PAYMENT_TIMEOUT, ERR_PAYMENT_TIMEOUT,
ERR_PAYMENT_FAILED, ERR_PAYMENT_FAILED,
ERR_OTHER,
ERR_PAYMENT_NOT_FOUND, ERR_PAYMENT_NOT_FOUND,
ERR_REVERSAL_DONE, ERR_REVERSAL_DONE,
ERR_REVERSAL_TIMEOUT, ERR_REVERSAL_TIMEOUT,
...@@ -36,12 +32,9 @@ from opensipkd.iso8583.bjb.samsat.structure import ( ...@@ -36,12 +32,9 @@ from opensipkd.iso8583.bjb.samsat.structure import (
ERR_EXPIRE, ERR_EXPIRE,
ERR_DUPLIKASI_TGL_AKHIR_PAJAK, ERR_DUPLIKASI_TGL_AKHIR_PAJAK,
) )
from opensipkd.iso8583.bjb.samsat.transaction import Transaction
from opensipkd.string import FixLength from opensipkd.string import FixLength
import sys
import json
import requests
from opensipkd.jsonrpc import get_random_number
# todo: harusnya diimport daro opensipkd.tools.rpc # todo: harusnya diimport daro opensipkd.tools.rpc
from ..api import get_header, get_jsonrpc from ..api import get_header, get_jsonrpc
...@@ -50,27 +43,17 @@ if sys.version < '3': ...@@ -50,27 +43,17 @@ if sys.version < '3':
else: else:
from io import StringIO from io import StringIO
CODE_54 = ['05', '23'] CODE_54 = ['05', '23']
CODE_55 = ['01', '02', '03', '04', '06', '09', '10', '11', '12', '15', '99', CODE_55 = ['01', '02', '03', '04', '06', '09', '10', '11', '12', '15', '99',
'24', '22'] '24', '22']
def date2str(d): def date2str(d):
return d and d.strftime('%Y%m%d') or None return d and d.strftime('%Y%m%d') or None
class Doc(Transaction): class Doc(Transaction):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.conf = kwargs["conf"]
self.mod_conf = dict()
for key in self.conf['module_conf']:
if key.find('samsat_banten_') < 0:
continue
name = key[14:]
self.mod_conf[name] = self.conf['module_conf'][key]
del kwargs["conf"]
self.invoice_id = FixLength(INVOICE_ID) self.invoice_id = FixLength(INVOICE_ID)
self.invalid_nik = FixLength(INVALID_NIK) self.invalid_nik = FixLength(INVALID_NIK)
self.invoice_profile = FixLength(self.get_invoice_profile_definition()) self.invoice_profile = FixLength(self.get_invoice_profile_definition())
...@@ -80,6 +63,8 @@ class Doc(Transaction): ...@@ -80,6 +63,8 @@ class Doc(Transaction):
if not self.mod_conf: if not self.mod_conf:
raise ValueError("Perbaiki konfigurasi") raise ValueError("Perbaiki konfigurasi")
self.invoice_id_raw = None
def get_channel(self): def get_channel(self):
return self.get_channel_id() return self.get_channel_id()
...@@ -102,7 +87,6 @@ class Doc(Transaction): ...@@ -102,7 +87,6 @@ class Doc(Transaction):
self.log_info("RESPONSE {}".format(rows)) self.log_info("RESPONSE {}".format(rows))
return rows return rows
# @staticmethod # @staticmethod
def get_invoice_profile_definition(self): def get_invoice_profile_definition(self):
return INVOICE_PROFILE return INVOICE_PROFILE
...@@ -125,7 +109,6 @@ class Doc(Transaction): ...@@ -125,7 +109,6 @@ class Doc(Transaction):
self.setMTI('0200') self.setMTI('0200')
self.set_stan() self.set_stan()
def inquiry_response_(self): def inquiry_response_(self):
if not self.is_allowed(): if not self.is_allowed():
return self.ack_not_allowed() return self.ack_not_allowed()
...@@ -292,6 +275,12 @@ class Doc(Transaction): ...@@ -292,6 +275,12 @@ class Doc(Transaction):
########### ###########
# Payment # # Payment #
########### ###########
def payment_request(self, data):
for p in data:
self.setBit(int(p), data[p])
self.setMTI('0200')
self.set_stan()
def payment_response(self): def payment_response(self):
self.payment_response_() self.payment_response_()
......
...@@ -18,3 +18,9 @@ class Job(NetworkJob): ...@@ -18,3 +18,9 @@ class Job(NetworkJob):
iso = self.create_iso() iso = self.create_iso()
iso.inquiry_request(p['data']) iso.inquiry_request(p['data'])
return iso return iso
def payment(self, p):
self.echo_time = time()
iso = self.create_iso()
iso.payment_request(p['data'])
return iso
...@@ -123,3 +123,11 @@ INVOICE_PROFILE = [ ...@@ -123,3 +123,11 @@ INVOICE_PROFILE = [
('Keterangan', 90), ('Keterangan', 90),
('Kode Wilayah', 5), ('Kode Wilayah', 5),
] ]
ERR_INVALID_NUMBER = 'Invoice ID {invoice_id} tidak benar'
ERR_INVALID_BANK = 'Bank ID {id} tidak diperkenankan'
ERR_SETTLEMENT_DATE = 'Settlement date {raw} tidak benar'
ERR_TRANSACTION_DATETIME = 'Transaction datetime {raw} tidak benar'
ERR_TRANSACTION_DATE = 'Transaction date {raw} tidak benar'
ERR_TRANSACTION_TIME = 'Transaction time {raw} tidak benar'
\ No newline at end of file \ No newline at end of file
...@@ -2,7 +2,7 @@ from datetime import datetime ...@@ -2,7 +2,7 @@ from datetime import datetime
from ISO8583.ISOErrors import BitNotSet from ISO8583.ISOErrors import BitNotSet
from opensipkd.string import ( from opensipkd.string import (
DateTimeVar, DateTimeVar,
DateVar, DateVar, TimeVar,
exception_message, exception_message,
) )
...@@ -17,7 +17,18 @@ from .structure import ( ...@@ -17,7 +17,18 @@ from .structure import (
ERR_TRANSACTION_DATE, ERR_TRANSACTION_DATE,
ERR_SETTLEMENT_DATE, ERR_SETTLEMENT_DATE,
ERR_OTHER, ERR_OTHER,
ERR_TRANSACTION_DATETIME,
RC_INVALID_NUMBER,
ERR_SETTLEMENT_DATE,
ERR_TRANSACTION_DATETIME,
ERR_TRANSACTION_DATE,
ERR_INVALID_BANK,
ERR_INVALID_NUMBER,
ERR_TRANSACTION_TIME,
) )
from opensipkd.waktu import create_datetime from opensipkd.waktu import create_datetime
from iso8583_web.scripts.forwarder import Log from iso8583_web.scripts.forwarder import Log
...@@ -34,10 +45,21 @@ CHANNEL_NAMES = { ...@@ -34,10 +45,21 @@ CHANNEL_NAMES = {
class Transaction(BaseTransaction, Log): class Transaction(BaseTransaction, Log):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.conf = kwargs["conf"]
self.mod_conf = dict()
for key in self.conf['module_conf']:
if key.find('samsat_banten_') < 0:
continue
name = key[14:]
self.mod_conf[name] = self.conf['module_conf'][key]
del kwargs["conf"]
BaseTransaction.__init__(self, *args, **kwargs) BaseTransaction.__init__(self, *args, **kwargs)
self.transmission_datetime = DateTimeVar() self.transmission_datetime = DateTimeVar()
self.transaction_date = DateVar() self.transaction_date = DateVar()
self.settlement_date = DateVar() self.settlement_date = DateVar()
self.transaction_time = TimeVar()
self.transaction_datetime = DateTimeVar()
# Override # Override
def get_bit_definition(self): def get_bit_definition(self):
...@@ -141,6 +163,42 @@ class Transaction(BaseTransaction, Log): ...@@ -141,6 +163,42 @@ class Transaction(BaseTransaction, Log):
msg = ERR_SETTLEMENT_DATE.format(d=raw) msg = ERR_SETTLEMENT_DATE.format(d=raw)
self.ack_other(msg) self.ack_other(msg)
def get_transaction_date_raw(self):
return self.get_value(13)
def get_transaction_datetime_raw(self):
return self.get_transaction_date_raw() + self.get_transaction_time_raw()
def get_transaction_datetime(self):
raw = self.get_transaction_datetime_raw()
self.transaction_datetime.set_raw(raw)
try:
return self.transaction_datetime.get_value()
except ValueError:
self.ack_transaction_datetime()
def get_transaction_time_raw(self):
return self.get_value(12)
def get_transaction_time(self):
raw = self.get_transaction_time_raw()
self.transaction_time.set_raw(raw)
try:
return self.transaction_time.get_value()
except ValueError:
self.ack_transaction_time()
def ack_transaction_datetime(self):
raw = self.get_transaction_datetime_raw()
msg = ERR_TRANSACTION_DATETIME.format(raw=[raw])
self.ack_other(msg)
def ack_transaction_time(self):
raw = self.get_transaction_time_raw()
msg = ERR_TRANSACTION_TIME.format(raw=[raw])
self.ack_other(msg)
@staticmethod
def get_bit_invoice_profile(self): def get_bit_invoice_profile(self):
return 61 return 61
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!