Refactor .gitignore, enhance __init__.py with mimetypes import, add upload metho…

…d in base.py, update routes.csv with new route, modify initializedb.py comments, improve base_views.py with deferred status, clean up 500.pt and maps.pt templates, and implement departemen_chg.py for department management.
1 parent d8777b0b
......@@ -25,7 +25,7 @@ sdist/
var/
wheels/
inventori/
local/*
local/
*.egg-info/
.installed.cfg
*.egg
......
......@@ -7,6 +7,8 @@ import re
import datetime
import decimal
import deform
import mimetypes
from pkg_resources import resource_filename
from pyramid.renderers import JSON
from pyramid_beaker import session_factory_from_settings
......
......@@ -3,6 +3,8 @@ from datetime import datetime
import ziggurat_foundations.models
from opensipkd.tools import as_timezone
from opensipkd.tools.upload import append_csv
from sqlalchemy import Column, String, SmallInteger, Integer, DateTime, func, Numeric
from sqlalchemy import inspect as sa_inspect
from sqlalchemy.ext.hybrid import hybrid_property
......@@ -18,6 +20,7 @@ class MySession(Session):
session_factory = sessionmaker(class_=MySession)
DBSession = scoped_session(session_factory)
register(DBSession)
ziggurat_foundations.models.DBSession = DBSession
TABLE_ARGS = dict(extend_existing=True, schema="public")
......@@ -78,6 +81,11 @@ class CommonModel(object):
date_ = getattr(self, fieldname)
return date_ and as_timezone(date_) or None
@classmethod
def upload(cls, file, keys, **kwargs):
append_csv(cls, file, keys, get_file_func=get_file,
db_session=cls.db_session, dbase=Base, **kwargs)
class DefaultModel(CommonModel):
id = Column(Integer, primary_key=True)
......
......@@ -46,6 +46,7 @@ base-departemen-edit,/departemen/{id}/edit,base,departemen,,,,admin,base-departe
base-departemen-view,/departemen/{id}/view,base,departemen,,,,admin,base-departemen,Departemen View,1,0,,,form6.pt,
base-departemen-delete,/departemen/{id}/delete,base,departemen,,,,admin,base-departemen,Departemen Delete,1,0,,,form6.pt,
base-departemen-upload,/departemen/upload,base,departemen,,,,admin,base-departemen,Departemen Uload,1,0,,,form6.pt,
departemen-chg,/departemen/change,base,departemen_chg,,view_change,,dept-change,,Ubah Departemen,1,0,,,form.pt,
base-provinsi,/provinsi,base,provinsi,,view_list,,admin,base-admin,Provinsi,1,0,,1,form.pt,
base-provinsi-act,/provinsi/{act}/act,base,provinsi,,,,admin,base-provinsi,Provinsi Action,1,0,,,json,
base-provinsi-add,/provinsi/add,base,provinsi,,,,admin,base-provinsi,Provinsi Add,1,0,,,form6.pt,
......
......@@ -189,7 +189,7 @@ def restore_csv(table, filename, get_file_func=get_file, db_session=DBSession):
return True
# def append_csv(table, filename, keys, get_file_func=get_file):
# def append_csv(table, filename, keys, t_func=get_file):
# def append_csv(table, filename, keys, get_file_func=get_file, db_session=DBSession):
# Feb 10, 2018 by aagusti
# penambahan parameter db_sesion apabila caller mempunyai db_sesion yang berbeda
......
......@@ -1198,11 +1198,13 @@ class BaseView(object):
def get_partner(self):
return Partner.query_email(self.req.user.email).first()
@colander.deferred
def deferred_status(node, kw):
values = kw.get('daftar_status', [])
return widget.SelectWidget(values=values)
"""
# @colander.deferred
# def deferred_status(node, kw):
# values = kw.get('daftar_status', [])
# return widget.SelectWidget(values=values)
# def email_validator(node, value):
......
import colander
from deform import (widget, )
from opensipkd.models import Departemen
from deform.exception import (ValidationFailure)
from pyramid.httpexceptions import (HTTPFound)
from urllib3 import request
from ..views import BaseView
SESS_ADD_FAILED = 'Tambah departemen gagal'
SESS_EDIT_FAILED = 'Edit departemen gagal'
class AddSchema(colander.Schema):
departemen_id = colander.SchemaNode(
colander.Integer(),
widget = widget.Select2Widget(),
)
def after_bind(self, schema, kwargs):
request = kwargs["request"]
schema["departemen_id"].widget.values = kwargs.get("departemens", [])
class Views(BaseView):
def __init__(self, request):
super().__init__(request)
self.add_schema = AddSchema
self.table = Departemen
def get_bindings(self, row=None):
departemens = self.table.get_list()
return {"departemens": departemens}
def view_change(self):
next_url = self.req.params.get('next')
if not next_url:
next_url = self.req.referrer or self.req.route_url('base-home')
return HTTPFound(self.req.route_url('departemen-chg', _query={'next': next_url}))
if self.req.POST:
if 'save' in self.req.POST:
form = self.get_form(self.add_schema)
controls = self.req.POST.items()
try:
appstruct = form.validate(controls)
except ValidationFailure as e:
return self.returned_form(e)
departemen_id = appstruct['departemen_id']
row = self.table.query_id(departemen_id).first()
self.ses['departemen_id'] = departemen_id
self.ses['departemen_nm'] = row and row.nama or "Select Departemen"
self.ses['departemen_kd']= row and row.kode or ""
self.ses["dept_id"] = departemen_id
return HTTPFound(next_url)
return super().view_add()
\ No newline at end of file
<html>
<body>
<div class="well">
<h3>Internal Server Error</h3>
<!-- Error session flash -->
<div tal:condition="request.session.peek_flash()">
<div class="alert alert-success" tal:repeat="message request.session.pop_flash()"><i class="fa fa-fw fa-lg fa-check-circle"></i>&nbsp;${message}</div>
<div class="alert alert-success" tal:repeat="message request.session.pop_flash()"><i
class="fa fa-fw fa-lg fa-check-circle"></i>&nbsp;${message}</div>
</div>
<div tal:condition="request.session.peek_flash('error')">
<div class="alert alert-danger" tal:repeat="message request.session.pop_flash('error')"><i class="fa fa-fw fa-lg fa-times-circle"></i>&nbsp;${message}</div>
<div class="alert alert-danger" tal:repeat="message request.session.pop_flash('error')"><i
class="fa fa-fw fa-lg fa-times-circle"></i>&nbsp;${message}</div>
</div>
<!-- Error session flash -->
<p><img src="${request._host}/static/img/logo.png" class="img-float img-thumbnail"/></p>
<p><img src="${home}/static/img/logo.png" class="img-float img-thumbnail" /></p>
Halaman yang anda cari tidak ada
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en"
tal:define="
home request._host;">
<html lang="en" tal:define="
home home;">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
......@@ -9,41 +9,44 @@
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="${home}/static/img/favicon.png">
<title tal:content="request.title"/>
<link rel="stylesheet" type="text/css"
href="${home}/static/v3/css/bootstrap.min.css">
<title tal:content="request.title" />
<link rel="stylesheet" type="text/css" href="${home}/static/v3/css/bootstrap.min.css">
</link>
<link rel="stylesheet" type="text/css"
href="${home}/static/bootstrap/css/font-awesome.min.css"/>
<link rel="stylesheet" type="text/css" href="${home}/static/bootstrap/css/font-awesome.min.css" />
<link rel="stylesheet" type="text/css" href="${home}/deform_static/css/typeahead.css">
<link rel="stylesheet" type="text/css" href="${home}/static_map/lib/ol4/ol.css"/>
<link rel="stylesheet" type="text/css" href="${home}/static_map/lib/ol4/ext/ol3-layerswitcher.css"/>
<link rel="stylesheet" type="text/css" href="${home}/static_map/lib/ol4/ext/ol3gm.css"/>
<link rel="stylesheet" type="text/css" href="${home}/static_map/lib/ol4/ext/ol-geocoder.css"/>
<link rel="stylesheet" type="text/css" href="${home}/static_map/lib/ol4/ol.css" />
<link rel="stylesheet" type="text/css" href="${home}/static_map/lib/ol4/ext/ol3-layerswitcher.css" />
<link rel="stylesheet" type="text/css" href="${home}/static_map/lib/ol4/ext/ol3gm.css" />
<link rel="stylesheet" type="text/css" href="${home}/static_map/lib/ol4/ext/ol-geocoder.css" />
<link rel="stylesheet" type="text/css" href="${home}/static/css/theme.css">
<link rel="stylesheet" type="text/css" href="${home}/static/css/navbar-fixed-top.css">
<link metal:define-slot="link"/>
<link metal:define-slot="link" />
<style>
html{ height:100%;}
.body { height:100%;}
html {
height: 100%;
}
.body {
height: 100%;
}
body {
overflow: hidden;
padding-top: 40px;
}
</style>
</head>
<script>
var vhost='${request._host}';
var extent_params=${request.extent};
var bingKey = '${request.bing_key}';
var gmapKey = '${request.gmap_key}';
var vhost = '${home}';
var extent_params = ${ request.extent };
var bingKey = '${request.bing_key}';
var gmapKey = '${request.gmap_key}';
</script>
<body class="body">
<div class="container-fluid">
<div class="container-fluid">
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
......@@ -83,19 +86,26 @@ var gmapKey = '${request.gmap_key}';
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Admin <b class="caret"></b></a>
<ul class="dropdown-menu">
<li tal:condition="has_permission(request, 'user')">
<a href="${home}/user">User</a></li>
<a href="${home}/user">User</a>
</li>
<li tal:condition="has_permission(request, 'group')">
<a href="${home}/group">Group</a></li>
<a href="${home}/group">Group</a>
</li>
<li tal:condition="has_permission(request, 'user-group')">
<a href="${home}/user/group">User Group</a></li>
<a href="${home}/user/group">User Group</a>
</li>
<li tal:condition="has_permission(request, 'routes')">
<a href="${home}/routes">Routes</a></li>
<a href="${home}/routes">Routes</a>
</li>
<li tal:condition="has_permission(request, 'group-routes')">
<a href="${home}/group/routes">Group Permission</a></li>
<a href="${home}/group/routes">Group Permission</a>
</li>
<li tal:condition="has_permission(request, 'upload-logo')">
<a href="${home}/upload/logo">Upload Logo</a></li>
<a href="${home}/upload/logo">Upload Logo</a>
</li>
<li tal:condition="has_permission(request, 'user-ws')">
<a href="${home}/user/ws">User Web Service</a></li>
<a href="${home}/user/ws">User Web Service</a>
</li>
</ul>
</li>
......@@ -106,7 +116,8 @@ var gmapKey = '${request.gmap_key}';
<li><a href="${home}/logout">${request.user.nice_username()} Logout</a></li>
<li><a href="${home}/password">Ubah password</a></li>
<li tal:condition="'core' in request.modules">
<a href="${home}/departemen/chg">Ubah Organisasi</a></li>
<a href="${home}/departemen/chg">Ubah Organisasi</a>
</li>
</ul>
</li>
</ul>
......@@ -122,9 +133,9 @@ var gmapKey = '${request.gmap_key}';
<i class="fa fa-fw fa-lg fa-times-circle"></i>&nbsp;${message}
</div>
</div>
</div>
<p>&nbsp;</p>
<div class="container-fluid">
</div>
<p>&nbsp;</p>
<div class="container-fluid">
<div metal:define-slot="contents"></div>
......@@ -132,19 +143,16 @@ var gmapKey = '${request.gmap_key}';
<div id="foot-left" class="" style="float:left;">@openSIPKD 2018</div>
<div id="foot-right" class="" style="float:right;"></div>
</div>
</div>
<script type="text/javascript"
src="${home}/static/v3/js/jquery-2.1.1.min.js"></script>
<script type="text/javascript"
src="${home}/static/v3/js/bootstrap/bootstrap.min.js"></script>
<script type="text/javascript"
src="${home}/deform_static/scripts/typeahead.min.js"></script>
</div>
<script type="text/javascript" src="${home}/static/v3/js/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="${home}/static/v3/js/bootstrap/bootstrap.min.js"></script>
<script type="text/javascript" src="${home}/deform_static/scripts/typeahead.min.js"></script>
<script src="${home}/static_map/lib/ol4/ol.js" type="text/javascript"></script>
<!-- <script src="${home}static_map/lib/ol4/ol-debug.js" type="text/javascript"></script> -->
<script type="text/javascript" src="${home}/static_map/lib/ol4/ext/ol3-layerswitcher.js"></script>
<script type="text/javascript" src="${home}/static_map/lib/ol4/ext/ol-geocoder.js"></script>
<script type="text/javascript">
<script src="${home}/static_map/lib/ol4/ol.js" type="text/javascript"></script>
<!-- <script src="${home}static_map/lib/ol4/ol-debug.js" type="text/javascript"></script> -->
<script type="text/javascript" src="${home}/static_map/lib/ol4/ext/ol3-layerswitcher.js"></script>
<script type="text/javascript" src="${home}/static_map/lib/ol4/ext/ol-geocoder.js"></script>
<script type="text/javascript">
if (ol.Map.prototype.getLayer === undefined) {
ol.Map.prototype.getLayer = function (id) {
var layer;
......@@ -157,8 +165,8 @@ var gmapKey = '${request.gmap_key}';
}
}
</script>
<div metal:define-slot="scripts"></div>
</script>
<div metal:define-slot="scripts"></div>
</body>
</html>
</html>
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!