Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
aa.gusti
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 1837e5f8
authored
Mar 02, 2024
by
aagusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
perbaikan routelist
1 parent
f912c31b
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
203 additions
and
65 deletions
opensipkd/base/static/js/form/company.js
opensipkd/base/static/js/form/departemen.js
opensipkd/base/views/base_views.py
opensipkd/base/views/company.py
opensipkd/base/views/departemen.py
opensipkd/base/views/posisi.py
opensipkd/base/views/templates/form.pt
opensipkd/base/views/widget_os.py
opensipkd/base/views/widgets/dateinput.pt
opensipkd/models/common.py
opensipkd/models/departemen.py
opensipkd/base/static/js/form/company.js
0 → 100644
View file @
1837e5f
$
(
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
opensipkd/base/static/js/form/departemen.js
View file @
1837e5f
...
...
@@ -4,4 +4,13 @@ $(document).ready(function () {
$
(
'#parent_kd'
).
val
(
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
opensipkd/base/views/base_views.py
View file @
1837e5f
...
...
@@ -161,13 +161,15 @@ class BaseView(object):
def
delete_msg
(
self
,
row
):
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
:
self
.
ses
.
flash
(
msg
,
error
)
list_url
=
kwargs
.
get
(
"list_url"
,
None
)
if
not
list_url
:
list_url
=
self
.
req
.
route_url
(
self
.
list_route
)
log
.
error
(
list_url
)
if
self
.
headers
:
return
HTTPFound
(
location
=
get_urls
(
list_url
),
headers
=
self
.
headers
)
...
...
@@ -336,10 +338,10 @@ class BaseView(object):
def
cancel_act
(
self
,
**
kwargs
):
return
self
.
route_list
(
**
kwargs
)
def
after_add
(
self
,
**
kwargs
):
def
after_add
(
self
,
row
=
None
,
**
kwargs
):
return
self
.
route_list
(
**
kwargs
)
def
after_edit
(
self
,
**
kwargs
):
def
after_edit
(
self
,
row
=
None
,
**
kwargs
):
return
self
.
route_list
(
**
kwargs
)
def
after_view
(
self
,
**
kwargs
):
...
...
opensipkd/base/views/company.py
View file @
1837e5f
import
logging
import
colander
from
datatables
import
ColumnDT
from
deform
import
(
widget
,
)
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
ResProvinsi
,
ResDati2
,
ResDesa
,
User
from
.
import
DataTables
from
.partner_base
import
PartnerSchema
from
..
import
get_urls
from
..views
import
BaseView
log
=
logging
.
getLogger
(
__name__
)
SESS_ADD_FAILED
=
'Tambah pemda gagal'
SESS_EDIT_FAILED
=
'Edit pemda gagal'
...
...
@@ -20,14 +27,34 @@ def company_widget(node, kw):
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
):
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
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
missing
=
colander
.
drop
,
widget
=
widget
.
HiddenWidget
(
readonly
=
True
),
visible
=
False
,)
visible
=
False
,
)
partner_id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
widget
=
widget
.
HiddenWidget
(),
missing
=
colander
.
drop
,
...
...
@@ -35,7 +62,7 @@ class EditSchema(AddSchema):
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Action"
)
id
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Action"
)
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
32
),
...
...
@@ -46,6 +73,14 @@ class ListSchema(colander.Schema):
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
64
),
oid
=
"nama"
)
parent_nm
=
colander
.
SchemaNode
(
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
64
),
oid
=
"parent_nm"
,
field
=
"alias.nama"
)
status
=
colander
.
SchemaNode
(
colander
.
Integer
(),
widget
=
widget
.
CheckboxWidget
(),
...
...
@@ -116,16 +151,19 @@ class ViewCompany(BaseView):
found
=
User
.
get_by_identity
(
value
.
get
(
'email'
))
if
found
:
err_user
()
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_customer"
]
=
"is_customer"
in
value
and
value
[
"is_customer"
]
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_customer"
]
=
"is_customer"
in
value
and
value
[
"is_customer"
]
and
1
or
0
def
get_bindings
(
self
,
row
=
None
):
provinsi_list
=
ResProvinsi
.
get_list
()
partner
=
row
and
row
.
partner
or
None
dati2_list
=
partner
and
partner
.
provinsi_id
and
ResDati2
.
get_list
(
partner
.
provinsi_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
[]
dati2_list
=
partner
and
partner
.
provinsi_id
and
ResDati2
.
get_list
(
partner
.
provinsi_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
,
dati2_list
=
dati2_list
,
kecamatan_list
=
kecamatan_list
,
...
...
@@ -146,7 +184,37 @@ class ViewCompany(BaseView):
@view_config
(
route_name
=
'company-act'
,
renderer
=
'json'
,
permission
=
'view'
)
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'
,
renderer
=
'templates/form.pt'
,
permission
=
'company'
)
...
...
@@ -154,12 +222,17 @@ class ViewCompany(BaseView):
return
super
(
ViewCompany
,
self
)
.
view_add
()
def
get_values
(
self
,
row
,
istime
=
False
):
d
=
super
()
.
get_values
(
row
,
istime
)
d
=
super
()
.
get_values
(
row
,
istime
)
partner
=
row
.
partner
if
partner
:
if
partner
:
p
=
partner
.
to_dict
()
del
p
[
"id"
]
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
@view_config
(
route_name
=
'company-edit'
,
...
...
@@ -173,6 +246,11 @@ class ViewCompany(BaseView):
return
super
(
ViewCompany
,
self
)
.
view_delete
()
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
:
part
=
Partner
.
query_id
(
values
[
'partner_id'
])
.
first
()
values
[
"id"
]
=
part
.
id
...
...
@@ -185,8 +263,12 @@ class ViewCompany(BaseView):
part
.
from_dict
(
values
)
DBSession
.
add
(
part
)
DBSession
.
flush
()
# Save Company
if
part
:
values
[
"partner_id"
]
=
part
.
id
if
parent_id
:
values
[
"parent_id"
]
=
parent_id
if
"id"
in
self
.
req
.
matchdict
:
values
[
"id"
]
=
self
.
req
.
matchdict
[
"id"
]
...
...
@@ -197,4 +279,3 @@ class ViewCompany(BaseView):
DBSession
.
add
(
part
)
DBSession
.
flush
()
return
row
opensipkd/base/views/departemen.py
View file @
1837e5f
...
...
@@ -9,7 +9,7 @@ from pyramid.view import (view_config, )
from
sqlalchemy
import
func
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
.company
import
company_widget
from
.upload
import
AddSchema
as
UploadSchema
...
...
@@ -46,10 +46,11 @@ class AddSchema(colander.Schema):
widget
=
widget
.
AutocompleteInputWidget
(
size
=
60
,
min_length
=
3
,
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"
)
parent_kd
=
colander
.
SchemaNode
(
colander
.
String
(),
widget
=
widget
.
TextInputWidget
(
css_class
=
"readonly"
),
missing
=
colander
.
drop
,
oid
=
"parent_kd"
,
title
=
"Kode Induk"
)
...
...
@@ -76,19 +77,13 @@ class AddSchema(colander.Schema):
def
after_bind
(
self
,
schema
,
kwargs
):
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
(
size
=
60
,
min_length
=
3
,
requirements
=
((
"typeahead"
,
None
),
(
"deform"
,
None
),
{
"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
:
self
[
"company_id"
]
.
widget
=
widget
.
HiddenWidget
()
self
[
"company_id"
]
.
default
=
request
.
user
.
company_id
...
...
@@ -101,12 +96,13 @@ class EditSchema(AddSchema):
class
ListSchema
(
colander
.
Schema
):
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"
)
status
=
colander
.
SchemaNode
(
colander
.
Boolean
(),
title
=
"Status"
,
width
=
'50pt'
,
widget
=
widget
.
CheckboxWidget
())
level_id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
"Level"
,
width
=
'50pt'
)
parent
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Induk"
,
width
=
'200pt'
)
level_id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
"Level"
,
width
=
'40pt'
)
parent
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Induk"
)
company_nm
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Company"
)
class
ViewDepartemen
(
BaseView
):
...
...
@@ -171,6 +167,15 @@ class ViewDepartemen(BaseView):
for
k
,
v
in
values
.
items
():
if
not
v
:
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
)
return
row
...
...
@@ -199,9 +204,12 @@ class ViewDepartemen(BaseView):
ColumnDT
(
Departemen
.
nama
,
mData
=
'nama'
),
ColumnDT
(
dep_alias
.
nama
,
mData
=
'parent'
),
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
(
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
)
row_table
=
DataTables
(
request
.
GET
,
query
,
columns
)
return
row_table
.
output_result
()
...
...
@@ -300,6 +308,9 @@ class ViewDepartemen(BaseView):
r
.
append
(
d
)
return
r
def
get_bindings
(
self
,
row
=
None
):
return
{
"company_list"
:
ResCompany
.
get_list
()}
@view_config
(
route_name
=
'departemen-add'
,
renderer
=
'templates/form.pt'
,
permission
=
'departemen'
)
def
view_add
(
self
):
...
...
opensipkd/base/views/posisi.py
View file @
1837e5f
import
colander
import
json
from
deform
import
(
Form
,
widget
,
ValidationFailure
,
)
from
pyramid.httpexceptions
import
(
HTTPFound
,
)
from
deform
import
(
widget
,
)
from
pyramid.view
import
(
view_config
,
)
from
sqlalchemy
import
or_
from
sqlalchemy.orm
import
aliased
...
...
@@ -11,7 +9,7 @@ from opensipkd.models import DBSession as PartnerDBSession, DBSession, \
from
opensipkd.models
import
Departemen
,
Jabatan
from
opensipkd.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
.
import
widget_os
from
..views
import
ColumnDT
,
DataTables
,
BaseView
SESS_ADD_FAILED
=
'Tambah posisi partner gagal'
...
...
@@ -19,20 +17,26 @@ SESS_EDIT_FAILED = 'Edit posisi partner gagal'
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
(
size
=
60
,
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
(
size
=
60
,
values
=
'/jabatan/hon/act'
,
min_length
=
1
)
min_length
=
2
,
style
=
"z-index: 99999 !important;"
)
partner_id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
...
...
@@ -66,11 +70,12 @@ class AddSchema(colander.Schema):
mulai
=
colander
.
SchemaNode
(
colander
.
String
(),
oid
=
"mulai"
,
widget
=
widget
.
DateInputWidget
(
format
=
"dd-mm-yyyy"
))
widget
=
widget
_os
.
DateInputWidget
(
css_class
=
"date"
,
format
=
"dd-mm-yyyy"
))
selesai
=
colander
.
SchemaNode
(
colander
.
String
(),
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
):
...
...
opensipkd/base/views/templates/form.pt
View file @
1837e5f
<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
class=
"panel panel-default"
>
<div
class=
"panel-heading"
>
...
...
@@ -12,15 +13,15 @@
<div
metal:fill-slot=
"scripts"
>
<script>
//
$(document).ready(function () {
$
(
document
).
ready
(
function
()
{
// $(".read-only").attr("readonly", true);
//
$(".readonly").attr("readonly", true);
//
$(".date").attr("readonly", true);
$
(
".readonly"
).
attr
(
"readonly"
,
true
);
$
(
".date"
).
attr
(
"readonly"
,
true
);
// $(".date").datepicker({
// format: 'dd-mm-yyyy'
// });
<!--
?
$
{
structure
:
scripts
}
-->
//
});
$
{
structure
:
scripts
}
});
</script>
<div
metal:define-slot=
"scripts"
></div>
</div>
...
...
opensipkd/base/views/widget_os.py
View file @
1837e5f
import
json
import
logging
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
SchemaNode
,
null
,
Mapping
,
Invalid
# , string_types
from
colander
import
compat
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__
)
...
...
@@ -704,3 +705,7 @@ class TextInputWidget(widget.TextInputWidget):
if
isinstance
(
self
.
button
,
compat
.
string_types
):
self
.
button
=
Button
(
self
.
button
,
type
=
"button"
)
class
DateInputWidget
(
WidgetDateInputWidget
):
type_name
=
"text"
opensipkd/base/views/widgets/dateinput.pt
View file @
1837e5f
...
...
@@ -18,9 +18,11 @@
'${oid}',
function deform_cb(oid) {
if (!Modernizr.inputtypes['date'] ||"${type_name}" != "date" || window.forceDateTimePolyfill){
console.log(${options_json});
$('#' + oid).pickadate(${options_json});
}
}
);
</script>
</div>
opensipkd/models/common.py
View file @
1837e5f
from
sqlalchemy
import
Column
,
String
,
SmallInteger
,
Integer
,
DateTime
,
ForeignKey
from
sqlalchemy.orm
import
relationship
,
backref
from
.users
import
User
from
.meta
import
Base
from
.base
import
NamaModel
,
DefaultModel
,
DBSession
,
KodeModel
from
.meta
import
Base
from
.partner
import
Partner
from
.users
import
User
class
Route
(
Base
,
NamaModel
):
...
...
@@ -42,7 +42,14 @@ class UserDeviceModel(Base, KodeModel):
expired
=
Column
(
DateTime
(
timezone
=
True
))
user
=
relationship
(
User
,
backref
=
backref
(
"devices"
))
class
ResCompany
(
Base
,
NamaModel
):
__tablename__
=
'company'
id
=
Column
(
Integer
,
primary_key
=
True
)
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"
)
opensipkd/models/departemen.py
View file @
1837e5f
...
...
@@ -10,6 +10,7 @@ from sqlalchemy.orm import (
backref
)
from
.
import
ResCompany
from
..models
import
DBSession
,
Base
from
..models
import
(
NamaModel
,
TABLE_ARGS
)
...
...
@@ -26,7 +27,7 @@ class Departemen(Base, NamaModel):
level_id
=
Column
(
SmallInteger
)
children
=
relationship
(
"Departemen"
,
backref
=
backref
(
'parent'
,
remote_side
=
[
id
]))
company_id
=
Column
(
Integer
)
company_id
=
Column
(
Integer
,
ForeignKey
(
ResCompany
.
id
)
)
def
get_parents
(
self
,
start
=
False
):
allparents
=
[]
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment