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/ ...@@ -25,7 +25,7 @@ sdist/
var/ var/
wheels/ wheels/
inventori/ inventori/
local/* local/
*.egg-info/ *.egg-info/
.installed.cfg .installed.cfg
*.egg *.egg
......
...@@ -7,6 +7,8 @@ import re ...@@ -7,6 +7,8 @@ import re
import datetime import datetime
import decimal import decimal
import deform import deform
import mimetypes
from pkg_resources import resource_filename from pkg_resources import resource_filename
from pyramid.renderers import JSON from pyramid.renderers import JSON
from pyramid_beaker import session_factory_from_settings from pyramid_beaker import session_factory_from_settings
......
...@@ -3,6 +3,8 @@ from datetime import datetime ...@@ -3,6 +3,8 @@ from datetime import datetime
import ziggurat_foundations.models import ziggurat_foundations.models
from opensipkd.tools import as_timezone 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 Column, String, SmallInteger, Integer, DateTime, func, Numeric
from sqlalchemy import inspect as sa_inspect from sqlalchemy import inspect as sa_inspect
from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.ext.hybrid import hybrid_property
...@@ -18,6 +20,7 @@ class MySession(Session): ...@@ -18,6 +20,7 @@ class MySession(Session):
session_factory = sessionmaker(class_=MySession) session_factory = sessionmaker(class_=MySession)
DBSession = scoped_session(session_factory) DBSession = scoped_session(session_factory)
register(DBSession) register(DBSession)
ziggurat_foundations.models.DBSession = DBSession ziggurat_foundations.models.DBSession = DBSession
TABLE_ARGS = dict(extend_existing=True, schema="public") TABLE_ARGS = dict(extend_existing=True, schema="public")
...@@ -77,6 +80,11 @@ class CommonModel(object): ...@@ -77,6 +80,11 @@ class CommonModel(object):
def as_timezone(self, fieldname): def as_timezone(self, fieldname):
date_ = getattr(self, fieldname) date_ = getattr(self, fieldname)
return date_ and as_timezone(date_) or None 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): class DefaultModel(CommonModel):
......
...@@ -46,6 +46,7 @@ base-departemen-edit,/departemen/{id}/edit,base,departemen,,,,admin,base-departe ...@@ -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-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-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, 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,/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-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, 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): ...@@ -189,7 +189,7 @@ def restore_csv(table, filename, get_file_func=get_file, db_session=DBSession):
return True 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): # def append_csv(table, filename, keys, get_file_func=get_file, db_session=DBSession):
# Feb 10, 2018 by aagusti # Feb 10, 2018 by aagusti
# penambahan parameter db_sesion apabila caller mempunyai db_sesion yang berbeda # penambahan parameter db_sesion apabila caller mempunyai db_sesion yang berbeda
......
...@@ -1198,11 +1198,13 @@ class BaseView(object): ...@@ -1198,11 +1198,13 @@ class BaseView(object):
def get_partner(self): def get_partner(self):
return Partner.query_email(self.req.user.email).first() 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): # 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 \ No newline at end of file
<html> <html>
<body> <body>
<div class="well"> <div class="well">
<h3>Internal Server Error</h3> <h3>Internal Server Error</h3>
<!-- Error session flash --> <!-- Error session flash -->
<div tal:condition="request.session.peek_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>
<div tal:condition="request.session.peek_flash('error')"> <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> </div>
<!-- Error session flash --> <!-- 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 Halaman yang anda cari tidak ada
</div> </div>
</body> </body>
</html>
</html>
\ No newline at end of file \ 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!