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 09de39e2
authored
Dec 16, 2021
by
aa.gusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
penambahan company
1 parent
a30218b3
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
96 additions
and
43 deletions
opensipkd/base/alembic/versions/37ca8f816946_add_partner_id_to_user.py
opensipkd/base/models/departemen.py
opensipkd/base/models/users.py
opensipkd/base/views/base_views.py
opensipkd/base/views/company.py
opensipkd/base/views/departemen.py
opensipkd/base/views/partner.py
opensipkd/base/views/posisi.py
opensipkd/base/views/user.py
opensipkd/base/alembic/versions/37ca8f816946_add_partner_id_to_user.py
View file @
09de39e
...
...
@@ -21,6 +21,8 @@ def upgrade():
helpers
=
context
.
opts
[
'helpers'
]
if
not
helpers
.
table_has_column
(
'users'
,
'partner_id'
):
op
.
add_column
(
'users'
,
sa
.
Column
(
'partner_id'
,
sa
.
Integer
))
if
not
helpers
.
table_has_column
(
'users'
,
'company_id'
):
op
.
add_column
(
'users'
,
sa
.
Column
(
'company_id'
,
sa
.
Integer
))
if
not
helpers
.
table_has_column
(
'partner'
,
'company_id'
):
op
.
add_column
(
'partner'
,
sa
.
Column
(
'company_id'
,
sa
.
Integer
))
...
...
opensipkd/base/models/departemen.py
View file @
09de39e
...
...
@@ -26,6 +26,7 @@ class Departemen(Base, NamaModel):
level_id
=
Column
(
SmallInteger
)
children
=
relationship
(
"Departemen"
,
backref
=
backref
(
'parent'
,
remote_side
=
[
id
]))
company_id
=
Column
(
Integer
)
def
get_parents
(
self
,
start
=
False
):
allparents
=
[]
...
...
opensipkd/base/models/users.py
View file @
09de39e
...
...
@@ -73,6 +73,7 @@ class User(UserMixin, BaseModel, CommonModel, Base):
default
=
datetime
.
utcnow
)
api_key
=
Column
(
String
(
256
))
partner_id
=
Column
(
Integer
)
#, ForeignKey(Partner.id))
company_id
=
Column
(
Integer
)
#, ForeignKey(Partner.id))
#partners = relationship(Partner, backref=backref('users'))
def
_get_password
(
self
):
...
...
opensipkd/base/views/base_views.py
View file @
09de39e
...
...
@@ -113,9 +113,10 @@ class BaseView(object):
self
.
table
=
""
def
route_list
(
self
,
msg
=
None
,
error
=
""
):
if
msg
:
self
.
ses
.
flash
(
msg
,
error
)
return
HTTPFound
(
location
=
self
.
req
.
route_url
(
self
.
list_route
))
def
form_validator
(
self
,
form
,
value
):
pass
...
...
@@ -221,6 +222,7 @@ class BaseView(object):
request
=
self
.
req
q
=
self
.
query_id
()
row
=
q
.
first
()
if
not
row
:
return
self
.
id_not_found
()
if
request
.
POST
:
...
...
@@ -235,8 +237,11 @@ class BaseView(object):
return
dict
(
form
=
form
.
render
(
readonly
=
True
),
scripts
=
self
.
form_scripts
)
def
query_id
(
self
):
return
DBSession
.
query
(
self
.
table
)
.
filter_by
(
q
=
DBSession
.
query
(
self
.
table
)
.
filter_by
(
id
=
self
.
req
.
matchdict
[
'id'
])
if
self
.
req
.
user
.
company_id
:
q
=
q
.
filter_by
(
company_id
=
self
.
req
.
user
.
company_id
)
return
q
@colander.deferred
...
...
opensipkd/base/views/company.py
View file @
09de39e
...
...
@@ -2,17 +2,14 @@ import json
import
colander
from
deform
import
(
widget
,
Form
,
ValidationFailure
,
)
from
opensipkd.base.models
import
ResProvinsi
,
ResDati2
,
ResDesa
from
opensipkd.tools.buttons
import
btn_close
,
btn_cancel
,
btn_save
from
pyramid.view
import
(
view_config
,
)
from
.kecamatan
import
kecamatan_widget
from
opensipkd.base.models
import
ResProvinsi
,
ResDati2
,
ResDesa
from
.partner_base
import
PartnerSchema
from
..models
import
DBSession
,
ResCompany
,
ResKecamatan
,
Partner
from
..views
import
ColumnDT
,
DataTables
,
BaseView
# from opensipkd.base.views import partner
SESS_ADD_FAILED
=
'Tambah pemda gagal'
SESS_EDIT_FAILED
=
'Edit pemda gagal'
...
...
@@ -141,12 +138,16 @@ class ViewCompany(BaseView):
ColumnDT
(
ResCompany
.
kode
,
mData
=
'kode'
),
ColumnDT
(
ResCompany
.
nama
,
mData
=
'nama'
),
]
query
=
DBSession
.
query
()
.
select_from
(
ResCompany
)
if
request
.
user
.
company_id
:
query
=
query
.
filter_by
(
id
=
request
.
user
.
company_id
)
row_table
=
DataTables
(
request
.
GET
,
query
,
columns
)
return
row_table
.
output_result
()
@view_config
(
route_name
=
'company-add'
,
renderer
=
'templates/form_input.pt'
,
permission
=
'company'
)
def
view_add
(
self
):
if
self
.
req
.
user
.
company_id
:
return
self
.
route_list
(
"Hak Akses Terbatas"
,
"error"
)
return
super
(
ViewCompany
,
self
)
.
view_add
()
########
...
...
@@ -199,3 +200,10 @@ class ViewCompany(BaseView):
row
=
self
.
save
(
values
,
self
.
req
.
user
,
row
)
return
row
def
query_id
(
self
):
q
=
DBSession
.
query
(
self
.
table
)
.
filter_by
(
id
=
self
.
req
.
matchdict
[
'id'
])
if
self
.
req
.
user
.
company_id
:
q
=
q
.
filter_by
(
id
=
self
.
req
.
user
.
company_id
)
return
q
\ No newline at end of file
opensipkd/base/views/departemen.py
View file @
09de39e
...
...
@@ -7,7 +7,6 @@ from datetime import datetime
import
colander
from
deform
import
(
Form
,
widget
,
ValidationFailure
,
)
from
deform.widget
import
AutocompleteInputWidget
# from opensipkd.base.models import DepartemenUser
from
pyramid.httpexceptions
import
(
HTTPFound
,
)
from
pyramid.view
import
(
view_config
,
)
from
sqlalchemy
import
func
...
...
@@ -15,9 +14,10 @@ from sqlalchemy.orm import aliased
from
opensipkd.tools
import
(
get_ext
,
get_random_string
,
get_settings
)
from
opensipkd.tools.buttons
import
btn_cancel
,
btn_save
,
btn_delete
,
btn_close
from
.company
import
company_widget
from
.upload
import
AddSchema
as
UploadSchema
from
..
import
renderer
from
..models
import
DBSession
,
Departemen
,
Partner
,
PartnerDepartemen
from
..models
import
DBSession
,
Departemen
,
Partner
,
PartnerDepartemen
,
ResCompany
from
..views
import
ColumnDT
,
DataTables
,
BaseView
SESS_ADD_FAILED
=
'Tambah departemen gagal'
...
...
@@ -63,6 +63,10 @@ class AddSchema(colander.Schema):
alamat
=
colander
.
SchemaNode
(
colander
.
String
(),
missing
=
colander
.
drop
,
oid
=
"alamat"
)
company_id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
widget
=
company_widget
,
missing
=
colander
.
drop
,
oid
=
"company_id"
)
status
=
colander
.
SchemaNode
(
colander
.
Boolean
(),
oid
=
"status"
)
...
...
@@ -74,6 +78,9 @@ class AddSchema(colander.Schema):
values
=
f
"{request._host}/departemen/hon/act"
),
oid
=
"parent_nm"
,
title
=
"Induk"
,
)
if
request
.
user
.
company_id
:
self
[
"company_id"
]
.
widget
=
widget
.
HiddenWidget
()
self
[
"company_id"
]
.
default
=
request
.
user
.
company_id
class
EditSchema
(
AddSchema
):
...
...
@@ -124,6 +131,7 @@ class ViewDepartemen(BaseView):
self
.
form_params
=
dict
(
scripts
=
""
)
self
.
list_url
=
'departemen'
self
.
list_route
=
'departemen'
self
.
table
=
Departemen
########
# List #
...
...
@@ -142,21 +150,22 @@ class ViewDepartemen(BaseView):
if
'id'
in
form
.
request
.
matchdict
:
uid
=
form
.
request
.
matchdict
[
'id'
]
q
=
DBSession
.
query
(
Departemen
)
.
filter_by
(
id
=
uid
)
urusan
=
q
.
first
()
current
=
q
.
first
()
else
:
urusan
=
None
current
=
None
q
=
Departemen
.
query_kode
(
value
[
'kode'
])
found
=
q
.
first
()
if
urusan
:
if
found
and
found
.
id
!=
urusan
.
id
:
found
=
Departemen
.
query_kode
(
value
[
'kode'
])
.
\
filter_by
(
company_id
=
value
[
"company_id"
])
.
first
()
if
current
:
if
found
and
found
.
id
!=
current
.
id
:
err_kode
()
elif
found
:
err_kode
()
found
=
Departemen
.
query_nama
(
value
[
'nama'
])
.
first
()
if
urusan
:
if
found
and
found
.
id
!=
urusan
.
id
:
found
=
Departemen
.
query_nama
(
value
[
'nama'
])
.
\
filter_by
(
company_id
=
value
[
"company_id"
])
.
first
()
if
current
:
if
found
and
found
.
id
!=
current
.
id
:
err_nama
()
elif
found
:
err_nama
()
...
...
@@ -200,16 +209,18 @@ class ViewDepartemen(BaseView):
request
=
self
.
req
if
'id'
in
request
.
matchdict
:
values
[
'id'
]
=
request
.
matchdict
[
'id'
]
values
[
"company_id"
]
=
request
.
user
.
company_id
row
=
self
.
save
(
values
,
request
.
user
,
row
)
request
.
session
.
flash
(
"Departemen {nama} sudah disimpan."
.
format
(
nama
=
row
.
nama
))
def
route_list
(
self
,
):
return
HTTPFound
(
location
=
self
.
req
.
route_url
(
self
.
list_route
))
#
def route_list(self, ):
#
return HTTPFound(location=self.req.route_url(self.list_route))
def
get_form
(
self
,
class_form
,
row
=
None
,
buttons
=
(
btn_save
,
btn_cancel
)):
schema
=
class_form
(
validator
=
self
.
form_validator
)
schema
=
schema
.
bind
(
request
=
self
.
req
)
schema
=
schema
.
bind
(
request
=
self
.
req
,
company_list
=
ResCompany
.
get_list
())
schema
.
request
=
self
.
req
if
row
:
schema
.
deserialize
(
row
)
...
...
@@ -220,14 +231,14 @@ class ViewDepartemen(BaseView):
del
self
.
req
.
session
[
session_name
]
return
r
def
query_id
(
self
):
return
DBSession
.
query
(
Departemen
)
.
filter_by
(
id
=
self
.
req
.
matchdict
[
'id'
])
#
def query_id(self):
#
return DBSession.query(Departemen).filter_by(
#
id=self.req.matchdict['id'])
def
id_not_found
(
self
):
msg
=
'Departemen ID
%
s Tidak Ditemukan.'
%
self
.
req
.
matchdict
[
'id'
]
self
.
req
.
session
.
flash
(
msg
,
'error'
)
return
self
.
route_list
()
#
def id_not_found(self):
#
msg = 'Departemen ID %s Tidak Ditemukan.' % self.req.matchdict['id']
#
self.req.session.flash(msg, 'error')
#
return self.route_list()
@view_config
(
route_name
=
'departemen-view'
,
renderer
=
'templates/form_input.pt'
,
permission
=
'departemen'
)
...
...
@@ -270,6 +281,8 @@ class ViewDepartemen(BaseView):
ColumnDT
(
Departemen
.
level_id
,
mData
=
'level_id'
),
]
query
=
DBSession
.
query
()
.
select_from
(
Departemen
)
.
outerjoin
(
dep_alias
,
Departemen
.
parent_id
==
dep_alias
.
id
)
if
self
.
req
.
user
.
company_id
:
query
=
query
.
filter
(
Departemen
.
company_id
==
self
.
req
.
user
.
company_id
)
row_table
=
DataTables
(
request
.
GET
,
query
,
columns
)
return
row_table
.
output_result
()
...
...
@@ -280,6 +293,8 @@ class ViewDepartemen(BaseView):
Departemen
.
nama
.
ilike
(
'
%%%
s
%%
'
%
term
))
\
.
order_by
(
Departemen
.
nama
)
if
self
.
req
.
user
.
company_id
:
q
=
q
.
filter
(
Departemen
.
company_id
==
self
.
req
.
user
.
company_id
)
rows
=
q
.
all
()
r
=
[]
for
k
in
rows
:
...
...
@@ -296,6 +311,8 @@ class ViewDepartemen(BaseView):
Departemen
.
kode
)
\
.
ilike
(
'
%%%
s
%%
'
%
term
))
\
.
order_by
(
Departemen
.
nama
)
if
self
.
req
.
user
.
company_id
:
q
=
q
.
filter
(
Departemen
.
company_id
==
self
.
req
.
user
.
company_id
)
rows
=
q
.
all
()
r
=
[]
for
k
in
rows
:
...
...
@@ -314,6 +331,8 @@ class ViewDepartemen(BaseView):
'
%%%
s
%%
'
%
term
))
.
order_by
(
Departemen
.
nama
)
if
self
.
req
.
user
.
company_id
:
q
=
q
.
filter
(
Departemen
.
company_id
==
self
.
req
.
user
.
company_id
)
if
int
(
level_id
)
>
0
:
q
=
q
.
filter
(
Departemen
.
level_id
==
int
(
level_id
))
if
request
.
user
.
id
>
1
and
not
request
.
has_permission
(
...
...
@@ -349,6 +368,8 @@ class ViewDepartemen(BaseView):
'
%%%
s
%%
'
%
term
))
.
order_by
(
Departemen
.
nama
)
if
self
.
req
.
user
.
company_id
:
q
=
q
.
filter
(
Departemen
.
company_id
==
self
.
req
.
user
.
company_id
)
if
int
(
level_id
)
>
0
:
q
=
q
.
filter
(
Departemen
.
level_id
==
int
(
level_id
))
...
...
opensipkd/base/views/partner.py
View file @
09de39e
# from ..tools import row2dict, xls_reader
from
datetime
import
datetime
import
colander
...
...
@@ -7,26 +6,22 @@ from deform import (
widget
,
ValidationFailure
,
)
from
opensipkd.base.models.common
import
ResCompany
from
opensipkd.base.models
import
User
,
ResProvinsi
,
ResDati2
,
ResKecamatan
,
ResDesa
from
opensipkd.tools.buttons
import
btn_save
,
btn_cancel
,
btn_delete
from
pyramid.httpexceptions
import
(
HTTPFound
,
)
from
pyramid.view
import
(
view_config
,
)
from
opensipkd.tools.buttons
import
btn_save
,
btn_cancel
,
btn_delete
from
.dati2
import
dati2_widget
from
.desa
import
desa_widget
from
.kecamatan
import
kecamatan_widget
from
opensipkd.base.models
import
(
User
,
ResProvinsi
,
ResDati2
,
ResKecamatan
,
ResDesa
)
from
opensipkd.base.models.common
import
ResCompany
from
.company
import
company_widget
from
.partner_base
import
PartnerSchema
from
.provinsi
import
provinsi_widget
from
..models
import
DBSession
from
..models
import
Partner
from
..views
import
ColumnDT
,
DataTables
,
BaseView
from
.company
import
company_widget
SESS_ADD_FAILED
=
'Tambah partner gagal'
SESS_EDIT_FAILED
=
'Edit partner gagal'
...
...
@@ -47,6 +42,12 @@ class AddSchema(PartnerSchema):
oid
=
"company_id"
,
title
=
"Company"
)
def
after_bind
(
self
,
schema
,
kwargs
):
request
=
kwargs
[
"request"
]
if
request
.
user
.
company_id
:
self
[
"company_id"
]
.
widget
=
widget
.
HiddenWidget
()
self
[
"company_id"
]
.
default
=
request
.
user
.
company_id
class
EditSchema
(
AddSchema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
...
...
@@ -81,6 +82,8 @@ class ViewPartner(BaseView):
ColumnDT
(
Partner
.
status
,
mData
=
'status'
),
]
query
=
DBSession
.
query
()
.
select_from
(
Partner
)
if
self
.
req
.
user
.
company_id
:
query
=
query
.
filter
(
Partner
.
company_id
==
self
.
req
.
user
.
company_id
)
row_table
=
DataTables
(
request
.
GET
,
query
,
columns
)
return
row_table
.
output_result
()
...
...
opensipkd/base/views/posisi.py
View file @
09de39e
...
...
@@ -6,7 +6,7 @@ from pyramid.view import (view_config, )
from
sqlalchemy
import
or_
from
sqlalchemy.orm
import
aliased
from
..models
import
DBSession
as
PartnerDBSession
,
DBSession
from
..models
import
DBSession
as
PartnerDBSession
,
DBSession
,
ResCompany
from
..models
import
Departemen
,
Jabatan
from
..models
import
Partner
,
PartnerDepartemen
from
opensipkd.tools
import
dmy
,
date_from_str
...
...
@@ -169,7 +169,7 @@ class ViewPartner(BaseView):
{
'title'
:
"Nama"
,
'data'
:
"nama"
},
{
'title'
:
"Unit Kerja"
,
'data'
:
"departemen"
},
{
'title'
:
"Jabatan"
,
'data'
:
"jabatan"
},
{
'title'
:
"
Jenis Jabatan
"
,
'data'
:
"jenis"
},
{
'title'
:
"
Pemda
"
,
'data'
:
"jenis"
},
{
'title'
:
"Mulai"
,
'data'
:
"mulai"
},
{
'title'
:
"Selesai"
,
'data'
:
"selesai"
},
]
self
.
list_buttons
=
'btn_view, btn_add, btn_edit, btn_delete, '
\
...
...
@@ -277,19 +277,22 @@ class ViewPartner(BaseView):
ColumnDT
(
Partner
.
nama
,
mData
=
'nama'
),
ColumnDT
(
Departemen
.
nama
,
mData
=
'departemen'
),
ColumnDT
(
Jabatan
.
nama
,
mData
=
'jabatan'
),
ColumnDT
(
Jabatan
.
jenis
,
mData
=
'jenis'
),
ColumnDT
(
ResCompany
.
nama
,
mData
=
'jenis'
),
ColumnDT
(
struktural
.
nama
,
mData
=
'struktural_nm'
),
ColumnDT
(
PartnerDepartemen
.
mulai
,
mData
=
'mulai'
),
ColumnDT
(
PartnerDepartemen
.
selesai
,
mData
=
'selesai'
),
]
query
=
PartnerDBSession
.
query
()
.
select_from
(
PartnerDepartemen
)
\
.
outerjoin
(
Departemen
,
PartnerDepartemen
.
departemen_id
==
Departemen
.
id
)
\
q
=
PartnerDBSession
.
query
()
.
select_from
(
PartnerDepartemen
)
\
.
join
(
Departemen
,
PartnerDepartemen
.
departemen_id
==
Departemen
.
id
)
\
.
outerjoin
(
ResCompany
,
Departemen
.
company_id
==
ResCompany
.
id
)
\
.
outerjoin
(
Partner
,
Partner
.
id
==
PartnerDepartemen
.
partner_id
)
\
.
outerjoin
(
Jabatan
,
(
PartnerDepartemen
.
jabatan_id
==
Jabatan
.
id
))
\
.
outerjoin
(
struktural
,
(
PartnerDepartemen
.
jabatan_id
==
struktural
.
id
))
\
.
order_by
(
Partner
.
nama
)
if
self
.
req
.
user
.
company_id
:
q
=
q
.
filter
(
Departemen
.
company_id
==
self
.
req
.
user
.
company_id
)
row_table
=
DataTables
(
request
.
GET
,
q
,
columns
)
row_table
=
DataTables
(
request
.
GET
,
query
,
columns
)
return
row_table
.
output_result
()
elif
url_dict
[
'act'
]
==
'hon_departemen'
:
...
...
@@ -305,6 +308,9 @@ class ViewPartner(BaseView):
filter
(
PartnerDepartemen
.
departemen_id
==
ses
[
'departemen_id'
])
.
\
filter
(
or_
(
Jabatan
.
kode
==
'101'
,
Jabatan
.
kode
==
'102'
))
.
\
order_by
(
Partner
.
nama
)
if
self
.
req
.
user
.
company_id
:
q
=
q
.
filter
(
Departemen
.
company_id
==
self
.
req
.
user
.
company_id
)
rows
=
q
.
all
()
r
=
[]
keys
=
(
'id'
,
'value'
,
'nik'
,
'nama'
,
'jabatan_id'
,
'jabatan_nm'
)
...
...
@@ -327,6 +333,8 @@ class ViewPartner(BaseView):
filter
(
Partner
.
nama
.
ilike
(
'
%%%
s
%%
'
%
term
))
.
\
filter
(
PartnerDepartemen
.
departemen_id
==
ses
[
'departemen_id'
])
.
\
order_by
(
Partner
.
nama
)
if
self
.
req
.
user
.
company_id
:
q
=
q
.
filter
(
Departemen
.
company_id
==
self
.
req
.
user
.
company_id
)
rows
=
q
.
all
()
r
=
[]
keys
=
(
'id'
,
'value'
,
'nik'
,
'nama'
,
'jabatan_id'
,
'jabatan_nm'
)
...
...
@@ -349,6 +357,8 @@ class ViewPartner(BaseView):
filter
(
or_
(
Jabatan
.
kode
==
'101'
,
Jabatan
.
kode
==
'102'
,
Jabatan
.
kode
==
'103'
,
Jabatan
.
kode
==
'104'
))
.
\
order_by
(
Partner
.
nama
)
if
self
.
req
.
user
.
company_id
:
q
=
q
.
filter
(
Departemen
.
company_id
==
self
.
req
.
user
.
company_id
)
rows
=
q
.
all
()
r
=
[]
keys
=
(
'id'
,
'value'
,
'nik'
,
'nama'
,
'jabatan_id'
,
'jabatan_nm'
)
...
...
@@ -362,6 +372,8 @@ class ViewPartner(BaseView):
q
=
DBSession
.
query
(
Jabatan
.
id
,
Jabatan
.
kode
,
Jabatan
.
nama
,
Jabatan
.
jenis
)
.
\
filter
(
Jabatan
.
nama
.
ilike
(
'
%%%
s
%%
'
%
term
))
.
\
order_by
(
Jabatan
.
nama
)
if
self
.
req
.
user
.
company_id
:
q
=
q
.
filter
(
Departemen
.
company_id
==
self
.
req
.
user
.
company_id
)
rows
=
q
.
all
()
r
=
[]
for
k
in
rows
:
...
...
opensipkd/base/views/user.py
View file @
09de39e
This diff is collapsed.
Click to expand it.
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