Commit 89c9884a by aa.gusti

perbaikan menus dan upload

1 parent 7611904f
...@@ -105,6 +105,8 @@ ENV/ ...@@ -105,6 +105,8 @@ ENV/
opensipkd/base/static/img/* opensipkd/base/static/img/*
opensipkd/base/static/icon/*
!opensipkd/base/static/icon/default.png
!opensipkd/base/static/img/pyramid.png !opensipkd/base/static/img/pyramid.png
!opensipkd/base/static/img/opensipkd.png !opensipkd/base/static/img/opensipkd.png
!opensipkd/base/static/img/opensipkd_bg.png !opensipkd/base/static/img/opensipkd_bg.png
......
...@@ -248,7 +248,13 @@ def get_menus(request): ...@@ -248,7 +248,13 @@ def get_menus(request):
result = {} result = {}
for menu in menus: 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, val = menu.strip().split(':')
key = key.strip().strip('/') key = key.strip().strip('/')
val = re.sub('[//-]', ' ', val) val = re.sub('[//-]', ' ', val)
......
...@@ -52,9 +52,7 @@ def get_file(filename): ...@@ -52,9 +52,7 @@ def get_file(filename):
return open(fullpath) return open(fullpath)
def restore_csv(table, filename, get_file_func=get_file, db_session=None): def restore_csv(table, filename, get_file_func=get_file, db_session=DBSession):
if not db_session:
db_session = DBSession
q = db_session.query(table) q = db_session.query(table)
if q.first(): if q.first():
return return
...@@ -65,20 +63,36 @@ def restore_csv(table, filename, get_file_func=get_file, db_session=None): ...@@ -65,20 +63,36 @@ def restore_csv(table, filename, get_file_func=get_file, db_session=None):
is_first = True is_first = True
fmap = dict() fmap = dict()
for cf in reader: for cf in reader:
# print(cf)
# sys.exit()
if is_first: if is_first:
is_first = False
for fieldname in cf.keys(): for fieldname in cf.keys():
t = fieldname.split('/') if not fieldname:
continue
try:
t = fieldname.split('/')
except Exception as e:
print(fieldname, cf.keys())
raise e
fname_orig = t[0] fname_orig = t[0]
schema = "public"
if t[1:]: if t[1:]:
foreign_table, foreign_field = t[1].split('.') t_array = t[1].split('.')
foreign_table = Table(foreign_table, Base.metadata, autoload=True) 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) foreign_field = getattr(foreign_table.c, foreign_field)
foreigns[fieldname] = (foreign_table, foreign_field) foreigns[fieldname] = (foreign_table, foreign_field)
fmap[fieldname] = fname_orig fmap[fieldname] = fname_orig
is_first = False
row = table() row = table()
for fieldname in cf: for fieldname in cf:
...@@ -122,7 +136,6 @@ def append_csv(table, filename, keys, get_file_func=get_file, ...@@ -122,7 +136,6 @@ def append_csv(table, filename, keys, get_file_func=get_file,
foreigns = dict() foreigns = dict()
is_first = True is_first = True
fmap = dict() fmap = dict()
print(f, reader)
for cf in reader: for cf in reader:
if is_first: if is_first:
is_first = False is_first = False
...@@ -136,19 +149,19 @@ def append_csv(table, filename, keys, get_file_func=get_file, ...@@ -136,19 +149,19 @@ def append_csv(table, filename, keys, get_file_func=get_file,
raise e raise e
fname_orig = t[0] fname_orig = t[0]
schema="public" schema = "public"
if t[1:]: if t[1:]:
t_array = t[1].split('.') t_array = t[1].split('.')
if len(t_array)==2: if len(t_array) == 2:
foreign_table=t_array[0] foreign_table = t_array[0]
foreign_field = t_array[1] foreign_field = t_array[1]
else: else:
schema=t_array[0] schema = t_array[0]
foreign_table=t_array[1] foreign_table = t_array[1]
foreign_field = t_array[2] foreign_field = t_array[2]
foreign_table = Table(foreign_table, Base.metadata, autoload=True, foreign_table = Table(foreign_table, Base.metadata,
schema=schema) autoload=True, schema=schema)
foreign_field = getattr(foreign_table.c, foreign_field) foreign_field = getattr(foreign_table.c, foreign_field)
foreigns[fname] = (foreign_table, foreign_field) foreigns[fname] = (foreign_table, foreign_field)
...@@ -204,6 +217,7 @@ def append_csv(table, filename, keys, get_file_func=get_file, ...@@ -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 transaction.commit() # diperlukan commit per record khususnya untuk yang internal link
def ask_password(name): def ask_password(name):
while True: while True:
pass1 = getpass('Tulis password untuk {}: '.format(name)) pass1 = getpass('Tulis password untuk {}: '.format(name))
......
...@@ -227,9 +227,6 @@ button { ...@@ -227,9 +227,6 @@ button {
border-color: #f39c12 border-color: #f39c12
} }
// from application implementation
table.dataTable tr.selected td { table.dataTable tr.selected td {
background-color: #9fafd1 background-color: #9fafd1
...@@ -277,7 +274,7 @@ div.dataTables_length label { ...@@ -277,7 +274,7 @@ div.dataTables_length label {
.ui-autocomplete-loading { .ui-autocomplete-loading {
padding-right:10px; 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 { .ui-autocomplete {
max-height: 200px; max-height: 200px;
......
...@@ -112,12 +112,13 @@ class BaseView(object): ...@@ -112,12 +112,13 @@ class BaseView(object):
self.add_schema = "" self.add_schema = ""
self.table = "" self.table = ""
def route_list(self, ): def route_list(self, msg=None, error=""):
return HTTPFound(location=self.req.route_url(self.list_route)) return HTTPFound(location=self.req.route_url(self.list_route))
@staticmethod
def form_validator(form, value): def form_validator(self, form, value):
pass pass
def get_params(self, params): def get_params(self, params):
return get_params(params) return get_params(params)
......
...@@ -77,6 +77,7 @@ class EditSchema(AddSchema): ...@@ -77,6 +77,7 @@ class EditSchema(AddSchema):
missing=colander.drop, missing=colander.drop,
widget=widget.HiddenWidget()) widget=widget.HiddenWidget())
class ViewPartner(BaseView): class ViewPartner(BaseView):
def __init__(self, request): def __init__(self, request):
super(ViewPartner, self).__init__(request) super(ViewPartner, self).__init__(request)
...@@ -165,12 +166,12 @@ class ViewPartner(BaseView): ...@@ -165,12 +166,12 @@ class ViewPartner(BaseView):
}]) }])
self.list_cols = [{'title': "ID", 'data': "id"}, self.list_cols = [{'title': "ID", 'data': "id"},
{'title': "NIP", 'data': "nik", 'width': '100pt'}, {'title': "NIP", 'data': "nik", 'width': '100pt'},
{'title': "Nama", 'data': "nama"}, {'title': "Nama", 'data': "nama"},
{'title': "Unit Kerja", 'data': "departemen"}, {'title': "Unit Kerja", 'data': "departemen"},
{'title': "Jabatan", 'data': "jabatan"}, {'title': "Jabatan", 'data': "jabatan"},
{'title': "Jenis Jabatan", 'data': "jenis"}, {'title': "Jenis Jabatan", 'data': "jenis"},
{'title': "Mulai", 'data': "mulai"}, {'title': "Mulai", 'data': "mulai"},
{'title': "Selesai", 'data': "selesai"},] {'title': "Selesai", 'data': "selesai"}, ]
self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \ self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \
'btn_close' 'btn_close'
self.form_params = dict(scripts="") self.form_params = dict(scripts="")
...@@ -198,7 +199,6 @@ class ViewPartner(BaseView): ...@@ -198,7 +199,6 @@ class ViewPartner(BaseView):
elif not value['partner_id']: elif not value['partner_id']:
err_partner() err_partner()
def get_form(self, class_form, row=None, buttons=(btn_save, btn_cancel)): def get_form(self, class_form, row=None, buttons=(btn_save, btn_cancel)):
schema = class_form(validator=self.form_validator) schema = class_form(validator=self.form_validator)
schema = schema.bind(request=self.req) schema = schema.bind(request=self.req)
...@@ -215,7 +215,6 @@ class ViewPartner(BaseView): ...@@ -215,7 +215,6 @@ class ViewPartner(BaseView):
PartnerDBSession.flush() PartnerDBSession.flush()
return row return row
def save_request(self, values, row=None): def save_request(self, values, row=None):
request = self.req request = self.req
if 'id' in request.matchdict: if 'id' in request.matchdict:
...@@ -230,32 +229,27 @@ class ViewPartner(BaseView): ...@@ -230,32 +229,27 @@ class ViewPartner(BaseView):
values['selesai'] = date_from_str(values['selesai']) values['selesai'] = date_from_str(values['selesai'])
else: else:
values['selesai'] = None values['selesai'] = None
query_struktural = DBSession.query(Jabatan.jenis).\ query_struktural = DBSession.query(Jabatan.jenis). \
filter(Jabatan.id == values['jabatan_id']).scalar() filter(Jabatan.id == values['jabatan_id']).scalar()
values['struktural_id'] = query_struktural values['struktural_id'] = query_struktural
row = self.save(values, request.user, row) row = self.save(values, request.user, row)
request.session.flash('Posisi Partner sudah disimpan.') request.session.flash('Posisi Partner sudah disimpan.')
def route_list(self, ): def route_list(self, ):
return HTTPFound(location=self.req.route_url(self.list_route)) return HTTPFound(location=self.req.route_url(self.list_route))
def session_failed(self, session_name): def session_failed(self, session_name):
r = dict(form=self.request.session[session_name]) r = dict(form=self.request.session[session_name])
del self.request.session[session_name] del self.request.session[session_name]
return r return r
def query_id(self): def query_id(self):
return PartnerDBSession.query(PartnerDepartemen).filter_by(id=self.req.matchdict['id']) return PartnerDBSession.query(PartnerDepartemen).filter_by(id=self.req.matchdict['id'])
def id_not_found(self): def id_not_found(self):
msg = 'Posisi Partner ID %s Tidak Ditemukan.' % self.req.matchdict['id'] msg = 'Posisi Partner ID %s Tidak Ditemukan.' % self.req.matchdict['id']
self.request.session.flash(msg, 'error') self.req.session.flash(msg, 'error')
return route_list() return self.route_list()
######## ########
# List # # List #
...@@ -414,7 +408,6 @@ class ViewPartner(BaseView): ...@@ -414,7 +408,6 @@ class ViewPartner(BaseView):
form.set_appstruct(self.get_values(row, values)) form.set_appstruct(self.get_values(row, values))
return dict(form=form.render(readonly=True), scripts=self.form_scripts) return dict(form=form.render(readonly=True), scripts=self.form_scripts)
######### #########
# Add # # Add #
######### #########
...@@ -430,7 +423,7 @@ class ViewPartner(BaseView): ...@@ -430,7 +423,7 @@ class ViewPartner(BaseView):
try: try:
controls = form.validate(controls) controls = form.validate(controls)
except ValidationFailure as e: except ValidationFailure as e:
form.render(appstruct = e.cstruct) form.render(appstruct=e.cstruct)
return dict(form=form.render(), scripts=self.form_scripts) return dict(form=form.render(), scripts=self.form_scripts)
self.save_request(dict(controls)) self.save_request(dict(controls))
return self.route_list() return self.route_list()
...@@ -522,10 +515,10 @@ class ViewPartner(BaseView): ...@@ -522,10 +515,10 @@ class ViewPartner(BaseView):
if jb: if jb:
values['struktural_nm'] = jb.nama values['struktural_nm'] = jb.nama
form.set_appstruct(self.get_values(row, values)) 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): def get_values(self, row, values=None):
if not values: if not values:
values = row.to_dict() values = row.to_dict()
return values
\ No newline at end of file \ No newline at end of file
return values
...@@ -37,18 +37,6 @@ ...@@ -37,18 +37,6 @@
<div id="content" class="container"> <div id="content" class="container">
<div class="row"> <div class="row">
<div class="col-sm-10 col-sm-offset-1"> <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="col-sm-12 padding-thin">
<div class="box appname"> <div class="box appname">
<div class="col-sm-3 padding-medium" align="center"> <div class="col-sm-3 padding-medium" align="center">
...@@ -64,10 +52,17 @@ ...@@ -64,10 +52,17 @@
</div> </div>
<div class="col-sm-12 no-padding" align="center"> <div class="col-sm-12 no-padding" align="center">
<div tal:repeat="modul modules" class="col-sm-3 col-xs-6 module padding-thin"> <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"> <img alt="" class="icon-modul" src="${home}static/icon/${modul.replace('/','_')}.png">
<span>${modules[modul]}</span> <span>${modules[modul]}</span>
</a> </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>
</div> </div>
......
<html metal:use-macro="load: main.pt"> <html metal:use-macro="load: main.pt">
<!-- content --> <!-- content -->
<div metal:fill-slot="content"> <div metal:fill-slot="content">
<div class="row"> <div class="row">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
<div class="col-md-10 col-md-offset-1"> <div class="col-md-10 col-md-offset-1">
<blockquote> <blockquote>
<p>Untuk Background, beri nama background pada file<br>Untuk Logo beri nama logo pada file</p> <p>Untuk Background, beri nama background pada file<br>Untuk Logo beri nama logo pada file</p>
</blockquote> </blockquote>
<div tal:content="structure form"/> <div tal:content="structure form"/>
</div>
</div>
</div> </div>
</div>
</div> </div>
</div> </div>
<!-- end content -->
</div>
<!-- end content -->
</html> </html>
\ No newline at end of file \ No newline at end of file
...@@ -51,11 +51,15 @@ class AddSchema(colander.Schema): ...@@ -51,11 +51,15 @@ class AddSchema(colander.Schema):
FileData(), FileData(),
widget=widget.FileUploadWidget(tmpstore), widget=widget.FileUploadWidget(tmpstore),
title='Unggah') title='Unggah')
typ = colander.SchemaNode(
colander.String(),
widget=widget.SelectWidget(values=(('img', "Image"), ('icon', "Icon"))),
title='Jenis')
def get_form(schema_cls): def get_form(schema_cls):
schema = schema_cls() schema = schema_cls()
return Form(schema, buttons=('simpan', 'batalkan')) return Form(schema, buttons=('simpan', 'batal'))
@view_config(route_name='upload-logo', @view_config(route_name='upload-logo',
...@@ -65,7 +69,6 @@ def view_file(request): ...@@ -65,7 +69,6 @@ def view_file(request):
form = get_form(AddSchema) form = get_form(AddSchema)
if request.POST: if request.POST:
if 'simpan' in request.POST: if 'simpan' in request.POST:
settings = get_settings()
input_file = request.POST['upload'].file input_file = request.POST['upload'].file
filename = request.POST['upload'].filename.lower() filename = request.POST['upload'].filename.lower()
ext = get_ext(filename).lower() ext = get_ext(filename).lower()
...@@ -81,8 +84,13 @@ def view_file(request): ...@@ -81,8 +84,13 @@ def view_file(request):
elif filename.startswith('background'): elif filename.startswith('background'):
fname = f"background{ext}" fname = f"background{ext}"
else: else:
fname=filename fname = filename
fullpath = os.path.join( static_path, 'img/'+fname) 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') output_file = open(fullpath, 'wb')
input_file.seek(0) input_file.seek(0)
while True: while True:
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!