Commit 1837e5f8 by aagusti

perbaikan routelist

1 parent f912c31b
$(document).ready(function () {
$('#parent_nm').bind('typeahead:selected', function (obj, datum, name) {
$('#parent_id').val(datum.id);
});
$('#parent_nm').on('input',
function (e) {
let val = $('#parent_nm').val();
if (val === null || val === "") {
$('#parent_id').val("");
}
});
});
\ No newline at end of file \ No newline at end of file
$(document).ready(function () { $(document).ready(function () {
$('#parent_nm').bind('typeahead:selected', function (obj, datum, name) { $('#parent_nm').bind('typeahead:selected', function (obj, datum, name) {
$('#parent_id').val(datum.id); $('#parent_id').val(datum.id);
$('#parent_kd').val(datum.kode); $('#parent_kd').val(datum.kode);
console.log(datum.kode); console.log(datum.kode);
}); });
$('#parent_nm').on('input',
function (e) {
let val = $('#parent_nm').val();
if (val === null || val === "") {
$('#parent_id').val("");
$('#parent_kd').val("");
}
});
}); });
\ No newline at end of file \ No newline at end of file
...@@ -161,13 +161,15 @@ class BaseView(object): ...@@ -161,13 +161,15 @@ class BaseView(object):
def delete_msg(self, row): def delete_msg(self, row):
return f'Data ID {row.id} sudah dihapus.' return f'Data ID {row.id} sudah dihapus.'
def route_list(self, msg=None, error="", **kwargs): def route_list(self, **kwargs):
msg = kwargs.get("msg")
error = kwargs.get("error", "")
list_url = kwargs.get("list_url", None)
if msg: if msg:
self.ses.flash(msg, error) self.ses.flash(msg, error)
list_url = kwargs.get("list_url", None)
if not list_url: if not list_url:
list_url = self.req.route_url(self.list_route) list_url = self.req.route_url(self.list_route)
log.error(list_url)
if self.headers: if self.headers:
return HTTPFound(location=get_urls(list_url), return HTTPFound(location=get_urls(list_url),
headers=self.headers) headers=self.headers)
...@@ -336,10 +338,10 @@ class BaseView(object): ...@@ -336,10 +338,10 @@ class BaseView(object):
def cancel_act(self, **kwargs): def cancel_act(self, **kwargs):
return self.route_list(**kwargs) return self.route_list(**kwargs)
def after_add(self, **kwargs): def after_add(self, row=None, **kwargs):
return self.route_list(**kwargs) return self.route_list(**kwargs)
def after_edit(self, **kwargs): def after_edit(self, row=None, **kwargs):
return self.route_list(**kwargs) return self.route_list(**kwargs)
def after_view(self, **kwargs): def after_view(self, **kwargs):
......
import logging
import colander import colander
from datatables import ColumnDT
from deform import (widget, ) from deform import (widget, )
from pyramid.view import (view_config, ) from pyramid.view import (view_config, )
from sqlalchemy.orm import aliased
from opensipkd.models import ResProvinsi, ResDati2, ResDesa, User
from .partner_base import PartnerSchema, NamaSchema
from opensipkd.models import DBSession, ResCompany, ResKecamatan, Partner from opensipkd.models import DBSession, ResCompany, ResKecamatan, Partner
from opensipkd.models import ResProvinsi, ResDati2, ResDesa, User
from . import DataTables
from .partner_base import PartnerSchema
from .. import get_urls
from ..views import BaseView from ..views import BaseView
log = logging.getLogger(__name__)
SESS_ADD_FAILED = 'Tambah pemda gagal' SESS_ADD_FAILED = 'Tambah pemda gagal'
SESS_EDIT_FAILED = 'Edit pemda gagal' SESS_EDIT_FAILED = 'Edit pemda gagal'
...@@ -20,14 +27,34 @@ def company_widget(node, kw): ...@@ -20,14 +27,34 @@ def company_widget(node, kw):
class AddSchema(PartnerSchema): class AddSchema(PartnerSchema):
parent_id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(), oid="parent_id", missing=colander.drop,
)
parent_nm = colander.SchemaNode(
colander.String(), missing=colander.drop,
widget=widget.AutocompleteInputWidget(
size=60, min_length=3,
requirements=(("typeahead", None), ("deform", None),
{"js": "opensipkd.base:static/js/form/company.js"})
),
oid="parent_nm", title="Induk")
def after_bind(self, node, kw): def after_bind(self, node, kw):
self["email"].missing = colander.drop self["email"].missing = colander.drop
request = kw["request"]
self["parent_nm"].widget = widget.AutocompleteInputWidget(
size=60, min_length=3,
requirements=(("typeahead", None), ("deform", None),
{"js": "opensipkd.base:static/js/form/company.js"}),
values=get_urls(f"{request.route_url('company')}/hon/act"))
class EditSchema(AddSchema): class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(), missing=colander.drop, id = colander.SchemaNode(colander.String(), missing=colander.drop,
widget=widget.HiddenWidget(readonly=True), widget=widget.HiddenWidget(readonly=True),
visible=False,) visible=False, )
partner_id = colander.SchemaNode(colander.Integer(), partner_id = colander.SchemaNode(colander.Integer(),
widget=widget.HiddenWidget(), widget=widget.HiddenWidget(),
missing=colander.drop, missing=colander.drop,
...@@ -35,7 +62,7 @@ class EditSchema(AddSchema): ...@@ -35,7 +62,7 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema): class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(),title="Action") id = colander.SchemaNode(colander.String(), title="Action")
kode = colander.SchemaNode( kode = colander.SchemaNode(
colander.String(), colander.String(),
validator=colander.Length(max=32), validator=colander.Length(max=32),
...@@ -46,6 +73,14 @@ class ListSchema(colander.Schema): ...@@ -46,6 +73,14 @@ class ListSchema(colander.Schema):
colander.String(), colander.String(),
validator=colander.Length(max=64), validator=colander.Length(max=64),
oid="nama") oid="nama")
parent_nm = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=64),
oid="parent_nm",
field="alias.nama"
)
status = colander.SchemaNode( status = colander.SchemaNode(
colander.Integer(), colander.Integer(),
widget=widget.CheckboxWidget(), widget=widget.CheckboxWidget(),
...@@ -116,16 +151,19 @@ class ViewCompany(BaseView): ...@@ -116,16 +151,19 @@ class ViewCompany(BaseView):
found = User.get_by_identity(value.get('email')) found = User.get_by_identity(value.get('email'))
if found: if found:
err_user() err_user()
value["status"]="status" in value and value["status"] and 1 or 0 value["status"] = "status" in value and value["status"] and 1 or 0
value["is_vendor"]="is_vendor" in value and value["is_vendor"] and 1 or 0 value["is_vendor"] = "is_vendor" in value and value["is_vendor"] and 1 or 0
value["is_customer"]="is_customer" in value and value["is_customer"] and 1 or 0 value["is_customer"] = "is_customer" in value and value["is_customer"] and 1 or 0
def get_bindings(self, row=None): def get_bindings(self, row=None):
provinsi_list = ResProvinsi.get_list() provinsi_list = ResProvinsi.get_list()
partner = row and row.partner or None partner = row and row.partner or None
dati2_list = partner and partner.provinsi_id and ResDati2.get_list(partner.provinsi_id) or [] dati2_list = partner and partner.provinsi_id and ResDati2.get_list(
kecamatan_list = partner and partner.dati2_id and ResKecamatan.get_list(partner.dati2_id) or [] partner.provinsi_id) or []
desa_list = partner and partner.kecamatan_id and ResDesa.get_list(partner.kecamatan_id) or [] kecamatan_list = partner and partner.dati2_id and ResKecamatan.get_list(
partner.dati2_id) or []
desa_list = partner and partner.kecamatan_id and ResDesa.get_list(
partner.kecamatan_id) or []
return dict(provinsi_list=provinsi_list, return dict(provinsi_list=provinsi_list,
dati2_list=dati2_list, dati2_list=dati2_list,
kecamatan_list=kecamatan_list, kecamatan_list=kecamatan_list,
...@@ -146,7 +184,37 @@ class ViewCompany(BaseView): ...@@ -146,7 +184,37 @@ class ViewCompany(BaseView):
@view_config(route_name='company-act', renderer='json', @view_config(route_name='company-act', renderer='json',
permission='view') permission='view')
def view_act(self): def view_act(self):
return super().view_act() request = self.req
ses = request.session
params = request.params
url_dict = request.matchdict
alias = aliased(ResCompany)
if url_dict['act'] == 'grid':
columns = [ColumnDT(self.table.id, mData='id'),
ColumnDT(self.table.kode, mData='kode'),
ColumnDT(self.table.nama, mData='nama'),
ColumnDT(alias.nama, mData='parent_nm'),
ColumnDT(self.table.status, mData='status'),
# ColumnDT(Departemen.level_id, mData='level_id'),
]
query = DBSession.query().select_from(ResCompany).outerjoin(
alias, ResCompany.parent_id == alias.id)
query = self.filter_company(query)
row_table = DataTables(request.GET, query, columns)
return row_table.output_result()
elif url_dict['act'] == 'hon':
term = 'term' in params and params['term'] or ''
q = DBSession.query(self.table) \
.filter(self.table.status == 1,
self.table.nama.ilike('%%%s%%' % term)) \
.order_by(self.table.nama)
rows = q.all()
r = []
for k in rows:
d = dict(id=k.id, value=k.nama, kode=k.kode, nama=k.nama)
r.append(d)
log.error(r)
return r
@view_config(route_name='company-add', @view_config(route_name='company-add',
renderer='templates/form.pt', permission='company') renderer='templates/form.pt', permission='company')
...@@ -154,12 +222,17 @@ class ViewCompany(BaseView): ...@@ -154,12 +222,17 @@ class ViewCompany(BaseView):
return super(ViewCompany, self).view_add() return super(ViewCompany, self).view_add()
def get_values(self, row, istime=False): def get_values(self, row, istime=False):
d = super().get_values(row,istime) d = super().get_values(row, istime)
partner = row.partner partner = row.partner
if partner : if partner:
p = partner.to_dict() p = partner.to_dict()
del p["id"] del p["id"]
d.update(p) d.update(p)
if "parent_id" in d and d["parent_id"]:
parent = ResCompany.query_id(d["parent_id"]).first()
if parent:
d["parent_nm"] = parent.nama
return d return d
@view_config(route_name='company-edit', @view_config(route_name='company-edit',
...@@ -173,6 +246,11 @@ class ViewCompany(BaseView): ...@@ -173,6 +246,11 @@ class ViewCompany(BaseView):
return super(ViewCompany, self).view_delete() return super(ViewCompany, self).view_delete()
def save_request(self, values, row=None): def save_request(self, values, row=None):
# Save Partner First
parent_id = "parent_id" in values and values["parent_id"] or None
if parent_id:
del values["parent_id"]
if 'partner_id' in values: if 'partner_id' in values:
part = Partner.query_id(values['partner_id']).first() part = Partner.query_id(values['partner_id']).first()
values["id"] = part.id values["id"] = part.id
...@@ -185,8 +263,12 @@ class ViewCompany(BaseView): ...@@ -185,8 +263,12 @@ class ViewCompany(BaseView):
part.from_dict(values) part.from_dict(values)
DBSession.add(part) DBSession.add(part)
DBSession.flush() DBSession.flush()
# Save Company
if part: if part:
values["partner_id"] = part.id values["partner_id"] = part.id
if parent_id:
values["parent_id"] = parent_id
if "id" in self.req.matchdict: if "id" in self.req.matchdict:
values["id"] = self.req.matchdict["id"] values["id"] = self.req.matchdict["id"]
...@@ -197,4 +279,3 @@ class ViewCompany(BaseView): ...@@ -197,4 +279,3 @@ class ViewCompany(BaseView):
DBSession.add(part) DBSession.add(part)
DBSession.flush() DBSession.flush()
return row return row
...@@ -9,7 +9,7 @@ from pyramid.view import (view_config, ) ...@@ -9,7 +9,7 @@ from pyramid.view import (view_config, )
from sqlalchemy import func from sqlalchemy import func
from sqlalchemy.orm import aliased from sqlalchemy.orm import aliased
from opensipkd.models import DBSession, Departemen, Partner, PartnerDepartemen from opensipkd.models import DBSession, Departemen, Partner, PartnerDepartemen, ResCompany
from opensipkd.tools import (get_ext, get_random_string, get_settings) from opensipkd.tools import (get_ext, get_random_string, get_settings)
from .company import company_widget from .company import company_widget
from .upload import AddSchema as UploadSchema from .upload import AddSchema as UploadSchema
...@@ -46,10 +46,11 @@ class AddSchema(colander.Schema): ...@@ -46,10 +46,11 @@ class AddSchema(colander.Schema):
widget=widget.AutocompleteInputWidget( widget=widget.AutocompleteInputWidget(
size=60, min_length=3, size=60, min_length=3,
requirements=(("typeahead", None), ("deform", None), requirements=(("typeahead", None), ("deform", None),
{"js": "opensipkd.base:static/js/form/departemen.js"}) {"js": "opensipkd.base:static/js/form/departemen.js"}),
# options={"allowClear": True}
), ),
oid="parent_nm", title="Induk") oid="parent_nm", title="Induk")
parent_kd = colander.SchemaNode(colander.String(), parent_kd = colander.SchemaNode(colander.String(),
widget=widget.TextInputWidget(css_class="readonly"), widget=widget.TextInputWidget(css_class="readonly"),
missing=colander.drop, oid="parent_kd", title="Kode Induk") missing=colander.drop, oid="parent_kd", title="Kode Induk")
...@@ -76,19 +77,13 @@ class AddSchema(colander.Schema): ...@@ -76,19 +77,13 @@ class AddSchema(colander.Schema):
def after_bind(self, schema, kwargs): def after_bind(self, schema, kwargs):
request = kwargs["request"] request = kwargs["request"]
# self["parent_nm"] = colander.SchemaNode(
# colander.String(),
# missing=colander.drop,
# widget=AutocompleteInputWidget(
# size=60, min_length=3,
# values=f"{request.route_url('departemen')}/hon/act"),
# oid="parent_nm",
# title="Induk", )
self["parent_nm"].widget = widget.AutocompleteInputWidget( self["parent_nm"].widget = widget.AutocompleteInputWidget(
size=60, min_length=3, size=60, min_length=3,
requirements=(("typeahead", None), ("deform", None), requirements=(("typeahead", None), ("deform", None),
{"js": "opensipkd.base:static/js/form/departemen.js"}), {"js": "opensipkd.base:static/js/form/departemen.js"}),
values=get_urls(f"{request.route_url('departemen')}/hon/act")) values=get_urls(f"{request.route_url('departemen')}/hon/act"),
)
if request.user.company_id: if request.user.company_id:
self["company_id"].widget = widget.HiddenWidget() self["company_id"].widget = widget.HiddenWidget()
self["company_id"].default = request.user.company_id self["company_id"].default = request.user.company_id
...@@ -101,12 +96,13 @@ class EditSchema(AddSchema): ...@@ -101,12 +96,13 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema): class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(), title="Action", visible=False) id = colander.SchemaNode(colander.String(), title="Action", visible=False)
kode = colander.SchemaNode(colander.String(), title="Kode", width='100pt') kode = colander.SchemaNode(colander.String(), title="Kode")
nama = colander.SchemaNode(colander.String(), title="Nama") nama = colander.SchemaNode(colander.String(), title="Nama")
status = colander.SchemaNode(colander.Boolean(), title="Status", width='50pt', status = colander.SchemaNode(colander.Boolean(), title="Status", width='50pt',
widget=widget.CheckboxWidget()) widget=widget.CheckboxWidget())
level_id = colander.SchemaNode(colander.Integer(), title="Level", width='50pt') level_id = colander.SchemaNode(colander.Integer(), title="Level", width='40pt')
parent = colander.SchemaNode(colander.String(), title="Induk", width='200pt') parent = colander.SchemaNode(colander.String(), title="Induk")
company_nm = colander.SchemaNode(colander.String(), title="Company")
class ViewDepartemen(BaseView): class ViewDepartemen(BaseView):
...@@ -171,6 +167,15 @@ class ViewDepartemen(BaseView): ...@@ -171,6 +167,15 @@ class ViewDepartemen(BaseView):
for k, v in values.items(): for k, v in values.items():
if not v: if not v:
setattr(row, k, None) setattr(row, k, None)
values["level_id"] = 1
if "parent_id" in values and values["parent_id"]:
qry_parent = self.table.query_id(values["parent_id"])
parent = qry_parent.first()
if parent and parent.level_id:
values["level_id"] = parent.level_id + 1
if "parent_id" not in values:
values["parent_id"] = None
row = super().save_request(values, row) row = super().save_request(values, row)
return row return row
...@@ -199,9 +204,12 @@ class ViewDepartemen(BaseView): ...@@ -199,9 +204,12 @@ class ViewDepartemen(BaseView):
ColumnDT(Departemen.nama, mData='nama'), ColumnDT(Departemen.nama, mData='nama'),
ColumnDT(dep_alias.nama, mData='parent'), ColumnDT(dep_alias.nama, mData='parent'),
ColumnDT(Departemen.status, mData='status'), ColumnDT(Departemen.status, mData='status'),
ColumnDT(Departemen.level_id, mData='level_id'), ] ColumnDT(Departemen.level_id, mData='level_id'),
ColumnDT(ResCompany.nama, mData='company_nm'), ]
query = DBSession.query().select_from(Departemen).outerjoin( query = DBSession.query().select_from(Departemen).outerjoin(
dep_alias, Departemen.parent_id == dep_alias.id) dep_alias, Departemen.parent_id == dep_alias.id).outerjoin(
ResCompany, self.table.company_id == ResCompany.id
)
query = self.filter_company(query) query = self.filter_company(query)
row_table = DataTables(request.GET, query, columns) row_table = DataTables(request.GET, query, columns)
return row_table.output_result() return row_table.output_result()
...@@ -300,6 +308,9 @@ class ViewDepartemen(BaseView): ...@@ -300,6 +308,9 @@ class ViewDepartemen(BaseView):
r.append(d) r.append(d)
return r return r
def get_bindings(self, row=None):
return {"company_list": ResCompany.get_list()}
@view_config(route_name='departemen-add', renderer='templates/form.pt', @view_config(route_name='departemen-add', renderer='templates/form.pt',
permission='departemen') permission='departemen')
def view_add(self): def view_add(self):
......
import colander import colander
import json from deform import (widget, )
from deform import (Form, widget, ValidationFailure, )
from pyramid.httpexceptions import (HTTPFound, )
from pyramid.view import (view_config, ) from pyramid.view import (view_config, )
from sqlalchemy import or_ from sqlalchemy import or_
from sqlalchemy.orm import aliased from sqlalchemy.orm import aliased
...@@ -11,7 +9,7 @@ from opensipkd.models import DBSession as PartnerDBSession, DBSession, \ ...@@ -11,7 +9,7 @@ from opensipkd.models import DBSession as PartnerDBSession, DBSession, \
from opensipkd.models import Departemen, Jabatan from opensipkd.models import Departemen, Jabatan
from opensipkd.models import Partner, PartnerDepartemen from opensipkd.models import Partner, PartnerDepartemen
from opensipkd.tools import dmy, date_from_str from opensipkd.tools import dmy, date_from_str
from opensipkd.tools.buttons import btn_cancel, btn_save, btn_delete, btn_close from . import widget_os
from ..views import ColumnDT, DataTables, BaseView from ..views import ColumnDT, DataTables, BaseView
SESS_ADD_FAILED = 'Tambah posisi partner gagal' SESS_ADD_FAILED = 'Tambah posisi partner gagal'
...@@ -19,20 +17,26 @@ SESS_EDIT_FAILED = 'Edit posisi partner gagal' ...@@ -19,20 +17,26 @@ SESS_EDIT_FAILED = 'Edit posisi partner gagal'
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
nama_widget = widget.AutocompleteInputWidget(
size=60,
values='/partner/hon/act',
min_length=2,
style="z-index: 100000 !important;")
departemen_widget = widget.AutocompleteInputWidget( departemen_widget = widget.AutocompleteInputWidget(
size=60, size=60,
values='/departemen/hon/act', values='/departemen/hon/act',
min_length=1) min_length=2,
style="z-index: 100001 !important;")
nama_widget = widget.AutocompleteInputWidget(
size=60,
values='/partner/hon/act',
min_length=1)
jabatan_widget = widget.AutocompleteInputWidget( jabatan_widget = widget.AutocompleteInputWidget(
size=60, size=60,
values='/jabatan/hon/act', values='/jabatan/hon/act',
min_length=1) min_length=2,
style="z-index: 99999 !important;")
partner_id = colander.SchemaNode( partner_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
...@@ -66,11 +70,12 @@ class AddSchema(colander.Schema): ...@@ -66,11 +70,12 @@ class AddSchema(colander.Schema):
mulai = colander.SchemaNode( mulai = colander.SchemaNode(
colander.String(), colander.String(),
oid="mulai", oid="mulai",
widget=widget.DateInputWidget(format="dd-mm-yyyy")) widget=widget_os.DateInputWidget(css_class="date", format="dd-mm-yyyy"))
selesai = colander.SchemaNode( selesai = colander.SchemaNode(
colander.String(), colander.String(),
oid="selesai", oid="selesai",
widget=widget.DateInputWidget(format="dd-mm-yyyy")) widget=widget_os.DateInputWidget(css_class="date", format="dd-mm-yyyy",
style="z-index: 9999 !important;"))
class EditSchema(AddSchema): class EditSchema(AddSchema):
......
<html metal:use-macro="load: ./base3.1.pt"> <html metal:use-macro="load: ./base3.1.pt"
tal:define="scripts scripts|scripts" >
<div metal:fill-slot="content"> <div metal:fill-slot="content">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
...@@ -12,15 +13,15 @@ ...@@ -12,15 +13,15 @@
<div metal:fill-slot="scripts"> <div metal:fill-slot="scripts">
<script> <script>
// $(document).ready(function () { $(document).ready(function () {
// $(".read-only").attr("readonly", true); // $(".read-only").attr("readonly", true);
// $(".readonly").attr("readonly", true); $(".readonly").attr("readonly", true);
// $(".date").attr("readonly", true); $(".date").attr("readonly", true);
// $(".date").datepicker({ // $(".date").datepicker({
// format: 'dd-mm-yyyy' // format: 'dd-mm-yyyy'
// }); // });
<!--? ${structure:scripts}--> ${structure:scripts}
// }); });
</script> </script>
<div metal:define-slot="scripts"></div> <div metal:define-slot="scripts"></div>
</div> </div>
......
import json import json
import logging import logging
from colander import SchemaNode, null, Mapping, Invalid #, string_types from colander import SchemaNode, null, Mapping, Invalid # , string_types
from deform.widget import Widget, _StrippedString, Select2Widget, default_resources, \
ResourceRegistry, default_resource_registry
from deform.widget import string_types
from deform.form import Button
from iso8601.iso8601 import ISO8601_REGEX
from deform.i18n import _
from colander import compat from colander import compat
from deform import widget from deform import widget
from deform.form import Button
from deform.i18n import _
from deform.widget import Widget, _StrippedString, Select2Widget, \
DateInputWidget as WidgetDateInputWidget
from deform.widget import string_types
from iso8601.iso8601 import ISO8601_REGEX
_logging = logging.getLogger(__name__) _logging = logging.getLogger(__name__)
...@@ -383,7 +384,7 @@ class MapWidget(Widget): ...@@ -383,7 +384,7 @@ class MapWidget(Widget):
{ {
"js": "opensipkd.base:static/js/gmap.js", "js": "opensipkd.base:static/js/gmap.js",
"css": "deform:static/select2/select2.css", "css": "deform:static/select2/select2.css",
},) },)
def __init__(self, **kw): def __init__(self, **kw):
super().__init__(**kw) super().__init__(**kw)
...@@ -704,3 +705,7 @@ class TextInputWidget(widget.TextInputWidget): ...@@ -704,3 +705,7 @@ class TextInputWidget(widget.TextInputWidget):
if isinstance(self.button, compat.string_types): if isinstance(self.button, compat.string_types):
self.button = Button(self.button, type="button") self.button = Button(self.button, type="button")
class DateInputWidget(WidgetDateInputWidget):
type_name = "text"
...@@ -18,9 +18,11 @@ ...@@ -18,9 +18,11 @@
'${oid}', '${oid}',
function deform_cb(oid) { function deform_cb(oid) {
if (!Modernizr.inputtypes['date'] ||"${type_name}" != "date" || window.forceDateTimePolyfill){ if (!Modernizr.inputtypes['date'] ||"${type_name}" != "date" || window.forceDateTimePolyfill){
console.log(${options_json});
$('#' + oid).pickadate(${options_json}); $('#' + oid).pickadate(${options_json});
} }
} }
); );
</script> </script>
</div> </div>
from sqlalchemy import Column, String, SmallInteger, Integer, DateTime, ForeignKey from sqlalchemy import Column, String, SmallInteger, Integer, DateTime, ForeignKey
from sqlalchemy.orm import relationship, backref from sqlalchemy.orm import relationship, backref
from .users import User
from .meta import Base
from .base import NamaModel, DefaultModel, DBSession, KodeModel from .base import NamaModel, DefaultModel, DBSession, KodeModel
from .meta import Base
from .partner import Partner from .partner import Partner
from .users import User
class Route(Base, NamaModel): class Route(Base, NamaModel):
...@@ -42,7 +42,14 @@ class UserDeviceModel(Base, KodeModel): ...@@ -42,7 +42,14 @@ class UserDeviceModel(Base, KodeModel):
expired = Column(DateTime(timezone=True)) expired = Column(DateTime(timezone=True))
user = relationship(User, backref=backref("devices")) user = relationship(User, backref=backref("devices"))
class ResCompany(Base, NamaModel): class ResCompany(Base, NamaModel):
__tablename__ = 'company' __tablename__ = 'company'
id = Column(Integer, primary_key=True)
partner_id = Column(Integer, ForeignKey(Partner.id)) partner_id = Column(Integer, ForeignKey(Partner.id))
partner = relationship(Partner, backref=backref("company")) partner = relationship("Partner", backref=backref("company"))
parent_id = Column(Integer, ForeignKey("company.id"))
children = relationship("ResCompany")
parent = relationship(
"ResCompany", remote_side=[id], primaryjoin="ResCompany.parent_id==ResCompany.id"
)
...@@ -10,6 +10,7 @@ from sqlalchemy.orm import ( ...@@ -10,6 +10,7 @@ from sqlalchemy.orm import (
backref backref
) )
from . import ResCompany
from ..models import DBSession, Base from ..models import DBSession, Base
from ..models import (NamaModel, from ..models import (NamaModel,
TABLE_ARGS) TABLE_ARGS)
...@@ -26,7 +27,7 @@ class Departemen(Base, NamaModel): ...@@ -26,7 +27,7 @@ class Departemen(Base, NamaModel):
level_id = Column(SmallInteger) level_id = Column(SmallInteger)
children = relationship( children = relationship(
"Departemen", backref=backref('parent', remote_side=[id])) "Departemen", backref=backref('parent', remote_side=[id]))
company_id = Column(Integer) company_id = Column(Integer, ForeignKey(ResCompany.id))
def get_parents(self, start=False): def get_parents(self, start=False):
allparents = [] allparents = []
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!