Commit 09de39e2 by aa.gusti

penambahan company

1 parent a30218b3
...@@ -21,6 +21,8 @@ def upgrade(): ...@@ -21,6 +21,8 @@ def upgrade():
helpers = context.opts['helpers'] helpers = context.opts['helpers']
if not helpers.table_has_column('users', 'partner_id'): if not helpers.table_has_column('users', 'partner_id'):
op.add_column('users', sa.Column('partner_id', sa.Integer)) 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'): if not helpers.table_has_column('partner', 'company_id'):
op.add_column('partner', sa.Column('company_id', sa.Integer)) op.add_column('partner', sa.Column('company_id', sa.Integer))
......
...@@ -26,6 +26,7 @@ class Departemen(Base, NamaModel): ...@@ -26,6 +26,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)
def get_parents(self, start=False): def get_parents(self, start=False):
allparents = [] allparents = []
......
...@@ -73,6 +73,7 @@ class User(UserMixin, BaseModel, CommonModel, Base): ...@@ -73,6 +73,7 @@ class User(UserMixin, BaseModel, CommonModel, Base):
default=datetime.utcnow) default=datetime.utcnow)
api_key = Column(String(256)) api_key = Column(String(256))
partner_id = Column(Integer) #, ForeignKey(Partner.id)) partner_id = Column(Integer) #, ForeignKey(Partner.id))
company_id = Column(Integer) #, ForeignKey(Partner.id))
#partners = relationship(Partner, backref=backref('users')) #partners = relationship(Partner, backref=backref('users'))
def _get_password(self): def _get_password(self):
......
...@@ -113,9 +113,10 @@ class BaseView(object): ...@@ -113,9 +113,10 @@ class BaseView(object):
self.table = "" self.table = ""
def route_list(self, msg=None, error=""): def route_list(self, msg=None, error=""):
if msg:
self.ses.flash(msg, error)
return HTTPFound(location=self.req.route_url(self.list_route)) return HTTPFound(location=self.req.route_url(self.list_route))
def form_validator(self, form, value): def form_validator(self, form, value):
pass pass
...@@ -221,6 +222,7 @@ class BaseView(object): ...@@ -221,6 +222,7 @@ class BaseView(object):
request = self.req request = self.req
q = self.query_id() q = self.query_id()
row = q.first() row = q.first()
if not row: if not row:
return self.id_not_found() return self.id_not_found()
if request.POST: if request.POST:
...@@ -235,8 +237,11 @@ class BaseView(object): ...@@ -235,8 +237,11 @@ class BaseView(object):
return dict(form=form.render(readonly=True), scripts=self.form_scripts) return dict(form=form.render(readonly=True), scripts=self.form_scripts)
def query_id(self): def query_id(self):
return DBSession.query(self.table).filter_by( q = DBSession.query(self.table).filter_by(
id=self.req.matchdict['id']) 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 @colander.deferred
......
...@@ -2,17 +2,14 @@ import json ...@@ -2,17 +2,14 @@ import json
import colander import colander
from deform import (widget, Form, ValidationFailure, ) 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 opensipkd.tools.buttons import btn_close, btn_cancel, btn_save
from pyramid.view import (view_config, ) 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 .partner_base import PartnerSchema
from ..models import DBSession, ResCompany, ResKecamatan, Partner from ..models import DBSession, ResCompany, ResKecamatan, Partner
from ..views import ColumnDT, DataTables, BaseView from ..views import ColumnDT, DataTables, BaseView
# from opensipkd.base.views import partner
SESS_ADD_FAILED = 'Tambah pemda gagal' SESS_ADD_FAILED = 'Tambah pemda gagal'
SESS_EDIT_FAILED = 'Edit pemda gagal' SESS_EDIT_FAILED = 'Edit pemda gagal'
...@@ -141,12 +138,16 @@ class ViewCompany(BaseView): ...@@ -141,12 +138,16 @@ class ViewCompany(BaseView):
ColumnDT(ResCompany.kode, mData='kode'), ColumnDT(ResCompany.kode, mData='kode'),
ColumnDT(ResCompany.nama, mData='nama'), ] ColumnDT(ResCompany.nama, mData='nama'), ]
query = DBSession.query().select_from(ResCompany) 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) row_table = DataTables(request.GET, query, columns)
return row_table.output_result() return row_table.output_result()
@view_config(route_name='company-add', @view_config(route_name='company-add',
renderer='templates/form_input.pt', permission='company') renderer='templates/form_input.pt', permission='company')
def view_add(self): def view_add(self):
if self.req.user.company_id:
return self.route_list("Hak Akses Terbatas", "error")
return super(ViewCompany, self).view_add() return super(ViewCompany, self).view_add()
######## ########
...@@ -199,3 +200,10 @@ class ViewCompany(BaseView): ...@@ -199,3 +200,10 @@ class ViewCompany(BaseView):
row = self.save(values, self.req.user, row) row = self.save(values, self.req.user, row)
return 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 \ No newline at end of file
...@@ -7,7 +7,6 @@ from datetime import datetime ...@@ -7,7 +7,6 @@ from datetime import datetime
import colander import colander
from deform import (Form, widget, ValidationFailure, ) from deform import (Form, widget, ValidationFailure, )
from deform.widget import AutocompleteInputWidget from deform.widget import AutocompleteInputWidget
# from opensipkd.base.models import DepartemenUser
from pyramid.httpexceptions import (HTTPFound, ) from pyramid.httpexceptions import (HTTPFound, )
from pyramid.view import (view_config, ) from pyramid.view import (view_config, )
from sqlalchemy import func from sqlalchemy import func
...@@ -15,9 +14,10 @@ from sqlalchemy.orm import aliased ...@@ -15,9 +14,10 @@ from sqlalchemy.orm import aliased
from opensipkd.tools import (get_ext, get_random_string, get_settings) 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 opensipkd.tools.buttons import btn_cancel, btn_save, btn_delete, btn_close
from .company import company_widget
from .upload import AddSchema as UploadSchema from .upload import AddSchema as UploadSchema
from .. import renderer from .. import renderer
from ..models import DBSession, Departemen, Partner, PartnerDepartemen from ..models import DBSession, Departemen, Partner, PartnerDepartemen, ResCompany
from ..views import ColumnDT, DataTables, BaseView from ..views import ColumnDT, DataTables, BaseView
SESS_ADD_FAILED = 'Tambah departemen gagal' SESS_ADD_FAILED = 'Tambah departemen gagal'
...@@ -63,6 +63,10 @@ class AddSchema(colander.Schema): ...@@ -63,6 +63,10 @@ class AddSchema(colander.Schema):
alamat = colander.SchemaNode(colander.String(), missing=colander.drop, alamat = colander.SchemaNode(colander.String(), missing=colander.drop,
oid="alamat") oid="alamat")
company_id = colander.SchemaNode(colander.Integer(),
widget=company_widget,
missing=colander.drop,
oid="company_id")
status = colander.SchemaNode(colander.Boolean(), oid="status") status = colander.SchemaNode(colander.Boolean(), oid="status")
...@@ -74,6 +78,9 @@ class AddSchema(colander.Schema): ...@@ -74,6 +78,9 @@ class AddSchema(colander.Schema):
values=f"{request._host}/departemen/hon/act"), values=f"{request._host}/departemen/hon/act"),
oid="parent_nm", oid="parent_nm",
title="Induk", ) title="Induk", )
if request.user.company_id:
self["company_id"].widget = widget.HiddenWidget()
self["company_id"].default = request.user.company_id
class EditSchema(AddSchema): class EditSchema(AddSchema):
...@@ -124,6 +131,7 @@ class ViewDepartemen(BaseView): ...@@ -124,6 +131,7 @@ class ViewDepartemen(BaseView):
self.form_params = dict(scripts="") self.form_params = dict(scripts="")
self.list_url = 'departemen' self.list_url = 'departemen'
self.list_route = 'departemen' self.list_route = 'departemen'
self.table = Departemen
######## ########
# List # # List #
...@@ -142,21 +150,22 @@ class ViewDepartemen(BaseView): ...@@ -142,21 +150,22 @@ class ViewDepartemen(BaseView):
if 'id' in form.request.matchdict: if 'id' in form.request.matchdict:
uid = form.request.matchdict['id'] uid = form.request.matchdict['id']
q = DBSession.query(Departemen).filter_by(id=uid) q = DBSession.query(Departemen).filter_by(id=uid)
urusan = q.first() current = q.first()
else: else:
urusan = None current = None
q = Departemen.query_kode(value['kode']) found = Departemen.query_kode(value['kode']). \
found = q.first() filter_by(company_id=value["company_id"]).first()
if urusan: if current:
if found and found.id != urusan.id: if found and found.id != current.id:
err_kode() err_kode()
elif found: elif found:
err_kode() err_kode()
found = Departemen.query_nama(value['nama']).first() found = Departemen.query_nama(value['nama']). \
if urusan: filter_by(company_id=value["company_id"]).first()
if found and found.id != urusan.id: if current:
if found and found.id != current.id:
err_nama() err_nama()
elif found: elif found:
err_nama() err_nama()
...@@ -200,16 +209,18 @@ class ViewDepartemen(BaseView): ...@@ -200,16 +209,18 @@ class ViewDepartemen(BaseView):
request = self.req request = self.req
if 'id' in request.matchdict: if 'id' in request.matchdict:
values['id'] = request.matchdict['id'] values['id'] = request.matchdict['id']
values["company_id"] = request.user.company_id
row = self.save(values, request.user, row) row = self.save(values, request.user, row)
request.session.flash( request.session.flash(
"Departemen {nama} sudah disimpan.".format(nama=row.nama)) "Departemen {nama} sudah disimpan.".format(nama=row.nama))
def route_list(self, ): # def route_list(self, ):
return HTTPFound(location=self.req.route_url(self.list_route)) # return HTTPFound(location=self.req.route_url(self.list_route))
def get_form(self, class_form, row=None, buttons=(btn_save, btn_cancel)): def get_form(self, class_form, row=None, buttons=(btn_save, btn_cancel)):
schema = class_form(validator=self.form_validator) 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 schema.request = self.req
if row: if row:
schema.deserialize(row) schema.deserialize(row)
...@@ -220,14 +231,14 @@ class ViewDepartemen(BaseView): ...@@ -220,14 +231,14 @@ class ViewDepartemen(BaseView):
del self.req.session[session_name] del self.req.session[session_name]
return r return r
def query_id(self): # def query_id(self):
return DBSession.query(Departemen).filter_by( # return DBSession.query(Departemen).filter_by(
id=self.req.matchdict['id']) # id=self.req.matchdict['id'])
def id_not_found(self): # def id_not_found(self):
msg = 'Departemen ID %s Tidak Ditemukan.' % self.req.matchdict['id'] # msg = 'Departemen ID %s Tidak Ditemukan.' % self.req.matchdict['id']
self.req.session.flash(msg, 'error') # self.req.session.flash(msg, 'error')
return self.route_list() # return self.route_list()
@view_config(route_name='departemen-view', @view_config(route_name='departemen-view',
renderer='templates/form_input.pt', permission='departemen') renderer='templates/form_input.pt', permission='departemen')
...@@ -270,6 +281,8 @@ class ViewDepartemen(BaseView): ...@@ -270,6 +281,8 @@ class ViewDepartemen(BaseView):
ColumnDT(Departemen.level_id, mData='level_id'), ] ColumnDT(Departemen.level_id, mData='level_id'), ]
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)
if self.req.user.company_id:
query = query.filter(Departemen.company_id == self.req.user.company_id)
row_table = DataTables(request.GET, query, columns) row_table = DataTables(request.GET, query, columns)
return row_table.output_result() return row_table.output_result()
...@@ -280,6 +293,8 @@ class ViewDepartemen(BaseView): ...@@ -280,6 +293,8 @@ class ViewDepartemen(BaseView):
Departemen.nama.ilike('%%%s%%' % term)) \ Departemen.nama.ilike('%%%s%%' % term)) \
.order_by( .order_by(
Departemen.nama) Departemen.nama)
if self.req.user.company_id:
q = q.filter(Departemen.company_id == self.req.user.company_id)
rows = q.all() rows = q.all()
r = [] r = []
for k in rows: for k in rows:
...@@ -296,6 +311,8 @@ class ViewDepartemen(BaseView): ...@@ -296,6 +311,8 @@ class ViewDepartemen(BaseView):
Departemen.kode) \ Departemen.kode) \
.ilike('%%%s%%' % term)) \ .ilike('%%%s%%' % term)) \
.order_by(Departemen.nama) .order_by(Departemen.nama)
if self.req.user.company_id:
q = q.filter(Departemen.company_id == self.req.user.company_id)
rows = q.all() rows = q.all()
r = [] r = []
for k in rows: for k in rows:
...@@ -314,6 +331,8 @@ class ViewDepartemen(BaseView): ...@@ -314,6 +331,8 @@ class ViewDepartemen(BaseView):
'%%%s%%' % '%%%s%%' %
term)).order_by( term)).order_by(
Departemen.nama) Departemen.nama)
if self.req.user.company_id:
q = q.filter(Departemen.company_id == self.req.user.company_id)
if int(level_id) > 0: if int(level_id) > 0:
q = q.filter(Departemen.level_id == int(level_id)) q = q.filter(Departemen.level_id == int(level_id))
if request.user.id > 1 and not request.has_permission( if request.user.id > 1 and not request.has_permission(
...@@ -349,6 +368,8 @@ class ViewDepartemen(BaseView): ...@@ -349,6 +368,8 @@ class ViewDepartemen(BaseView):
'%%%s%%' % '%%%s%%' %
term)).order_by( term)).order_by(
Departemen.nama) Departemen.nama)
if self.req.user.company_id:
q = q.filter(Departemen.company_id == self.req.user.company_id)
if int(level_id) > 0: if int(level_id) > 0:
q = q.filter(Departemen.level_id == int(level_id)) q = q.filter(Departemen.level_id == int(level_id))
......
# from ..tools import row2dict, xls_reader
from datetime import datetime from datetime import datetime
import colander import colander
...@@ -7,26 +6,22 @@ from deform import ( ...@@ -7,26 +6,22 @@ from deform import (
widget, widget,
ValidationFailure, ValidationFailure,
) )
from opensipkd.base.models.common import ResCompany from opensipkd.tools.buttons import btn_save, btn_cancel, btn_delete
from opensipkd.base.models import User, ResProvinsi, ResDati2, ResKecamatan, ResDesa
from pyramid.httpexceptions import ( from pyramid.httpexceptions import (
HTTPFound, HTTPFound,
) )
from pyramid.view import ( from pyramid.view import (
view_config, view_config,
) )
from opensipkd.tools.buttons import btn_save, btn_cancel, btn_delete
from .dati2 import dati2_widget from opensipkd.base.models import (
from .desa import desa_widget User, ResProvinsi, ResDati2, ResKecamatan, ResDesa)
from .kecamatan import kecamatan_widget from opensipkd.base.models.common import ResCompany
from .company import company_widget
from .partner_base import PartnerSchema from .partner_base import PartnerSchema
from .provinsi import provinsi_widget
from ..models import DBSession from ..models import DBSession
from ..models import Partner from ..models import Partner
from ..views import ColumnDT, DataTables, BaseView from ..views import ColumnDT, DataTables, BaseView
from .company import company_widget
SESS_ADD_FAILED = 'Tambah partner gagal' SESS_ADD_FAILED = 'Tambah partner gagal'
SESS_EDIT_FAILED = 'Edit partner gagal' SESS_EDIT_FAILED = 'Edit partner gagal'
...@@ -47,6 +42,12 @@ class AddSchema(PartnerSchema): ...@@ -47,6 +42,12 @@ class AddSchema(PartnerSchema):
oid="company_id", oid="company_id",
title="Company") 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): class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(), id = colander.SchemaNode(colander.String(),
...@@ -81,6 +82,8 @@ class ViewPartner(BaseView): ...@@ -81,6 +82,8 @@ class ViewPartner(BaseView):
ColumnDT(Partner.status, mData='status'), ColumnDT(Partner.status, mData='status'),
] ]
query = DBSession.query().select_from(Partner) 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) row_table = DataTables(request.GET, query, columns)
return row_table.output_result() return row_table.output_result()
......
...@@ -6,7 +6,7 @@ from pyramid.view import (view_config, ) ...@@ -6,7 +6,7 @@ from pyramid.view import (view_config, )
from sqlalchemy import or_ from sqlalchemy import or_
from sqlalchemy.orm import aliased 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 Departemen, Jabatan
from ..models import Partner, PartnerDepartemen from ..models import Partner, PartnerDepartemen
from opensipkd.tools import dmy, date_from_str from opensipkd.tools import dmy, date_from_str
...@@ -169,7 +169,7 @@ class ViewPartner(BaseView): ...@@ -169,7 +169,7 @@ class ViewPartner(BaseView):
{'title': "Nama", 'data': "nama"}, {'title': "Nama", 'data': "nama"},
{'title': "Unit Kerja", 'data': "departemen"}, {'title': "Unit Kerja", 'data': "departemen"},
{'title': "Jabatan", 'data': "jabatan"}, {'title': "Jabatan", 'data': "jabatan"},
{'title': "Jenis Jabatan", 'data': "jenis"}, {'title': "Pemda", 'data': "jenis"},
{'title': "Mulai", 'data': "mulai"}, {'title': "Mulai", 'data': "mulai"},
{'title': "Selesai", 'data': "selesai"}, ] {'title': "Selesai", 'data': "selesai"}, ]
self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \ self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \
...@@ -277,19 +277,22 @@ class ViewPartner(BaseView): ...@@ -277,19 +277,22 @@ class ViewPartner(BaseView):
ColumnDT(Partner.nama, mData='nama'), ColumnDT(Partner.nama, mData='nama'),
ColumnDT(Departemen.nama, mData='departemen'), ColumnDT(Departemen.nama, mData='departemen'),
ColumnDT(Jabatan.nama, mData='jabatan'), ColumnDT(Jabatan.nama, mData='jabatan'),
ColumnDT(Jabatan.jenis, mData='jenis'), ColumnDT(ResCompany.nama, mData='jenis'),
ColumnDT(struktural.nama, mData='struktural_nm'), ColumnDT(struktural.nama, mData='struktural_nm'),
ColumnDT(PartnerDepartemen.mulai, mData='mulai'), ColumnDT(PartnerDepartemen.mulai, mData='mulai'),
ColumnDT(PartnerDepartemen.selesai, mData='selesai'), ColumnDT(PartnerDepartemen.selesai, mData='selesai'),
] ]
query = PartnerDBSession.query().select_from(PartnerDepartemen) \ q = PartnerDBSession.query().select_from(PartnerDepartemen) \
.outerjoin(Departemen, PartnerDepartemen.departemen_id == Departemen.id) \ .join(Departemen, PartnerDepartemen.departemen_id == Departemen.id) \
.outerjoin(ResCompany, Departemen.company_id == ResCompany.id) \
.outerjoin(Partner, Partner.id == PartnerDepartemen.partner_id) \ .outerjoin(Partner, Partner.id == PartnerDepartemen.partner_id) \
.outerjoin(Jabatan, (PartnerDepartemen.jabatan_id == Jabatan.id)) \ .outerjoin(Jabatan, (PartnerDepartemen.jabatan_id == Jabatan.id)) \
.outerjoin(struktural, (PartnerDepartemen.jabatan_id == struktural.id)) \ .outerjoin(struktural, (PartnerDepartemen.jabatan_id == struktural.id)) \
.order_by(Partner.nama) .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() return row_table.output_result()
elif url_dict['act'] == 'hon_departemen': elif url_dict['act'] == 'hon_departemen':
...@@ -305,6 +308,9 @@ class ViewPartner(BaseView): ...@@ -305,6 +308,9 @@ class ViewPartner(BaseView):
filter(PartnerDepartemen.departemen_id == ses['departemen_id']). \ filter(PartnerDepartemen.departemen_id == ses['departemen_id']). \
filter(or_(Jabatan.kode == '101', Jabatan.kode == '102')). \ filter(or_(Jabatan.kode == '101', Jabatan.kode == '102')). \
order_by(Partner.nama) order_by(Partner.nama)
if self.req.user.company_id:
q = q.filter(Departemen.company_id == self.req.user.company_id)
rows = q.all() rows = q.all()
r = [] r = []
keys = ('id', 'value', 'nik', 'nama', 'jabatan_id', 'jabatan_nm') keys = ('id', 'value', 'nik', 'nama', 'jabatan_id', 'jabatan_nm')
...@@ -327,6 +333,8 @@ class ViewPartner(BaseView): ...@@ -327,6 +333,8 @@ class ViewPartner(BaseView):
filter(Partner.nama.ilike('%%%s%%' % term)). \ filter(Partner.nama.ilike('%%%s%%' % term)). \
filter(PartnerDepartemen.departemen_id == ses['departemen_id']). \ filter(PartnerDepartemen.departemen_id == ses['departemen_id']). \
order_by(Partner.nama) order_by(Partner.nama)
if self.req.user.company_id:
q = q.filter(Departemen.company_id == self.req.user.company_id)
rows = q.all() rows = q.all()
r = [] r = []
keys = ('id', 'value', 'nik', 'nama', 'jabatan_id', 'jabatan_nm') keys = ('id', 'value', 'nik', 'nama', 'jabatan_id', 'jabatan_nm')
...@@ -349,6 +357,8 @@ class ViewPartner(BaseView): ...@@ -349,6 +357,8 @@ class ViewPartner(BaseView):
filter(or_(Jabatan.kode == '101', Jabatan.kode == '102', Jabatan.kode == '103', Jabatan.kode == filter(or_(Jabatan.kode == '101', Jabatan.kode == '102', Jabatan.kode == '103', Jabatan.kode ==
'104')). \ '104')). \
order_by(Partner.nama) order_by(Partner.nama)
if self.req.user.company_id:
q = q.filter(Departemen.company_id == self.req.user.company_id)
rows = q.all() rows = q.all()
r = [] r = []
keys = ('id', 'value', 'nik', 'nama', 'jabatan_id', 'jabatan_nm') keys = ('id', 'value', 'nik', 'nama', 'jabatan_id', 'jabatan_nm')
...@@ -362,6 +372,8 @@ class ViewPartner(BaseView): ...@@ -362,6 +372,8 @@ class ViewPartner(BaseView):
q = DBSession.query(Jabatan.id, Jabatan.kode, Jabatan.nama, Jabatan.jenis). \ q = DBSession.query(Jabatan.id, Jabatan.kode, Jabatan.nama, Jabatan.jenis). \
filter(Jabatan.nama.ilike('%%%s%%' % term)). \ filter(Jabatan.nama.ilike('%%%s%%' % term)). \
order_by(Jabatan.nama) order_by(Jabatan.nama)
if self.req.user.company_id:
q = q.filter(Departemen.company_id == self.req.user.company_id)
rows = q.all() rows = q.all()
r = [] r = []
for k in rows: for k in rows:
......
...@@ -4,18 +4,19 @@ import re ...@@ -4,18 +4,19 @@ import re
import colander import colander
from datatables import (ColumnDT, DataTables, ) from datatables import (ColumnDT, DataTables, )
from deform import (Form, widget, ValidationFailure, Button, ) from deform import (Form, widget, ValidationFailure, Button, )
from opensipkd.tools import create_now
from opensipkd.tools.buttons import btn_cancel, btn_save, btn_close
from opensipkd.tools.report import open_rml_row, csv_response, open_rml_pdf, pdf_response
from pyramid.httpexceptions import (HTTPFound, HTTPNotFound, ) from pyramid.httpexceptions import (HTTPFound, HTTPNotFound, )
from pyramid.i18n import TranslationStringFactory from pyramid.i18n import TranslationStringFactory
from pyramid.view import view_config from pyramid.view import view_config
from sqlalchemy import (func, or_, ) from sqlalchemy import (func, or_, )
from ziggurat_foundations.models.services.user import UserService from ziggurat_foundations.models.services.user import UserService
from .company import company_widget
from .user_login import ( from .user_login import (
regenerate_security_code, send_email_security_code, generate_api_key, ) regenerate_security_code, send_email_security_code, generate_api_key, )
from ..models import (DBSession, User, Group, UserGroup, ) from ..models import (DBSession, User, Group, UserGroup, ResCompany, )
from opensipkd.tools import create_now
from opensipkd.tools.buttons import btn_cancel, btn_save, btn_view, btn_close
from opensipkd.tools.report import open_rml_row, csv_response, open_rml_pdf, pdf_response
_ = TranslationStringFactory('user') _ = TranslationStringFactory('user')
...@@ -130,7 +131,6 @@ def form_validator(form, value): ...@@ -130,7 +131,6 @@ def form_validator(form, value):
pass pass
# save_user ngambil dari base lama
def save_user(values, user, row=None): def save_user(values, user, row=None):
if not row: if not row:
row = User() row = User()
...@@ -158,21 +158,10 @@ class AddSchema(colander.Schema): ...@@ -158,21 +158,10 @@ class AddSchema(colander.Schema):
password = colander.SchemaNode( password = colander.SchemaNode(
colander.String(), widget=widget.CheckedPasswordWidget(), colander.String(), widget=widget.CheckedPasswordWidget(),
missing=colander.drop) missing=colander.drop)
# retype_password = colander.SchemaNode( company_id = colander.SchemaNode(
# colander.String(), widget=widget.PasswordWidget(), colander.Integer(), widget=company_widget,
# missing=colander.drop, title=_('Ulangi kata kunci')) title="Company",
missing=colander.drop)
# class AddSchema2(AddSchema):
# id_dept_asal = colander.SchemaNode(colander.String(), missing=colander.drop,
# title=_('ID Dept Asal'), oid='id_dept_asal',
# widget=widget.HiddenWidget())
# dept_asal = colander.SchemaNode(colander.String(), missing=colander.drop,
# title=_('Departemen Asal'), oid='dept_asal')
# id_dept_pad = colander.SchemaNode(colander.String(), missing=colander.drop,
# title=_('ID Dept PAD'), oid='id_dept_pad', widget=widget.HiddenWidget())
# dept_pad = colander.SchemaNode(colander.String(), missing=colander.drop,
# title=_('Departemen PAD'), oid='dept_pad')
class EditSchema(AddSchema): class EditSchema(AddSchema):
...@@ -180,18 +169,6 @@ class EditSchema(AddSchema): ...@@ -180,18 +169,6 @@ class EditSchema(AddSchema):
colander.String(), widget=status_widget, title=_('Status')) colander.String(), widget=status_widget, title=_('Status'))
# class EditSchema2(EditSchema):
# id_dept_asal = colander.SchemaNode(colander.String(), missing=colander.drop,
# title=_('ID Dept Asal'), oid='id_dept_asal',
# widget=widget.HiddenWidget())
# dept_asal = colander.SchemaNode(colander.String(), missing=colander.drop,
# title=_('Departemen Asal'), oid='dept_asal')
# id_dept_pad = colander.SchemaNode(colander.String(), missing=colander.drop,
# title=_('ID Dept PAD'), oid='id_dept_pad', widget=widget.HiddenWidget())
# dept_pad = colander.SchemaNode(colander.String(), missing=colander.drop,
# title=_('Departemen PAD'), oid='dept_pad')
def get_group_list(): def get_group_list():
r = [] r = []
q = DBSession.query(Group).order_by(Group.group_name) q = DBSession.query(Group).order_by(Group.group_name)
...@@ -204,7 +181,7 @@ def get_group_list(): ...@@ -204,7 +181,7 @@ def get_group_list():
def get_form(request, class_form, user=None, buttons=(btn_save, btn_cancel)): def get_form(request, class_form, user=None, buttons=(btn_save, btn_cancel)):
status_list = ( status_list = (
('1', _('Active')), ('1', _('Active')),
('0', _('Inactive'))) ('0', _('Archived')))
if user and user.api_key: if user and user.api_key:
api_key_list = ( api_key_list = (
('', _(user.api_key)), ('', _(user.api_key)),
...@@ -217,7 +194,9 @@ def get_form(request, class_form, user=None, buttons=(btn_save, btn_cancel)): ...@@ -217,7 +194,9 @@ def get_form(request, class_form, user=None, buttons=(btn_save, btn_cancel)):
group_list = get_group_list() group_list = get_group_list()
schema = schema.bind( schema = schema.bind(
status_list=status_list, group_list=group_list, user=user, status_list=status_list, group_list=group_list, user=user,
api_key_list=api_key_list) api_key_list=api_key_list,
company_list=ResCompany.get_list()
)
return Form(schema, buttons=buttons) return Form(schema, buttons=buttons)
...@@ -241,6 +220,8 @@ def insert(request, values): ...@@ -241,6 +220,8 @@ def insert(request, values):
user.email = values['email'].lower() user.email = values['email'].lower()
user.user_name = re.sub(' ', '', values['user_name']) # .lower() user.user_name = re.sub(' ', '', values['user_name']) # .lower()
user.security_code_date = create_now() user.security_code_date = create_now()
company_id = request.user.company_id or values["company_id"]
user.company_id = company_id
remain = regenerate_security_code(user) remain = regenerate_security_code(user)
if 'is_api_key' in values: if 'is_api_key' in values:
user.api_key = generate_api_key() user.api_key = generate_api_key()
...@@ -255,12 +236,6 @@ def insert(request, values): ...@@ -255,12 +236,6 @@ def insert(request, values):
ug.group_id = gid ug.group_id = gid
DBSession.add(ug) DBSession.add(ug)
add_member_count(gid) add_member_count(gid)
# if 'opensipkd.webr.models' in get_modules():
# from opensipkd.webr.models import UserWebr
# userwebr = UserWebr()
# userwebr.from_dict(values)
# DBSession.add(userwebr)
# DBSession.flush()
return user, remain return user, remain
...@@ -305,9 +280,6 @@ def view_add(request): ...@@ -305,9 +280,6 @@ def view_add(request):
return HTTPFound(location=request.route_url('user')) return HTTPFound(location=request.route_url('user'))
########
# Edit #
########
def user_group_set(user): def user_group_set(user):
q = DBSession.query(UserGroup).filter_by(user_id=user.id) q = DBSession.query(UserGroup).filter_by(user_id=user.id)
r = [] r = []
...@@ -317,7 +289,6 @@ def user_group_set(user): ...@@ -317,7 +289,6 @@ def user_group_set(user):
def update(request, user, values): def update(request, user, values):
fnames = ['email', 'user_name']
user.email = values['email'].lower() user.email = values['email'].lower()
user.user_name = re.sub(' ', '', values['user_name']) # .lower()) user.user_name = re.sub(' ', '', values['user_name']) # .lower())
if user.id != request.user.id: if user.id != request.user.id:
...@@ -329,6 +300,8 @@ def update(request, user, values): ...@@ -329,6 +300,8 @@ def update(request, user, values):
user.api_key = generate_api_key() user.api_key = generate_api_key()
if 'password' in values: if 'password' in values:
UserService.set_password(user, values['password']) UserService.set_password(user, values['password'])
company_id = request.user.company_id or values["company_id"]
user.company_id = company_id
DBSession.add(user) DBSession.add(user)
existing = user_group_set(user) existing = user_group_set(user)
unused = existing - values['groups'] unused = existing - values['groups']
...@@ -345,15 +318,6 @@ def update(request, user, values): ...@@ -345,15 +318,6 @@ def update(request, user, values):
ug.group_id = gid ug.group_id = gid
DBSession.add(ug) DBSession.add(ug)
add_member_count(gid) add_member_count(gid)
# if 'opensipkd.webr.models' in get_modules():
# from opensipkd.webr.models import UserWebr
# q_webr = DBSession.query(UserWebr).filter_by(user_id=user.id).first()
# if q_webr:
# userwebr = UserWebr()
# values['id'] = q_webr.id
# userwebr.from_dict(values)
# DBSession.add(userwebr)
# DBSession.flush()
@view_config( @view_config(
...@@ -361,13 +325,12 @@ def update(request, user, values): ...@@ -361,13 +325,12 @@ def update(request, user, values):
permission='user-edit') permission='user-edit')
def view_edit(request): def view_edit(request):
q = DBSession.query(User).filter_by(id=request.matchdict['id']) q = DBSession.query(User).filter_by(id=request.matchdict['id'])
if request.user.company_id:
q = q.filter_by(company_id=request.user.company_id)
user = q.first() user = q.first()
if not user: if not user:
return HTTPNotFound() return HTTPNotFound()
if user.id == request.user.id: if user.id == request.user.id:
# if 'opensipkd.webr.models' in get_modules():
# form = get_form(request, AddSchema2, user)
# else:
form = get_form(request, AddSchema, user) form = get_form(request, AddSchema, user)
else: else:
# if 'opensipkd.webr.models' in get_modules(): # if 'opensipkd.webr.models' in get_modules():
...@@ -401,6 +364,8 @@ def view_edit(request): ...@@ -401,6 +364,8 @@ def view_edit(request):
permission='user-view') permission='user-view')
def view_view(request): def view_view(request):
q = DBSession.query(User).filter_by(id=request.matchdict['id']) q = DBSession.query(User).filter_by(id=request.matchdict['id'])
if request.user.company_id:
q = q.filter_by(company_id=request.user.company_id)
user = q.first() user = q.first()
if not user: if not user:
return HTTPNotFound() return HTTPNotFound()
...@@ -415,29 +380,16 @@ def view_view(request): ...@@ -415,29 +380,16 @@ def view_view(request):
d['groups'] = user_group_set(user) d['groups'] = user_group_set(user)
resp['form'] = form.render(appstruct=d, readonly=True) resp['form'] = form.render(appstruct=d, readonly=True)
return resp return resp
# if 'save' not in request.POST:
# return HTTPFound(location=request.route_url('user'))
# items = request.POST.items()
# try:
# c = form.validate(items)
# except ValidationFailure:
# resp['form'] = form.render()
# return resp
# update(request, user, dict(c.items()))
# data = dict(username=user.user_name)
# ts = _('user-updated', default='${username} profile updated', mapping=data)
# request.session.flash(ts)
return HTTPFound(location=request.route_url('user')) return HTTPFound(location=request.route_url('user'))
##########
# Delete #
##########
@view_config( @view_config(
route_name='user-delete', renderer='templates/user/delete.pt', route_name='user-delete', renderer='templates/user/delete.pt',
permission='user-edit') permission='user-edit')
def view_delete(request): def view_delete(request):
q = DBSession.query(User).filter_by(id=request.matchdict['id']) q = DBSession.query(User).filter_by(id=request.matchdict['id'])
if request.user.company_id:
q = q.filter_by(company_id=request.user.company_id)
user = q.first() user = q.first()
if not user: if not user:
return HTTPNotFound() return HTTPNotFound()
...@@ -458,25 +410,14 @@ def view_delete(request): ...@@ -458,25 +410,14 @@ def view_delete(request):
default='User ${email} ID ${uid} has been deleted', default='User ${email} ID ${uid} has been deleted',
mapping=data) mapping=data)
q.delete() q.delete()
# if 'opensipkd.webr.models' in get_modules():
# from opensipkd.webr.models import UserWebr
# q_webr = DBSession.query(UserWebr).filter_by(user_id=user.id)
# userwebr = q_webr.first()
# if userwebr:
# q_webr.delete()
request.session.flash(ts) request.session.flash(ts)
return HTTPFound(location=request.route_url('user')) return HTTPFound(location=request.route_url('user'))
##########
# Action #
##########
@view_config( @view_config(
route_name='user-act', renderer='json', permission='user-view') route_name='user-act', renderer='json', permission='user-view')
def view_act(request): def view_act(request):
ses = request.session
req = request req = request
params = req.params
url_dict = req.matchdict url_dict = req.matchdict
if url_dict['act'] == 'grid': if url_dict['act'] == 'grid':
columns = [ columns = [
...@@ -490,38 +431,11 @@ def view_act(request): ...@@ -490,38 +431,11 @@ def view_act(request):
mData='registered'), mData='registered'),
] ]
query = DBSession.query().select_from(User) query = DBSession.query().select_from(User)
rowTable = DataTables(req.GET, query, columns) if request.user.company_id:
return rowTable.output_result() query = query.filter(User.company_id == request.user.company_id)
elif url_dict['act'] == 'hon': row_table = DataTables(req.GET, query, columns)
term = 'term' in params and params['term'] or '' return row_table.output_result()
rows = DBSession.query(User.id, User.user_name, User.email.label('value')) \
.filter(User.id > 1,
or_(User.email.ilike('%%%s%%' % term),
User.user_name.ilike('%%%s%%' % term))
).all()
r = []
for k in rows:
d = dict(id=k[0],
value=k[1] + '(' + k[2] + ')')
r.append(d)
return r
elif url_dict['act'] == 'hom':
term = 'term' in params and params['term'] or ''
rows = DBSession.query(User.id, User.email
).filter(User.id != '1',
User.id != '2',
User.email.ilike('%%%s%%' % term)
).all()
r = []
for k in rows:
d = dict(id=k[0],
value=k[1],
kode=k[1],
nama=k[2])
r.append(d)
return r
elif url_dict['act'] == 'csv': elif url_dict['act'] == 'csv':
query = query_register() query = query_register()
...@@ -538,6 +452,7 @@ def view_act(request): ...@@ -538,6 +452,7 @@ def view_act(request):
} }
return csv_response(request, value, filename) return csv_response(request, value, filename)
elif url_dict['act'] == 'pdf': elif url_dict['act'] == 'pdf':
# todo ganti rml jadi openoffice
query = query_register() query = query_register()
_here = os.path.dirname(__file__) # get current folder -> views _here = os.path.dirname(__file__) # get current folder -> views
path = os.path.dirname(_here) # mundur 1 level path = os.path.dirname(_here) # mundur 1 level
...@@ -554,29 +469,7 @@ def view_act(request): ...@@ -554,29 +469,7 @@ def view_act(request):
address=request.address) address=request.address)
return pdf_response(request, pdf, filename) return pdf_response(request, pdf, filename)
# elif url_dict['act'] == 'hon_dept':
# term = 'term' in params and params['term'] or ''
# id_dept_asal = 'id_dept_asal' in params and params['id_dept_asal'] or 0
# q = DBSession.query(Departemen.id, Departemen.nama). \
# filter(Departemen.status == 1,
# # Departemen.level_id==4,
# Departemen.nama.ilike('%%%s%%' % term))
# rows = q.all()
# r = []
# for k in rows:
# d = dict(id=k.id,
# value=k.nama,
# # kode = k.kode,
# nama=k.nama,
# # level_id = k.level_id
# )
# r.append(d)
# return r
#######
# RPT #
#######
def query_register(): def query_register():
return DBSession.query(User.user_name, User.email, return DBSession.query(User.user_name, User.email,
func.to_char(User.registered_date, "DD-MM-YYYY").label("registered_date")).order_by( func.to_char(User.registered_date, "DD-MM-YYYY").label("registered_date")).order_by(
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!