Commit 91807abe by pindya

update posisi pegawai, update routes.csv

1 parent ba3cbc53
......@@ -4,6 +4,7 @@ group_id/groups.group_name,perm_name
"Superuser","user-group"
"Superuser","upload-logo"
"Superuser","departemen"
"Superuser","partner-departemen"
"Superuser","partner"
"Superuser","parameter"
"Superuser","permission"
......
......@@ -6,6 +6,7 @@ user-group,User Group
edit-title,Edit Title
upload-logo,Upload Logo
departemen,Departemen
partner-departemen,Partner Departemen
partner,Partner
parameter,Parameter
permission,Permission
......
......@@ -77,9 +77,9 @@ partner-add,/partner/add,Partner Add
departemen,/departemen,Organisasi
departemen-act,/departemen/{act}/act,Organisasi Act
departemen-add,/departemen/add,Organisasi Tambah
departemen-edt,/departemen/{id}/edt,Organisasi Edit
departemen-edit,/departemen/{id}/edit,Organisasi Edit
departemen-view,/departemen/{id}/view,Organisasi view
departemen-del,/departemen/{id}/del,Organisasi Hapus
departemen-delete,/departemen/{id}/delete,Organisasi Hapus
departemen-rpt,/departemen/{rpt}/rpt,Organisasi Report
departemen-chg,/departemen/chg,Ubah Organisasi
departemen-upload,/departemen/upload,Upload Departemen,1,0
......
......@@ -192,7 +192,8 @@ class BaseView(object):
def get_values(self, row):
d = row.to_dict()
d["tanggal"] = dmy(row.tanggal)
if 'tanggal' in d and d['tanggal']:
d["tanggal"] = dmy(row.tanggal)
return d
def view_edit(self):
......
import colander
import json
from deform import (Form, widget, ValidationFailure, )
from pyramid.httpexceptions import (HTTPFound, )
from pyramid.view import (view_config, )
......@@ -9,6 +10,7 @@ from ..models import DBSession as PartnerDBSession, DBSession
from ..models import Departemen, Jabatan
from ..models import Partner, PartnerDepartemen
from opensipkd.tools import dmy, date_from_str
from opensipkd.tools.buttons import btn_cancel, btn_save, btn_delete, btn_close
from ..views import ColumnDT, DataTables, BaseView
SESS_ADD_FAILED = 'Tambah posisi partner gagal'
......@@ -62,10 +64,12 @@ class AddSchema(colander.Schema):
title="Jabatan")
mulai = colander.SchemaNode(
colander.String(),
oid="mulai")
oid="mulai",
widget=widget.TextInputWidget(css_class="date"))
selesai = colander.SchemaNode(
colander.String(),
oid="selesai")
oid="selesai",
widget=widget.TextInputWidget(css_class="date"))
class EditSchema(AddSchema):
......@@ -73,21 +77,199 @@ class EditSchema(AddSchema):
missing=colander.drop,
widget=widget.HiddenWidget())
class ViewPartner(BaseView):
def __init__(self, request):
super(ViewPartner, self).__init__(request)
self.form_scripts = """
$(document).ready(function () {
$('#pegawai_nm').typeahead({
"hint" : true,
"highlight": true,
"minLength": 1,
"remote" : {
url: "/partner/hon/act?term=%QUERY",
beforeSend: function () {
$('#partner_nm').addClass("loading");
},
filter: function(parsedResponse){
$('#partner_nm').removeClass('loading');
return parsedResponse;
}
},
},{
"name" : 'partner_nm',
"displayKey": 'value',
});
$('#partner_nm').bind('typeahead:selected', function(obj, datum, name) {
$('#partner_id').val(datum.id);
$('#partner_nm').val(datum.nama);
});
$('#departemen_nm').typeahead({
"hint" : true,
"highlight": true,
"minLength": 1,
"remote" : {
url: "/departemen/hon/act?term=%QUERY",
beforeSend: function () {
$('#departemen_nm').addClass("loading");
},
filter: function(parsedResponse){
$('#departemen_nm').removeClass('loading');
return parsedResponse;
}
},
},{
"name" : 'departemen_nm',
"displayKey": 'value',
});
$('#departemen_nm').bind('typeahead:selected', function(obj, datum, name) {
$('#departemen_id').val(datum.id);
});
$('#jabatan_nm').typeahead({
"hint" : true,
"highlight": true,
"minLength": 1,
"remote" : {
url: "/partner/departemen/hon_jabatannm/act?term=%QUERY",
beforeSend: function () {
$('#jabatan_nm').addClass("loading");
},
filter: function(parsedResponse){
$('#jabatan_nm').removeClass('loading');
return parsedResponse;
}
},
},{
"name" : 'jabatan_nm',
"displayKey": 'value',
});
$('#jabatan_nm').bind('typeahead:selected', function(obj, datum, name) {
$('#jabatan_id').val(datum.id);
$('#jabatan_nm').val(datum.value);
});
});
"""
self.list_col_defs = json.dumps(
[{"searchable": False, "visible": False, "targets": [0], }, {
"searchable": True, "orderable": True, "targets": [1, 2],
}])
self.list_cols = [{'title': "ID", 'data': "id"},
{'title': "NIP", 'data': "nik", 'width': '100pt'},
{'title': "Nama", 'data': "nama"},
{'title': "Unit Kerja", 'data': "departemen"},
{'title': "Jabatan", 'data': "jabatan"},
{'title': "Jenis Jabatan", 'data': "jenis"},
{'title': "Mulai", 'data': "mulai"},
{'title': "Selesai", 'data': "selesai"},]
self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \
'btn_close'
self.form_params = dict(scripts="")
self.list_url = 'partner/departemen'
self.list_route = 'partner-departemen'
@staticmethod
def form_validator(form, value):
def err_partner():
raise colander.Invalid(form,
'Partner Belum Dipilih')
def err_departemen():
raise colander.Invalid(form,
'Departemen Kerja Belum Dipilih')
def err_jabatan():
raise colander.Invalid(form,
'Partner Belum Dipilih')
if not value['jabatan_id']:
err_jabatan()
elif not value['departemen_id']:
err_departemen()
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)
schema.request = self.req
if row:
schema.deserialize(row)
return Form(schema, buttons=buttons)
def save(self, values, user, row=None):
if not row:
row = PartnerDepartemen()
row.from_dict(values)
PartnerDBSession.add(row)
PartnerDBSession.flush()
return row
def save_request(self, values, row=None):
request = self.req
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
if 'mulai' in values:
if values['mulai']:
values['mulai'] = date_from_str(values['mulai'])
else:
values['mulai'] = None
if 'selesai' in values:
if values['selesai']:
values['selesai'] = date_from_str(values['selesai'])
else:
values['selesai'] = None
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()
########
# List #
########
@view_config(route_name='partner-departemen', renderer='templates/posisi/list.pt',
permission='partner-departemen')
@view_config(route_name='partner-departemen', renderer='templates/list.pt',
permission='view')
def view_list(self):
return dict(a={})
return super().view_list()
##########
# Action #
##########
@view_config(route_name='partner-departemen-act', renderer='json',
permission='read')
permission='view')
def view_act(self):
request = self.req
ses = request.session
......@@ -204,63 +386,84 @@ class ViewPartner(BaseView):
r.append(d)
return r
@view_config(route_name='partner-departemen-view',
renderer='templates/form_input.pt', permission='partner-departemen')
def view_view(self): # row = query_id(request).first()
request = self.req
row = self.query_id().first()
if not row:
return self.id_not_found()
form = self.get_form(EditSchema, buttons=(btn_close,))
if request.POST:
return self.route_list()
values = row.to_dict()
values['nama'] = row.partner.nama
values['jabatan'] = row.jabatan.nama
values['departemen'] = row.departemen.nama
values['mulai'] = dmy(row.mulai)
values['selesai'] = dmy(row.selesai)
if not row.struktural_id:
values['struktural_id'] = 0
else:
jb = Jabatan.query_id(row.struktural_id).first()
if jb:
values['struktural_nm'] = jb.nama
form.set_appstruct(self.get_values(row, values))
return dict(form=form.render(readonly=True), scripts=self.form_scripts)
#########
# Add #
#########
@view_config(route_name='partner-departemen-add', renderer='templates/posisi/add.pt',
permission='partner-departemen-add')
@view_config(route_name='partner-departemen-add', renderer='templates/form_input.pt',
permission='partner-departemen')
def view_add(self):
request = self.req
form = get_form(request, AddSchema)
form = self.get_form(AddSchema)
values = {}
if request.POST:
if 'simpan' in request.POST:
if 'save' in request.POST:
controls = request.POST.items()
try:
controls = form.validate(controls)
except ValidationFailure as e:
# form.render(appstruct = e.cstruct)
return dict(form=form)
save_request(request, dict(controls))
return route_list(request)
elif SESS_ADD_FAILED in request.session:
return session_failed(request, SESS_ADD_FAILED)
form.render(appstruct = e.cstruct)
return dict(form=form.render(), scripts=self.form_scripts)
self.save_request(dict(controls))
return self.route_list()
values['departemen_id'] = self.ses['departemen_id']
values['departemen_nm'] = self.ses['departemen_nm']
values['departemen_kd'] = self.ses['departemen_kd']
# values['jabatan_id'] = self.ses['jabatan']
# values['partner_id'] = self.ses['partner_id']
form.set_appstruct(values)
return dict(form=form)
# return dict(form=form.render())
return dict(form=form.render(), scripts=self.form_scripts)
##########
# Edit #
##########
@view_config(route_name='partner-departemen-edit', renderer='templates/posisi/edt.pt',
@view_config(route_name='partner-departemen-edit', renderer='templates/form_input.pt',
permission='partner-departemen')
def view_edt(self):
request = self.req
q = query_id(request)
row = q.first()
row = self.query_id().first()
if not row:
return id_not_found(request)
uid = row.id
return self.id_not_found()
form = get_form(request, EditSchema)
form = self.get_form(EditSchema)
if request.POST:
if 'simpan' in request.POST:
if 'save' in request.POST:
controls = request.POST.items()
try:
controls = form.validate(controls)
except ValidationFailure as e:
form.render(appstruct=e.cstruct)
return dict(form=form)
return dict(form=form.render(), scripts=self.form_scripts)
self.save_request(dict(controls), row)
return self.route_list()
save_request(request, dict(controls), row)
return route_list(request)
elif SESS_EDIT_FAILED in request.session:
return self.session_failed(SESS_EDIT_FAILED)
values = row.to_dict()
values['nama'] = row.partner.nama
values['jabatan'] = row.jabatan.nama
......@@ -274,25 +477,24 @@ class ViewPartner(BaseView):
if jb:
values['struktural_nm'] = jb.nama
form.render(appstruct=values)
return dict(form=form)
form.set_appstruct(self.get_values(row, values))
return dict(form=form.render(), scripts=self.form_scripts)
##########
# Delete #
##########
@view_config(route_name='partner-departemen-delete', renderer='templates/posisi/del.pt',
permission='partner-departemen-delete')
@view_config(route_name='partner-departemen-delete', renderer='templates/form_input.pt',
permission='partner-departemen')
def view_del(self):
request = self.req
q = query_id(request)
q = self.query_id()
row = q.first()
if not row:
return id_not_found(request)
return self.id_not_found()
form = Form(colander.Schema(), buttons=('hapus', 'batal'))
if request.POST:
if 'hapus' in request.POST:
if 'delete' in request.POST:
msg = 'Posisi Partner ID %d %s sudah dihapus.' % (row.id, row.partner.nama)
# qry_login = PartnerLogin.query_partner(request.params['id'])
# if qry_login.first():
......@@ -304,91 +506,26 @@ class ViewPartner(BaseView):
q.delete()
PartnerDBSession.flush()
request.session.flash(msg)
return route_list(request)
return dict(row=row, form=form.render())
def form_validator(form, value):
def err_partner():
raise colander.Invalid(form,
'Partner Belum Dipilih')
def err_departemen():
raise colander.Invalid(form,
'Departemen Kerja Belum Dipilih')
def err_jabatan():
raise colander.Invalid(form,
'Partner Belum Dipilih')
if not value['jabatan_id']:
err_jabatan()
elif not value['departemen_id']:
err_departemen()
elif not value['partner_id']:
err_partner()
def get_form(request, class_form, row=None):
schema = class_form(validator=form_validator)
schema = schema.bind()
schema.request = request
if row:
schema.deserialize(row)
return Form(schema, buttons=('simpan', 'batal'))
def save(values, request, row=None):
if not row:
row = PartnerDepartemen()
row.from_dict(values)
PartnerDBSession.add(row)
PartnerDBSession.flush()
return row
# if not row:
# row = Produk()
# row.from_dict(values)
# DBSession.add(row)
# DBSession.flush()
# return row
def save_request(request, values, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
if 'mulai' in values:
if values['mulai']:
values['mulai'] = date_from_str(values['mulai'])
else:
values['mulai'] = None
if 'selesai' in values:
if values['selesai']:
values['selesai'] = date_from_str(values['selesai'])
return self.route_list()
form = self.get_form(EditSchema,
buttons=(btn_delete, btn_cancel))
values = row.to_dict()
values['nama'] = row.partner.nama
values['jabatan'] = row.jabatan.nama
values['departemen'] = row.departemen.nama
values['mulai'] = dmy(row.mulai)
values['selesai'] = dmy(row.selesai)
if not row.struktural_id:
values['struktural_id'] = 0
else:
values['selesai'] = None
query_struktural = DBSession.query(Jabatan.jenis).\
filter(Jabatan.id == values['jabatan_id']).scalar()
values['struktural_id'] = query_struktural
row = save(values, request, row)
request.session.flash('Posisi Partner sudah disimpan.')
def route_list(request):
return HTTPFound(location=request.route_url('partner-departemen'))
def session_failed(request, session_name):
r = dict(form=request.session[session_name])
del request.session[session_name]
return r
def query_id(request):
return PartnerDBSession.query(PartnerDepartemen).filter_by(id=request.matchdict['id'])
jb = Jabatan.query_id(row.struktural_id).first()
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)
def get_values(self, row, values=None):
if not values:
values = row.to_dict()
def id_not_found(request):
msg = 'Posisi Partner ID %s Tidak Ditemukan.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
return values
\ No newline at end of file
......@@ -58,7 +58,29 @@
<link href="${home}/static/css/custom.css" rel="stylesheet" type="text/css">
<metal:css define-slot="css_files"></metal:css>
<style metal:define-slot="style"></style>
<style metal:define-slot="style">
.twitter-typeahead{
font-size: 12px !important;
margin-bottom: 0;
width: 100%;
height: 26px;
position: absolute;
top: 0;
left: 0;
z-index:auto;
}
.twitter-typeahead .tt-query, .twitter-typeahead .tt-hint {
font-size: 12px !important;
margin-bottom: 0;
width: 100%;
height: 26px;
position: absolute;
top: 0;
left: 0;
z-index:auto;
}
</style>
</head>
......
......@@ -74,7 +74,7 @@
});
$("#btn_close").click(function () {
window.location = '${home}pbb/master';
window.location = '${home}';
return false;
});
......
......@@ -84,11 +84,32 @@ class ViewDepartemen(BaseView):
def __init__(self, request):
super(ViewDepartemen, self).__init__(request)
self.form_scripts = """
$('#parent_nm').bind('typeahead:selected', function(obj, datum) {
$('#parent_id').val(datum.id);
$('#parent_kd').val(datum.kode);
});"""
$(document).ready(function () {
$('#parent_nm').typeahead({
"hint" : true,
"highlight": true,
"minLength": 1,
"remote" : {
url: "/departemen/hon/act?term=%QUERY",
beforeSend: function () {
$('#parent_nm').addClass("loading");
},
filter: function(parsedResponse){
$('#parent_nm').removeClass('loading');
return parsedResponse;
}
},
},{
"name" : 'parent_nm',
"displayKey": 'value',
});
$('#parent_nm').bind('typeahead:selected', function(obj, datum, name) {
$('#parent_id').val(datum.id);
$('#parent_kd').val(datum.kode);
});
});
"""
self.list_col_defs = json.dumps(
[{"searchable": False, "visible": False, "targets": [0], }, {
......@@ -355,7 +376,7 @@ class ViewDepartemen(BaseView):
########
# Edit #
########
@view_config(route_name='departemen-edt',
@view_config(route_name='departemen-edit',
renderer='templates/form_input.pt', permission='departemen')
def view_edt(self):
request = self.req
......@@ -381,7 +402,7 @@ class ViewDepartemen(BaseView):
##########
# Delete #
##########
@view_config(route_name='departemen-del',
@view_config(route_name='departemen-delete',
renderer='templates/form_input.pt', permission='departemen')
def view_delete(self):
request = self.req
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!