Commit 462a00fc by aagusti

callback pada append_csv

1 parent d5f9767b
...@@ -97,7 +97,7 @@ def add_cors_headers_response_callback(event): ...@@ -97,7 +97,7 @@ def add_cors_headers_response_callback(event):
'Access-Control-Allow-Headers': 'Origin, Content-Type, Accept, Authorization', 'Access-Control-Allow-Headers': 'Origin, Content-Type, Accept, Authorization',
'Access-Control-Max-Age': '1728000', 'Access-Control-Max-Age': '1728000',
} }
log.info(f"{origin} {request.is_xhr}") # log.info(f"{origin} {request.is_xhr}")
# response.headers.update( # response.headers.update(
# {'Access-Control-Allow-Credential': 'true', # {'Access-Control-Allow-Credential': 'true',
# 'Access-Control-Allow-Origin': "*"} # 'Access-Control-Allow-Origin': "*"}
...@@ -109,7 +109,7 @@ def add_cors_headers_response_callback(event): ...@@ -109,7 +109,7 @@ def add_cors_headers_response_callback(event):
if 'Access-Control-Allow-Credentials' not in headers: if 'Access-Control-Allow-Credentials' not in headers:
headers['Access-Control-Allow-Credentials'] = 'true' headers['Access-Control-Allow-Credentials'] = 'true'
log.info(f"Headers: {headers}") # log.info(f"Headers: {headers}")
response.headers.update(headers) response.headers.update(headers)
event.request.add_response_callback(cors_headers) event.request.add_response_callback(cors_headers)
......
...@@ -2,10 +2,8 @@ import logging ...@@ -2,10 +2,8 @@ import logging
import traceback import traceback
from datetime import datetime from datetime import datetime
from hashlib import md5 from hashlib import md5
from opensipkd.models.handlers import (
Log, from opensipkd.models.handlers import (Log, LogDBSession, )
LogDBSession,
)
class SQLAlchemyHandler(logging.Handler): class SQLAlchemyHandler(logging.Handler):
...@@ -21,11 +19,11 @@ class SQLAlchemyHandler(logging.Handler): ...@@ -21,11 +19,11 @@ class SQLAlchemyHandler(logging.Handler):
level = record.__dict__['levelname'] level = record.__dict__['levelname']
logger = record.__dict__['name'] logger = record.__dict__['name']
msg = record.__dict__['msg'] msg = record.__dict__['msg']
line_id = f'{t} {level} {msg}' line_id = f'{t} {level} {msg}'
line_id = md5(line_id.encode('utf-8')) line_id = md5(line_id.encode('utf-8'))
line_id = line_id.hexdigest() line_id = line_id.hexdigest()
log = Log( log = Log(
line_id=line_id, logger=logger, level=level, trace=trace, line_id=line_id, logger=logger, level=level, trace=trace,
msg=msg) msg=msg)
LogDBSession.add(log) LogDBSession.add(log)
LogDBSession.flush() LogDBSession.flush()
import logging import logging
import os import os
import re import re
import traceback
from datetime import datetime from datetime import datetime
from email.utils import parseaddr from email.utils import parseaddr
...@@ -9,8 +8,6 @@ import colander ...@@ -9,8 +8,6 @@ import colander
from datatables import ColumnDT from datatables import ColumnDT
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from deform import (widget, Form, ValidationFailure, FileData, ) from deform import (widget, Form, ValidationFailure, FileData, )
from pyramid.httpexceptions import HTTPFound, HTTPNotFound
from opensipkd.base.views.upload import tmpstore from opensipkd.base.views.upload import tmpstore
from opensipkd.tools import dmy, get_settings, get_ext, \ from opensipkd.tools import dmy, get_settings, get_ext, \
date_from_str, get_random_string date_from_str, get_random_string
...@@ -19,6 +16,8 @@ from opensipkd.tools.buttons import btn_save, btn_cancel, btn_close, btn_delete, ...@@ -19,6 +16,8 @@ from opensipkd.tools.buttons import btn_save, btn_cancel, btn_close, btn_delete,
btn_pdf, btn_unpost, btn_post btn_pdf, btn_unpost, btn_post
from opensipkd.tools.captcha import get_captcha from opensipkd.tools.captcha import get_captcha
from opensipkd.tools.report import csv_response, file_response from opensipkd.tools.report import csv_response, file_response
from pyramid.httpexceptions import HTTPFound, HTTPNotFound
from .common import DataTables from .common import DataTables
from .. import DBSession, get_params, get_urls from .. import DBSession, get_params, get_urls
from ..scripts.initializedb import append_csv from ..scripts.initializedb import append_csv
...@@ -121,7 +120,12 @@ class BaseView(object): ...@@ -121,7 +120,12 @@ class BaseView(object):
self.ses['departemen_kd'] = self.departemen_kd self.ses['departemen_kd'] = self.departemen_kd
self.ses['departemen_nm'] = self.departemen_nm self.ses['departemen_nm'] = self.departemen_nm
self.ses['departemen_id'] = self.departemen_id self.ses['departemen_id'] = self.departemen_id
if 'departemen_id' in self.params:
self.departemen_id = self.params['departemen_id']
if not self.departemen_id:
self.departemen_id = 0
self.ses["departemen_id"] = self.departemen_id
self.jenis = 'jenis' in self.ses and self.ses['jenis'] or 0 self.jenis = 'jenis' in self.ses and self.ses['jenis'] or 0
self.jenis = 'jenis' in self.params and self.params[ self.jenis = 'jenis' in self.params and self.params[
'jenis'] or self.jenis 'jenis'] or self.jenis
...@@ -268,6 +272,26 @@ class BaseView(object): ...@@ -268,6 +272,26 @@ class BaseView(object):
def next_edit(self, form, **kwargs): def next_edit(self, form, **kwargs):
return self.route_list(**kwargs) return self.route_list(**kwargs)
def returned_form(self, form, table, **kwargs):
resources = form.get_widget_resources()
readonly = "readonly" in kwargs and kwargs["readonly"]
is_object = kwargs.get("is_object")
if is_object:
return dict(form=form,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(readonly=readonly),
table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"],
js=resources["js"],
**kwargs
)
def view_view(self, **kwargs): # row = query_id(request).first() def view_view(self, **kwargs): # row = query_id(request).first()
request = self.req request = self.req
row = self.query_id().first() row = self.query_id().first()
...@@ -288,24 +312,8 @@ class BaseView(object): ...@@ -288,24 +312,8 @@ class BaseView(object):
return self.route_list("Nilai Data tidak ditemukan", "error") return self.route_list("Nilai Data tidak ditemukan", "error")
form.set_appstruct(values) form.set_appstruct(values)
table = self.get_item_table(row) table = self.get_item_table(row)
resources = form.get_widget_resources() kwargs["readonly"] = True
is_object = kwargs.get("is_object", False) return self.returned_form(form, table, **kwargs)
if is_object:
return dict(form=form,
readonly=True,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(readonly=True),
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
def set_post(self, **kwargs): def set_post(self, **kwargs):
pass pass
...@@ -375,7 +383,8 @@ class BaseView(object): ...@@ -375,7 +383,8 @@ class BaseView(object):
def save_upload(self, file_name, delimiter=",", **args): def save_upload(self, file_name, delimiter=",", **args):
return append_csv(self.table, file_name, self.upload_keys, return append_csv(self.table, file_name, self.upload_keys,
get_file_func=self.get_file, update_exist=True, delimiter=delimiter, **args) get_file_func=self.get_file, update_exist=True, delimiter=delimiter,
**args)
def before_add(self): def before_add(self):
return {} return {}
...@@ -503,26 +512,9 @@ class BaseView(object): ...@@ -503,26 +512,9 @@ class BaseView(object):
if isinstance(f.typ, colander.Date): if isinstance(f.typ, colander.Date):
e.cstruct[f.name] = date_from_str( e.cstruct[f.name] = date_from_str(
e.cstruct[f.name]) e.cstruct[f.name])
form.set_appstruct(e.cstruct)
return self.returned_form(form, table, **kwargs)
# for k, v in e.cstruct.items():
# log.debug(hasattr(e.field, k))
# if isinstance(f, colander.Date):
# e.cstruct[f] = date_from_str(e.cstruct[f])
if is_object:
return dict(form=form,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(e.cstruct),
table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"],
js=resources["js"],
**kwargs
)
values = dict(c) values = dict(c)
row = self.save_request(values) row = self.save_request(values)
return self.after_add(row=row, **kwargs) return self.after_add(row=row, **kwargs)
...@@ -534,18 +526,7 @@ class BaseView(object): ...@@ -534,18 +526,7 @@ class BaseView(object):
return self.route_list(**kwargs) return self.route_list(**kwargs)
values = self.before_add() values = self.before_add()
form.set_appstruct(values) form.set_appstruct(values)
if is_object: return self.returned_form(form, table, **kwargs)
return dict(form=form,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(), table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"],
js=resources["js"])
def save(self, values, user, row=None): def save(self, values, user, row=None):
log.info("Save") log.info("Save")
...@@ -595,7 +576,7 @@ class BaseView(object): ...@@ -595,7 +576,7 @@ class BaseView(object):
return d return d
def get_item_table(self, row=None, **kwargs): def get_item_table(self, row=None, **kwargs):
return return None
def before_edit(self, form): def before_edit(self, form):
return form return form
...@@ -627,18 +608,8 @@ class BaseView(object): ...@@ -627,18 +608,8 @@ class BaseView(object):
log.error(f"Edit Error: {str(e.error)}") log.error(f"Edit Error: {str(e.error)}")
# log.debug(f"Edit Data: {e.cstruct}") # log.debug(f"Edit Data: {e.cstruct}")
form.set_appstruct(e.cstruct) form.set_appstruct(e.cstruct)
if is_object: return self.returned_form(form, table, **kwargs)
return dict(form=form,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(),
table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"],
js=resources["js"])
c = dict(controls) c = dict(controls)
self.save_request(c, row) self.save_request(c, row)
return self.after_edit(row=row, **kwargs) return self.after_edit(row=row, **kwargs)
...@@ -648,17 +619,8 @@ class BaseView(object): ...@@ -648,17 +619,8 @@ class BaseView(object):
values = self.get_values(row) values = self.get_values(row)
form.set_appstruct(values) form.set_appstruct(values)
form = self.before_edit(form) form = self.before_edit(form)
if is_object:
return dict(form=form, return self.returned_form(form, table, **kwargs)
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(), table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"],
js=resources["js"])
def before_delete(self, row): def before_delete(self, row):
pass pass
...@@ -668,7 +630,6 @@ class BaseView(object): ...@@ -668,7 +630,6 @@ class BaseView(object):
q = self.query_id() q = self.query_id()
row = q.first() row = q.first()
is_object = kwargs.get("is_object", False) is_object = kwargs.get("is_object", False)
if not row: if not row:
return self.id_not_found() return self.id_not_found()
if not self.bindings: if not self.bindings:
...@@ -691,19 +652,8 @@ class BaseView(object): ...@@ -691,19 +652,8 @@ class BaseView(object):
table = self.get_item_table(row) table = self.get_item_table(row)
resources = form.get_widget_resources() resources = form.get_widget_resources()
form.set_appstruct(self.get_values(row)) form.set_appstruct(self.get_values(row))
if is_object: kwargs["readonly"] = True
return dict(form=form, return self.returned_form(form, table, **kwargs)
readonly=True,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(readonly=True),
table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"],
js=resources["js"])
def query_id(self): def query_id(self):
q = self.db_session.query(self.table).filter_by( q = self.db_session.query(self.table).filter_by(
......
...@@ -2,17 +2,16 @@ import os ...@@ -2,17 +2,16 @@ import os
import colander import colander
from deform import (widget, ) from deform import (widget, )
from opensipkd.tools.report import csv_response, open_rml_pdf, open_rml_row, \
pdf_response
from pyramid.i18n import TranslationStringFactory
from pyramid.view import (view_config, )
from opensipkd.models import ( from opensipkd.models import (
DBSession, DBSession,
Jabatan, Jabatan,
Eselon, Departemen Eselon, Departemen
) )
from .partner_base import NamaSchema from opensipkd.tools.report import csv_response, open_rml_pdf, open_rml_row, \
pdf_response
from pyramid.i18n import TranslationStringFactory
from pyramid.view import (view_config, )
from ..views import BaseView, deferred_jenis from ..views import BaseView, deferred_jenis
_ = TranslationStringFactory("opensipkd") _ = TranslationStringFactory("opensipkd")
...@@ -260,8 +259,8 @@ class ViewJabatan(BaseView): ...@@ -260,8 +259,8 @@ class ViewJabatan(BaseView):
else: else:
jabatan = None jabatan = None
q = Jabatan.query_kode(value[ q = Jabatan.query_kode(value['kode'])
'kode']) # DBSession.query(Jabatan).filter_by(kode=value['kode']) # DBSession.query(Jabatan).filter_by(kode=value['kode'])
found = q.first() found = q.first()
if jabatan: if jabatan:
if found and found.id != jabatan.id: if found and found.id != jabatan.id:
......
...@@ -5,10 +5,12 @@ ...@@ -5,10 +5,12 @@
<h3 class="panel-title"><i class="fa fa-fw fa-plus"></i>&nbsp;${request.title}</h3> <h3 class="panel-title"><i class="fa fa-fw fa-plus"></i>&nbsp;${request.title}</h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div tal:content="structure form"></div> <div class="deform">
<div class="container"> <div tal:content="structure form"></div>
<div tal:content="structure table"></div>
</div> </div>
<!--? <div class="container">-->
<div tal:content="structure table"></div>
<!--? </div>-->
</div> </div>
</div> </div>
</div> </div>
......
...@@ -112,7 +112,7 @@ ...@@ -112,7 +112,7 @@
if (typeof value === "string" && value.length > 0) { if (typeof value === "string" && value.length > 0) {
return render_checkbox(value) return render_checkbox(value)
} }
if (["", false, 0].indexOf(value) === -1) { if (["", false, 0, null].indexOf(value) === -1) {
return render_checkbox(true); return render_checkbox(true);
} }
return render_checkbox(false); return render_checkbox(false);
......
...@@ -52,7 +52,8 @@ class CommonModel(object): ...@@ -52,7 +52,8 @@ class CommonModel(object):
values[column.name] = value values[column.name] = value
else: else:
if Integer in type(column.type).__mro__ or Numeric in type(column.type).__mro__: if Integer in type(column.type).__mro__ or Numeric in type(column.type).__mro__:
values[column.name] = 0 if value == 0:
values[column.name] = 0
return values return values
def to_dict_without_none(self): def to_dict_without_none(self):
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!