Commit 89c9884a by aa.gusti

perbaikan menus dan upload

1 parent 7611904f
......@@ -105,6 +105,8 @@ ENV/
opensipkd/base/static/img/*
opensipkd/base/static/icon/*
!opensipkd/base/static/icon/default.png
!opensipkd/base/static/img/pyramid.png
!opensipkd/base/static/img/opensipkd.png
!opensipkd/base/static/img/opensipkd_bg.png
......
......@@ -248,7 +248,13 @@ def get_menus(request):
result = {}
for menu in menus:
if menu.find(':') > -1:
if menu.find(',') > -1:
key, val = menu.strip().split(',')
key = key.strip().strip('/')
val = re.sub('[//-]', ' ', val)
elif menu.find(':') > -1:
key, val = menu.strip().split(':')
key = key.strip().strip('/')
val = re.sub('[//-]', ' ', val)
......
......@@ -52,9 +52,7 @@ def get_file(filename):
return open(fullpath)
def restore_csv(table, filename, get_file_func=get_file, db_session=None):
if not db_session:
db_session = DBSession
def restore_csv(table, filename, get_file_func=get_file, db_session=DBSession):
q = db_session.query(table)
if q.first():
return
......@@ -65,20 +63,36 @@ def restore_csv(table, filename, get_file_func=get_file, db_session=None):
is_first = True
fmap = dict()
for cf in reader:
# print(cf)
# sys.exit()
if is_first:
is_first = False
for fieldname in cf.keys():
if not fieldname:
continue
try:
t = fieldname.split('/')
except Exception as e:
print(fieldname, cf.keys())
raise e
fname_orig = t[0]
schema = "public"
if t[1:]:
foreign_table, foreign_field = t[1].split('.')
foreign_table = Table(foreign_table, Base.metadata, autoload=True)
t_array = t[1].split('.')
if len(t_array) == 2:
foreign_table = t_array[0]
foreign_field = t_array[1]
else:
schema = t_array[0]
foreign_table = t_array[1]
foreign_field = t_array[2]
# foreign_table, foreign_field = t[1].split('.')
foreign_table = Table(foreign_table, Base.metadata,
autoload=True, schema=schema)
foreign_field = getattr(foreign_table.c, foreign_field)
foreigns[fieldname] = (foreign_table, foreign_field)
fmap[fieldname] = fname_orig
is_first = False
row = table()
for fieldname in cf:
......@@ -122,7 +136,6 @@ def append_csv(table, filename, keys, get_file_func=get_file,
foreigns = dict()
is_first = True
fmap = dict()
print(f, reader)
for cf in reader:
if is_first:
is_first = False
......@@ -136,19 +149,19 @@ def append_csv(table, filename, keys, get_file_func=get_file,
raise e
fname_orig = t[0]
schema="public"
schema = "public"
if t[1:]:
t_array = t[1].split('.')
if len(t_array)==2:
foreign_table=t_array[0]
if len(t_array) == 2:
foreign_table = t_array[0]
foreign_field = t_array[1]
else:
schema=t_array[0]
foreign_table=t_array[1]
schema = t_array[0]
foreign_table = t_array[1]
foreign_field = t_array[2]
foreign_table = Table(foreign_table, Base.metadata, autoload=True,
schema=schema)
foreign_table = Table(foreign_table, Base.metadata,
autoload=True, schema=schema)
foreign_field = getattr(foreign_table.c, foreign_field)
foreigns[fname] = (foreign_table, foreign_field)
......@@ -204,6 +217,7 @@ def append_csv(table, filename, keys, get_file_func=get_file,
transaction.commit() # diperlukan commit per record khususnya untuk yang internal link
def ask_password(name):
while True:
pass1 = getpass('Tulis password untuk {}: '.format(name))
......
......@@ -227,9 +227,6 @@ button {
border-color: #f39c12
}
// from application implementation
table.dataTable tr.selected td {
background-color: #9fafd1
......@@ -277,7 +274,7 @@ div.dataTables_length label {
.ui-autocomplete-loading {
padding-right:10px;
background: url(../img/loading.gif) right 10px center no-repeat !important;
background: url("../img/loading.gif") right 10px center no-repeat !important;
}
.ui-autocomplete {
max-height: 200px;
......
......@@ -112,12 +112,13 @@ class BaseView(object):
self.add_schema = ""
self.table = ""
def route_list(self, ):
def route_list(self, msg=None, error=""):
return HTTPFound(location=self.req.route_url(self.list_route))
@staticmethod
def form_validator(form, value):
def form_validator(self, form, value):
pass
def get_params(self, params):
return get_params(params)
......
......@@ -77,6 +77,7 @@ class EditSchema(AddSchema):
missing=colander.drop,
widget=widget.HiddenWidget())
class ViewPartner(BaseView):
def __init__(self, request):
super(ViewPartner, self).__init__(request)
......@@ -170,7 +171,7 @@ class ViewPartner(BaseView):
{'title': "Jabatan", 'data': "jabatan"},
{'title': "Jenis Jabatan", 'data': "jenis"},
{'title': "Mulai", 'data': "mulai"},
{'title': "Selesai", 'data': "selesai"},]
{'title': "Selesai", 'data': "selesai"}, ]
self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \
'btn_close'
self.form_params = dict(scripts="")
......@@ -198,7 +199,6 @@ class ViewPartner(BaseView):
elif not value['partner_id']:
err_partner()
def get_form(self, class_form, row=None, buttons=(btn_save, btn_cancel)):
schema = class_form(validator=self.form_validator)
schema = schema.bind(request=self.req)
......@@ -215,7 +215,6 @@ class ViewPartner(BaseView):
PartnerDBSession.flush()
return row
def save_request(self, values, row=None):
request = self.req
if 'id' in request.matchdict:
......@@ -230,32 +229,27 @@ class ViewPartner(BaseView):
values['selesai'] = date_from_str(values['selesai'])
else:
values['selesai'] = None
query_struktural = DBSession.query(Jabatan.jenis).\
query_struktural = DBSession.query(Jabatan.jenis). \
filter(Jabatan.id == values['jabatan_id']).scalar()
values['struktural_id'] = query_struktural
row = self.save(values, request.user, row)
request.session.flash('Posisi Partner sudah disimpan.')
def route_list(self, ):
return HTTPFound(location=self.req.route_url(self.list_route))
def session_failed(self, session_name):
r = dict(form=self.request.session[session_name])
del self.request.session[session_name]
return r
def query_id(self):
return PartnerDBSession.query(PartnerDepartemen).filter_by(id=self.req.matchdict['id'])
def id_not_found(self):
msg = 'Posisi Partner ID %s Tidak Ditemukan.' % self.req.matchdict['id']
self.request.session.flash(msg, 'error')
return route_list()
self.req.session.flash(msg, 'error')
return self.route_list()
########
# List #
......@@ -414,7 +408,6 @@ class ViewPartner(BaseView):
form.set_appstruct(self.get_values(row, values))
return dict(form=form.render(readonly=True), scripts=self.form_scripts)
#########
# Add #
#########
......@@ -430,7 +423,7 @@ class ViewPartner(BaseView):
try:
controls = form.validate(controls)
except ValidationFailure as e:
form.render(appstruct = e.cstruct)
form.render(appstruct=e.cstruct)
return dict(form=form.render(), scripts=self.form_scripts)
self.save_request(dict(controls))
return self.route_list()
......@@ -522,7 +515,7 @@ class ViewPartner(BaseView):
if jb:
values['struktural_nm'] = jb.nama
form.set_appstruct(self.get_values(row, values))
return dict(row=row,form=form.render(readonly=True), scripts=self.form_scripts)
return dict(row=row, form=form.render(readonly=True), scripts=self.form_scripts)
def get_values(self, row, values=None):
if not values:
......
......@@ -4,14 +4,10 @@
home request.route_url('home')[:-1];
user_path ['user', 'user-add', 'user-edit', 'user-view', 'user-delete'];
group_path ['group', 'group-add', 'group-edit', 'group-view', 'group-delete'];
param_path ['parameter', 'parameter-add', 'parameter-edit', 'parameter-view',
'parameter-delete'];
dep_path ['departemen', 'departemen-add', 'departemen-edit',
'departemen-view', 'departemen-delete'];
partner_path ['partner', 'partner-add', 'partner-edit', 'partner-view',
'partner-delete'];
part_dep_path ['partner-departemen', 'partner-departemen-add',
'partner-departemen-edit', 'partner-departemen-view',
param_path ['parameter', 'parameter-add', 'parameter-edit', 'parameter-view', 'parameter-delete'];
dep_path ['departemen', 'departemen-add', 'departemen-edit', 'departemen-view', 'departemen-delete'];
partner_path ['partner', 'partner-add', 'partner-edit', 'partner-view', 'partner-delete'];
part_dep_path ['partner-departemen', 'partner-departemen-add', 'partner-departemen-edit', 'partner-departemen-view',
'partner-departemen-delete'];
jabatan_path ['jabatan', 'jabatan-add', 'jabatan-edit', 'jabatan-view',
'jabatan-delete'];
......@@ -59,7 +55,7 @@
<metal:css define-slot="css_files"></metal:css>
<style metal:define-slot="style">
.twitter-typeahead{
.twitter-typeahead {
font-size: 12px !important;
margin-bottom: 0;
width: 100%;
......@@ -67,7 +63,7 @@
position: absolute;
top: 0;
left: 0;
z-index:auto;
z-index: auto;
}
.twitter-typeahead .tt-query, .twitter-typeahead .tt-hint {
......@@ -78,7 +74,7 @@
position: absolute;
top: 0;
left: 0;
z-index:auto;
z-index: auto;
}
</style>
......@@ -125,7 +121,8 @@
</div>
<!-- collapse menu button -->
<div id="hide-menu" class="btn-header pull-right">
<span> <a href="javascript:void(0);" data-action="toggleMenu" title="Collapse Menu"><i class="fa fa-reorder"></i></a> </span>
<span> <a href="javascript:void(0);" data-action="toggleMenu" title="Collapse Menu"><i
class="fa fa-reorder"></i></a> </span>
</div>
<!-- end collapse menu -->
......@@ -140,11 +137,13 @@
<ul tal:condition="request.user" class="header-dropdown-list hidden-xs">
<li>
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-lg fa-fw fa-user"></i> <span
style="text-transform:capitalize"> ${request.user and request.user.nice_username() or ""} </span> <i
style="text-transform:capitalize"> ${request.user and request.user.nice_username() or ""} </span>
<i
class="fa fa-angle-down"></i> </a>
<ul class="dropdown-menu pull-right">
<li><a style="text-transform:capitalize" href="${request.route_url('logout')}">Logout</a></li>
<li><a style="text-transform:capitalize" href="${request.route_url('password')}">Ubah password</a></li>
<li><a style="text-transform:capitalize" href="${request.route_url('password')}">Ubah password</a>
</li>
<li tal:condition="request.user.api_key"><a
style="text-transform:capitalize"
href="${home}/recreate-api-key">API Key</a></li>
......
......@@ -37,18 +37,6 @@
<div id="content" class="container">
<div class="row">
<div class="col-sm-10 col-sm-offset-1">
<!--div class="col-sm-4 padding-thin">
<div class="box about">
<a href="#" data-toggle="modal"
data-target="#about-us"
style="color:#fff; text-decoration:none;">
<i class="fa fa-info-circle"></i>
<span class="about-text">Powered by</span>
<img id="" src="${home}static/img/opensipkd.png"
alt="">
</a>
</div>
</div-->
<div class="col-sm-12 padding-thin">
<div class="box appname">
<div class="col-sm-3 padding-medium" align="center">
......@@ -64,10 +52,17 @@
</div>
<div class="col-sm-12 no-padding" align="center">
<div tal:repeat="modul modules" class="col-sm-3 col-xs-6 module padding-thin">
<a href="${home}${modul}" icon="${modul.replace('/','_')}" class="box">
<a tal:condition="modul.find('://')<0"
href="${home}${modul}" icon="${modul.replace('/','_')}" class="box">
<img alt="" class="icon-modul" src="${home}static/icon/${modul.replace('/','_')}.png">
<span>${modules[modul]}</span>
</a>
<a tal:condition="modul.find('://')>-1" target="_blank"
href="${modul}" class="box">
<img alt="" class="icon-modul"
src="${home}static/icon/${modul.replace('://','').replace('https','').replace('http','')}.png">
<span>${modules[modul]}</span>
</a>
</div>
</div>
......
<html metal:use-macro="load: main.pt">
<!-- content -->
<div metal:fill-slot="content">
<!-- content -->
<div metal:fill-slot="content">
<div class="row">
......@@ -16,10 +16,9 @@
</div>
</div>
</div>
</div>
</div>
<!-- end content -->
</div>
<!-- end content -->
</html>
\ No newline at end of file
......@@ -51,11 +51,15 @@ class AddSchema(colander.Schema):
FileData(),
widget=widget.FileUploadWidget(tmpstore),
title='Unggah')
typ = colander.SchemaNode(
colander.String(),
widget=widget.SelectWidget(values=(('img', "Image"), ('icon', "Icon"))),
title='Jenis')
def get_form(schema_cls):
schema = schema_cls()
return Form(schema, buttons=('simpan', 'batalkan'))
return Form(schema, buttons=('simpan', 'batal'))
@view_config(route_name='upload-logo',
......@@ -65,7 +69,6 @@ def view_file(request):
form = get_form(AddSchema)
if request.POST:
if 'simpan' in request.POST:
settings = get_settings()
input_file = request.POST['upload'].file
filename = request.POST['upload'].filename.lower()
ext = get_ext(filename).lower()
......@@ -81,8 +84,13 @@ def view_file(request):
elif filename.startswith('background'):
fname = f"background{ext}"
else:
fname=filename
fullpath = os.path.join( static_path, 'img/'+fname)
fname = filename
folder = os.path.join(static_path, request.POST['typ'])
if not os.path.exists(folder):
os.makedirs(folder)
fullpath = os.path.join(folder, fname)
output_file = open(fullpath, 'wb')
input_file.seek(0)
while True:
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!