Commit 6c18362e by aagusti

Merge branch 'master' of https://git.opensipkd.com/taufik/esipkd

2 parents 642bc645 89219106
...@@ -395,9 +395,9 @@ class CSVRenderer(object): ...@@ -395,9 +395,9 @@ class CSVRenderer(object):
# File # # File #
######## ########
# http://stackoverflow.com/questions/2257441/random-string-generation-with-upper-case-letters-and-digits-in-python # http://stackoverflow.com/questions/2257441/random-string-generation-with-upper-case-letters-and-digits-in-python
def get_random_string(): def get_random_string(width=6):
return ''.join(random.choice(ascii_uppercase + ascii_lowercase + digits) \ return ''.join(random.choice(ascii_uppercase + ascii_lowercase + digits) \
for _ in range(6)) for _ in range(width))
def get_ext(filename): def get_ext(filename):
return os.path.splitext(filename)[-1] return os.path.splitext(filename)[-1]
......
...@@ -15,6 +15,10 @@ from ..models import (DBSession) ...@@ -15,6 +15,10 @@ from ..models import (DBSession)
from ..models.isipkd import (Pap) from ..models.isipkd import (Pap)
from ..models.informix import EngInformix from ..models.informix import EngInformix
from .bjb_va import rpc_params, BJBVA
from .bjb_qris import BJBQRIS
from ..tools import ymd, dmy, ymdhms, dmyhms, dmy_to_date
SESS_ADD_FAILED = 'user add failed' SESS_ADD_FAILED = 'user add failed'
SESS_EDIT_FAILED = 'user edit failed' SESS_EDIT_FAILED = 'user edit failed'
...@@ -349,6 +353,61 @@ def view_edit(request): ...@@ -349,6 +353,61 @@ def view_edit(request):
return HTTPFound(location=request.route_url('pap-edit',nr=row.npwpd, return HTTPFound(location=request.route_url('pap-edit',nr=row.npwpd,
nk=row.m_pjk_bln, nk=row.m_pjk_bln,
em=row.m_pjk_thn)) em=row.m_pjk_thn))
elif 'createva' in request.POST:
val = dict(request.POST.items())
val.update(dict(
client_type = 3,
invoice_no = val['kd_bayar'],
product_code = 98,
description = val['keterangan'],
customer_name = val['nm_perus'],
customer_email = "-",
customer_phone = "-",
expired_date = ymdhms(datetime.now()),
))
val['amount'] = (val['bea_pok_pjk']+val['bea_den_pjk'])
cekpap = Pap.query().filter(Pap.kd_bayar==val['kd_bayar']).first()
if not cekpap:
cekpap = Pap()
cekpap.from_dict(val)
DBSession.add(cekpap)
DBSession.flush()
row = BJBVA.create_va(val, rpc_params())
if row:
request.session.flash('BJBVA No. %s sudah ditambahkan.' % row.va_number)
else:
request.session.flash('BJBVA gagal ditambahkan.')
elif 'createqris' in request.POST:
val = dict(request.POST.items())
val.update(dict(
client_type = 3,
invoice_no = val['kd_bayar'],
product_code = 98,
description = val['keterangan'],
customer_name = val['nm_perus'],
customer_email = "-",
customer_phone = "-",
expired_date = ymdhms(datetime.now()),
))
val['amount'] = (val['bea_pok_pjk']+val['bea_den_pjk'])
cekpap = Pap.query().filter(Pap.kd_bayar==val['kd_bayar']).first()
if not cekpap:
cekpap = Pap()
cekpap.from_dict(val)
DBSession.add(cekpap)
DBSession.flush()
row = BJBQRIS.create_va(val, rpc_params())
if row:
request.session.flash('BJBQRIS No. %s sudah ditambahkan.' % row.va_number)
else:
request.session.flash('BJBQRIS gagal ditambahkan.')
return route_list(request) return route_list(request)
elif SESS_EDIT_FAILED in request.session: elif SESS_EDIT_FAILED in request.session:
return session_failed(request, SESS_EDIT_FAILED) return session_failed(request, SESS_EDIT_FAILED)
......
...@@ -52,6 +52,17 @@ ...@@ -52,6 +52,17 @@
${error}</p> ${error}</p>
</div> </div>
</div> </div>
<div class="form-group" tal:define="field form['is_api_key']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></label>
<div class="col-md-9">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<!--Status --> <!--Status -->
<div class="form-group" tal:define="field form['status']" id="item-${field.oid}"> <div class="form-group" tal:define="field form['status']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}"> <label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
......
...@@ -52,6 +52,17 @@ ...@@ -52,6 +52,17 @@
${error}</p> ${error}</p>
</div> </div>
</div> </div>
<div class="form-group" tal:define="field form['is_api_key']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></label>
<div class="col-md-9">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<!--Status --> <!--Status -->
<div class="form-group" tal:define="field form['status']" id="item-${field.oid}"> <div class="form-group" tal:define="field form['status']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}"> <label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
......
...@@ -26,7 +26,7 @@ from ..models.isipkd import( ...@@ -26,7 +26,7 @@ from ..models.isipkd import(
from datatables import ( from datatables import (
ColumnDT, DataTables) ColumnDT, DataTables)
from esipkd.tools import DefaultTimeZone, _DTstrftime, _DTnumberformat, _DTactive from esipkd.tools import DefaultTimeZone, _DTstrftime, _DTnumberformat, _DTactive, get_random_string
SESS_ADD_FAILED = 'user add failed' SESS_ADD_FAILED = 'user add failed'
SESS_EDIT_FAILED = 'user edit failed' SESS_EDIT_FAILED = 'user edit failed'
...@@ -86,6 +86,11 @@ def deferred_status(node, kw): ...@@ -86,6 +86,11 @@ def deferred_status(node, kw):
values = kw.get('daftar_status', []) values = kw.get('daftar_status', [])
return widget.SelectWidget(values=values) return widget.SelectWidget(values=values)
@colander.deferred
def api_key_widget(node, kw):
values = kw.get('api_key_list', [])
return widget.SelectWidget(values=values)
STATUS = ( STATUS = (
(1, 'Aktif'), (1, 'Aktif'),
(0, 'Inaktif'), (0, 'Inaktif'),
...@@ -102,6 +107,9 @@ class AddSchema(colander.Schema): ...@@ -102,6 +107,9 @@ class AddSchema(colander.Schema):
status = colander.SchemaNode( status = colander.SchemaNode(
colander.String(), colander.String(),
widget=deferred_status) widget=deferred_status)
is_api_key = colander.SchemaNode(
colander.String(), widget=api_key_widget, title='API Key',
missing=colander.drop)
password = colander.SchemaNode( password = colander.SchemaNode(
colander.String(), colander.String(),
widget=widget.PasswordWidget(), widget=widget.PasswordWidget(),
...@@ -112,9 +120,17 @@ class EditSchema(AddSchema): ...@@ -112,9 +120,17 @@ class EditSchema(AddSchema):
missing=colander.drop, missing=colander.drop,
widget=widget.HiddenWidget(readonly=True)) widget=widget.HiddenWidget(readonly=True))
def get_form(request, class_form): def get_form(request, class_form, user=None):
schema = class_form(validator=form_validator) schema = class_form(validator=form_validator)
schema = schema.bind(daftar_status=STATUS) if user and user.api_key:
api_key_list = (
('', user.api_key),
('0', 'Hapus'))
else:
api_key_list = (
('', 'Tidak ada'),
('1', 'Buatkan'))
schema = schema.bind(daftar_status=STATUS,api_key_list=api_key_list)
schema.request = request schema.request = request
return Form(schema, buttons=('save','cancel')) return Form(schema, buttons=('save','cancel'))
...@@ -122,6 +138,11 @@ def save(values, user, row=None): ...@@ -122,6 +138,11 @@ def save(values, user, row=None):
if not row: if not row:
row = User() row = User()
row.from_dict(values) row.from_dict(values)
is_api_key = values.get('is_api_key')
if is_api_key == '0':
row.api_key = None
elif is_api_key == '1':
row.api_key = get_random_string(64)
if values['password']: if values['password']:
row.password = values['password'] row.password = values['password']
DBSession.add(row) DBSession.add(row)
...@@ -179,7 +200,7 @@ def view_edit(request): ...@@ -179,7 +200,7 @@ def view_edit(request):
row = query_id(request).first() row = query_id(request).first()
if not row: if not row:
return id_not_found(request) return id_not_found(request)
form = get_form(request, EditSchema) form = get_form(request, EditSchema, user=row)
if request.POST: if request.POST:
if 'save' in request.POST: if 'save' in request.POST:
controls = request.POST.items() controls = request.POST.items()
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!