Commit 09de39e2 by aa.gusti

penambahan company

1 parent a30218b3
......@@ -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))
......
......@@ -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 = []
......
......@@ -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):
......
......@@ -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
......
......@@ -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
......@@ -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))
......
# 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()
......
......@@ -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:
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!