Commit 93f94fd7 by Hamsyah

pembaruan by hmzh

1 parent 6f40132e
......@@ -113,7 +113,6 @@ class ViewJabatan(BaseView):
self.list_buttons = self.list_buttons + self.list_report + (button_import,)
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.report_file = os.path.join(path, 'reports', 'jabatan.jrxml')
def get_bindings(self, row=None):
......@@ -131,16 +130,17 @@ class ViewJabatan(BaseView):
return resolver.abspath()
def pdf_response(self, **kwargs):
# print("PDF RESPONSE======================================")
from opensipkd.base.tools.report import jasper_export
logo = self.get_module_path('opensipkd.base')
logo = os.path.join(logo, 'static', 'img', 'logo.png')
path = self.get_module_path('opensipkd.base')
logo = os.path.join(path, 'static', 'img', 'logo.png')
report_file = os.path.join(path, 'reports', 'jabatan.jrxml')
parameters = {
"judul": get_params('company', "openSIPKD"),
"alamat_lengkap": get_params('address', "Bekasi"),
"logo": logo
}
print(parameters)
filename = jasper_export(self.report_file, parameters=parameters)
}
filename = jasper_export(report_file, parameters=parameters)
return file_response(self.req, filename=filename[0])
@staticmethod
......
......@@ -85,7 +85,6 @@ class Views(BaseView):
self.list_buttons = self.list_buttons + self.list_report + (button_import,)
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.report_file = os.path.join(path, 'reports', 'kecamatan.jrxml')
def form_validator(self, form, value):
def err_kode():
......@@ -138,16 +137,16 @@ class Views(BaseView):
return resolver.abspath()
def pdf_response(self, **kwargs):
# print("PDF RESPONSE======================================")
from opensipkd.base.tools.report import jasper_export
logo = self.get_module_path('opensipkd.base')
logo = os.path.join(logo, 'static', 'img', 'logo.png')
path = self.get_module_path('opensipkd.base')
logo = os.path.join(path, 'static', 'img', 'logo.png')
report_file = os.path.join(path, 'reports', 'kecamatan.jrxml')
parameters = {
"judul": get_params('company', "openSIPKD"),
"logo": logo
}
print(parameters)
filename = jasper_export(self.report_file, parameters=parameters)
filename = jasper_export(report_file, parameters=parameters)
return file_response(self.req, filename=filename[0])
@staticmethod
......
......@@ -85,7 +85,6 @@ class Views(BaseView):
self.list_buttons = self.list_buttons + self.list_report + (button_import,)
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.report_file = os.path.join(path, 'reports', 'parameter.jrxml')
@view_config(route_name='parameter', renderer='templates/table.pt',
permission='user-edit')
......@@ -98,16 +97,17 @@ class Views(BaseView):
return resolver.abspath()
def pdf_response(self, **kwargs):
# print("PDF RESPONSE======================================")
from opensipkd.base.tools.report import jasper_export
logo = self.get_module_path('opensipkd.base')
logo = os.path.join(logo, 'static', 'img', 'logo.png')
path = self.get_module_path('opensipkd.base')
logo = os.path.join(path, 'static', 'img', 'logo.png')
report_file = os.path.join(path, 'reports', 'parameter.jrxml')
parameters = {
"judul": get_params('company', "openSIPKD"),
"alamat_lengkap": get_params('address', "Bekasi"),
"logo": logo
}
print(parameters)
filename = jasper_export(self.report_file, parameters=parameters)
}
filename = jasper_export(report_file, parameters=parameters)
return file_response(self.req, filename=filename[0])
@staticmethod
......
......@@ -5,13 +5,8 @@ from deform import widget
from pyramid.view import view_config
from sqlalchemy import or_
from sqlalchemy.orm import aliased
from opensipkd.tools import get_random_string
from opensipkd.models import DBSession as PartnerDBSession, DBSession, \
ResCompany
from opensipkd.models import Departemen, Jabatan
from opensipkd.models import Partner, PartnerDepartemen
from opensipkd.tools import dmy, date_from_str
from opensipkd.tools import get_random_string, date_from_str, dmy
from opensipkd.models import DBSession as PartnerDBSession, DBSession, ResCompany, Departemen, Jabatan, Partner, PartnerDepartemen
from . import widget_os, button_import
from ..views import ColumnDT, DataTables, BaseView
from pyramid.path import AssetResolver
......@@ -20,18 +15,22 @@ from . import BaseView, button_import, get_params
SESS_ADD_FAILED = 'Tambah posisi partner gagal'
SESS_EDIT_FAILED = 'Edit posisi partner gagal'
def get_partner_list():
"""Fungsi untuk mengambil daftar partner"""
partners = DBSession.query(Partner).order_by(Partner.nama).all()
return [(str(partner.id), partner.nama) for partner in partners]
class AddSchema(colander.Schema):
nama_widget = widget.AutocompleteInputWidget(
size=60,
values='/partner/hon/act',
min_length=2,
style="z-index: 100000 !important;")
@colander.deferred
def nama_widget(node, kw):
values = kw.get('partner_list', [])
return widget.SelectWidget(values=values, placeholder="Pilih Partner")
@colander.deferred
def departemen_widget(node, kw):
departemen_list = DBSession.query(Departemen.id, Departemen.nama).all()
choices = [(str(departemen.id), departemen.nama) for departemen in departemen_list]
return widget.CheckboxChoiceWidget(values=choices, multiple=True) # Enable multiple selection
return widget.CheckboxChoiceWidget(values=choices, multiple=True)
@colander.deferred
def jabatan_widget(node, kw):
......@@ -55,7 +54,7 @@ class AddSchema(colander.Schema):
widget=widget.HiddenWidget(),
missing=colander.drop)
departemen = colander.SchemaNode(
colander.Set(), # Menggunakan Set untuk multiple values
colander.Set(),
widget=departemen_widget,
oid="departemen_nm",
title="Departemen *")
......@@ -73,8 +72,7 @@ class AddSchema(colander.Schema):
selesai = colander.SchemaNode(
colander.String(),
oid="selesai",
widget=widget_os.DateInputWidget(css_class="date", format="dd-mm-yyyy",
style="z-index: 9999 !important;"),
widget=widget_os.DateInputWidget(css_class="date", format="dd-mm-yyyy", style="z-index: 9999 !important;"),
title="Selesai")
class EditSchema(AddSchema):
......@@ -85,12 +83,9 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), title="Action")
nama = colander.SchemaNode(
colander.String(), field=Partner.nama)
mulai = colander.SchemaNode(
colander.String())
selesai = colander.SchemaNode(
colander.String())
nama = colander.SchemaNode(colander.String(), field=Partner.nama)
mulai = colander.SchemaNode(colander.String())
selesai = colander.SchemaNode(colander.String())
class ViewPartner(BaseView):
def __init__(self, request):
......@@ -103,10 +98,25 @@ class ViewPartner(BaseView):
self.list_buttons = self.list_buttons + self.list_report + (button_import,)
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.report_file = os.path.join(path, 'reports', 'partnerdep1.jrxml')
def get_bindings(self, row=None):
bindings = {
"partner_list": get_partner_list(),
"departemen_list": [(str(d.id), d.nama) for d in DBSession.query(Departemen).all()],
"jabatan_list": [(str(j.id), j.nama) for j in DBSession.query(Jabatan).all()]
}
if row:
bindings["default_values"] = {
"partner_id": row.partner_id,
"nama": str(row.partner_id) if row.partner_id else "",
"departemen": [str(dept_id[0]) for dept_id in DBSession.query(PartnerDepartemen.departemen_id).filter_by(partner_id=row.partner_id, jabatan_id=row.jabatan_id).all()],
"jabatan_id": str(row.jabatan_id) if row.jabatan_id else "",
"mulai": dmy(row.mulai) if row.mulai else "",
"selesai": dmy(row.selesai) if row.selesai else ""
}
return bindings
def form_validator(self, form, value):
print(f"Validating form with values: {value}") # Debugging
def err_departemen():
raise colander.Invalid(form, 'Departemen Kerja Belum Dipilih')
......@@ -116,23 +126,14 @@ class ViewPartner(BaseView):
def err_partner():
raise colander.Invalid(form, 'Partner Belum Dipilih')
# Validasi partner_id
if not value['partner_id']:
print("Validation failed: Partner ID kosong")
err_partner()
# Validasi jabatan_id
if not value['jabatan_id']:
print("Validation failed: Jabatan kosong")
err_jabatan()
# Validasi departemen
if not value['departemen'] or value['departemen'] == set():
print("Validation failed: Departemen kosong")
err_departemen()
def save_request(self, values, row=None):
print(f"Saving with values: {values}") # Debugging
request = self.req
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
......@@ -141,28 +142,23 @@ class ViewPartner(BaseView):
if 'selesai' in values:
values['selesai'] = date_from_str(values['selesai']) if values['selesai'] else None
# Ambil jabatan_id dari form
if 'jabatan_id' in values and values['jabatan_id']:
values['jabatan_id'] = int(values['jabatan_id']) # Konversi ke integer
values['jabatan_id'] = int(values['jabatan_id'])
else:
values['jabatan_id'] = None
# Pastikan partner_id ada dan valid
partner_id = values.get('partner_id')
if not partner_id:
request.session.flash('Partner ID wajib diisi.', 'error')
return None
return row if row else PartnerDepartemen()
# Simpan setiap departemen yang dipilih sebagai baris baru
if 'departemen' in values and values['departemen']:
# Jika sedang mengedit, hapus entri lama untuk partner_id dan jabatan_id ini
if 'id' in values:
DBSession.query(PartnerDepartemen).filter_by(
partner_id=partner_id,
jabatan_id=values['jabatan_id']
).delete()
# Tambahkan entri baru untuk setiap departemen yang dipilih
for dept_id in values['departemen']:
new_row = PartnerDepartemen(
partner_id=partner_id,
......@@ -174,37 +170,37 @@ class ViewPartner(BaseView):
DBSession.add(new_row)
DBSession.flush()
request.session.flash('Posisi Partner sudah disimpan.')
return None
return new_row
else:
request.session.flash('Tidak ada departemen yang dipilih.', 'error')
return None
return row if row else PartnerDepartemen()
@view_config(route_name='partner-departemen', renderer='templates/table.pt',
permission='view')
@view_config(route_name='partner-departemen', renderer='templates/table.pt', permission='view')
def view_list(self):
return super().view_list()
def get_module_path(self, module_name):
a = AssetResolver(module_name)
resolver = a.resolve('')
return resolver.abspath()
def pdf_response(self, **kwargs):
# print("PDF RESPONSE======================================")
from opensipkd.base.tools.report import jasper_export
logo = self.get_module_path('opensipkd.base')
logo = os.path.join(logo, 'static', 'img', 'logo.png')
path = self.get_module_path('opensipkd.base')
logo = os.path.join(path, 'static', 'img', 'logo.png')
report_file = os.path.join(path, 'reports', 'partnerdep1.jrxml')
parameters = {
"judul": get_params('company', "openSIPKD"),
"alamat_lengkap": get_params('address', "Bekasi"),
"logo": logo
}
print(parameters)
filename = jasper_export(self.report_file, parameters=parameters)
}
filename = jasper_export(report_file, parameters=parameters)
return file_response(self.req, filename=filename[0])
@staticmethod
def query_register():
return DBSession.query(PartnerDepartemen.partner_id, PartnerDepartemen.departemen_id, PartnerDepartemen.departemen, PartnerDepartemen.jabatan_id, PartnerDepartemen.mulai, PartnerDepartemen.selesai).order_by(PartnerDepartemen.partner_id)
return DBSession.query(PartnerDepartemen.partner_id, PartnerDepartemen.departemen_id, PartnerDepartemen.jabatan_id, PartnerDepartemen.mulai, PartnerDepartemen.selesai).order_by(PartnerDepartemen.partner_id)
def csv_response(self, **kwargs):
query = self.query_register()
......@@ -212,145 +208,18 @@ class ViewPartner(BaseView):
header = row._mapping.keys()
rows = [list(item) for item in query.all()]
filename = f"{get_random_string(16)}.csv"
value = {
'header': header,
'rows': rows,
}
value = {'header': header, 'rows': rows}
return csv_response(self.req, value, filename)
@view_config(route_name='partner-departemen-act', renderer='json',
permission='view')
@view_config(route_name='partner-departemen-act', renderer='json', permission='view')
def view_act(self):
# request = self.req
# ses = request.session
# params = request.params
# url_dict = request.matchdict
# struktural = aliased(Jabatan)
# if url_dict['act'] == 'grid':
# columns = [
# ColumnDT(PartnerDepartemen.id, mData='id'),
# ColumnDT(Partner.kode, mData='nik'),
# ColumnDT(Partner.nama, mData='nama'),
# ColumnDT(Departemen.nama, mData='departemen'),
# ColumnDT(Jabatan.nama, mData='jabatan'),
# ColumnDT(ResCompany.nama, mData='jenis'),
# ColumnDT(struktural.nama, mData='struktural_nm'),
# ColumnDT(PartnerDepartemen.mulai, mData='mulai'),
# ColumnDT(PartnerDepartemen.selesai, mData='selesai'),
# ]
# 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)
# return row_table.output_result()
# elif url_dict['act'] == 'hon_departemen':
# term = 'term' in params and params['term'] or ''
# prefix = 'prefix' in params and params['prefix'] or ''
# q = PartnerDBSession.query(Partner.id, Partner.nik, Partner.nama,
# PartnerDepartemen.jabatan_id,
# Jabatan.nama.label('jabatan_nm'),
# ).join(PartnerDepartemen) \
# .join(Jabatan, (PartnerDepartemen.jabatan_id == Jabatan.id)) \
# .filter(Partner.nama.ilike('%%%s%%' % term)) \
# .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')
# for k in rows:
# values = (k[0], k[2] + (" - ") + k[4], k[1], k[2], k[3], k[4])
# r.append(dict(zip(keys, values)))
# return r
# elif url_dict['act'] == 'hon_jabatan':
# term = 'term' in params and params['term'] or ''
# prefix = 'prefix' in params and params['prefix'] or ''
# partner_id = 'partner_id' in params and params['partner_id'] or 0
# q = PartnerDBSession.query(Partner.id, Partner.nik, Partner.nama,
# PartnerDepartemen.jabatan_id,
# Jabatan.nama.label('jabatan_nm'),
# ).join(PartnerDepartemen) \
# .join(Jabatan, (PartnerDepartemen.jabatan_id == Jabatan.id)) \
# .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')
# for k in rows:
# values = (k[0], k[2] + (" - ") + k[4], k[1], k[2], k[3], k[4])
# r.append(dict(zip(keys, values)))
# return r
# elif url_dict['act'] == 'hon_skpkd':
# term = 'term' in params and params['term'] or ''
# prefix = 'prefix' in params and params['prefix'] or ''
# q = PartnerDBSession.query(Partner.id, Partner.nik, Partner.nama,
# PartnerDepartemen.jabatan_id,
# Jabatan.nama.label('jabatan_nm'),
# ).join(PartnerDepartemen) \
# .join(Jabatan, (PartnerDepartemen.jabatan_id == Jabatan.id)) \
# .filter(Partner.nama.ilike('%%%s%%' % term)) \
# .filter(PartnerDepartemen.departemen_id == ses['departemen_id']) \
# .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')
# for k in rows:
# values = (k[0], k[2] + (" - ") + k[4], k[1], k[2], k[3], k[4])
# r.append(dict(zip(keys, values)))
# return r
# elif url_dict['act'] == 'hon_jabatannm':
# term = 'term' in params and params['term'] or ''
# 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:
# if k[3] == 1:
# nama_jenis = 'Struktural'
# elif k[3] == 2:
# nama_jenis = 'Fungsional'
# else:
# nama_jenis = 'Keuangan'
# d = {}
# d['id'] = k[0]
# d['value'] = k[2] + ' (' + nama_jenis + ')'
# d['kode'] = k[1]
# d['nama'] = k[2]
# r.append(d)
# return r
return super(ViewPartner, self).view_act()
# Kode asli view_act tetap sama, tidak diubah untuk pertanyaan ini
return super().view_act()
def get_values(self, row, istime=False):
values = super().get_values(row, istime)
values['nama'] = row.partner.nama if row.partner else ''
values['jabatan_id'] = str(row.jabatan_id) if row.jabatan_id else ''
# Ambil semua departemen yang terkait dengan partner_id dan jabatan_id ini
departemen_ids = DBSession.query(PartnerDepartemen.departemen_id).filter_by(
partner_id=row.partner_id,
jabatan_id=row.jabatan_id
......@@ -360,38 +229,23 @@ class ViewPartner(BaseView):
values['selesai'] = dmy(row.selesai) if row.selesai else ''
return values
@view_config(route_name='partner-departemen-view',
renderer='templates/form.pt', permission='partner-departemen')
@view_config(route_name='partner-departemen-view', renderer='templates/form.pt', permission='partner-departemen')
def view_view(self):
return super().view_view()
def before_add(self):
values = {'departemen_id': self.ses['departemen_id'],
'departemen_nm': self.ses['departemen_nm'],
'departemen_kd': self.ses['departemen_kd']}
return values
@view_config(route_name='partner-departemen-add',
renderer='templates/form.pt',
permission='partner-departemen')
@view_config(route_name='partner-departemen-add', renderer='templates/form.pt', permission='partner-departemen')
def view_add(self):
print(f"POST data: {self.req.POST}") # Debugging data yang dikirim dari form
return super().view_add()
@view_config(route_name='partner-departemen-edit',
renderer='templates/form.pt',
permission='partner-departemen')
@view_config(route_name='partner-departemen-edit', renderer='templates/form.pt', permission='partner-departemen')
def view_edt(self):
return super().view_edit()
@view_config(route_name='partner-departemen-delete',
renderer='templates/form.pt',
permission='partner-departemen')
@view_config(route_name='partner-departemen-delete', renderer='templates/form.pt', permission='partner-departemen')
def view_del(self):
return super().view_delete()
@view_config(route_name='partner-departemen-upload',
renderer='templates/form.pt', permission='partner-departemen')
@view_config(route_name='partner-departemen-upload', renderer='templates/form.pt', permission='partner-departemen')
def view_upload(self):
self.upload_keys = ["mulai"]
return super().view_upload(exts=(".csv", ".tsv"))
\ No newline at end of file
......@@ -98,7 +98,6 @@ class Views(BaseView):
self.list_buttons = self.list_buttons + self.list_report + (button_import,)
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.report_file = os.path.join(path, 'reports', 'userdep1.jrxml')
def list_join(self, query, **kwargs):
return query.outerjoin(Departemen, Departemen.id == self.table.departemen_id) \
......@@ -116,14 +115,16 @@ class Views(BaseView):
def pdf_response(self, **kwargs):
from opensipkd.base.tools.report import jasper_export
logo = self.get_module_path('opensipkd.base')
logo = os.path.join(logo, 'static', 'img', 'logo.png')
path = self.get_module_path('opensipkd.base')
logo = os.path.join(path, 'static', 'img', 'logo.png')
report_file = os.path.join(path, 'reports', 'userdep1.jrxml')
parameters = {
"judul": get_params('company', "openSIPKD"),
"alamat_lengkap": get_params('address', "Bekasi"),
"logo": logo
}
print(parameters)
filename = jasper_export(self.report_file, parameters=parameters)
}
filename = jasper_export(report_file, parameters=parameters)
return file_response(self.req, filename=filename[0])
@staticmethod
......@@ -180,7 +181,7 @@ class Views(BaseView):
def view_edit(self):
response = super().view_edit()
if isinstance(response, dict):
print(f"Edit response: {response}")
# print(f"Edit response: {response}")
if self.request.method == 'POST':
form = response.get('form')
if form.validate():
......@@ -201,14 +202,14 @@ class Views(BaseView):
return super(Views, self).view_upload(exts=(".csv", ".tsv"))
def save_request(self, values, row=None):
print(f"Values received in save_request: {values}")
print(f"Row before save: {row}")
# print(f"Values received in save_request: {values}")
# print(f"Row before save: {row}")
# Saat edit, gunakan user_id dari row yang ada
user_id = row.user_id if row else values.get("user_id")
if not user_id:
print("No user_id found, returning None")
return None
# if not user_id:
# print("No user_id found, returning None")
# return None
if "departemen_id" in values:
selected_departemen = set(
......@@ -243,7 +244,7 @@ class Views(BaseView):
if selected_list:
existing_row.departemen_id = dept1
existing_row.sub_departemen = dept2
print(f"Updated existing row: {existing_row}")
#print(f"Updated existing row: {existing_row}")
row = existing_row
else:
# Buat entri baru jika belum ada
......@@ -254,19 +255,19 @@ class Views(BaseView):
sub_departemen=dept2
)
DBSession.add(new_row)
print(f"Created new row: {new_row}")
#print(f"Created new row: {new_row}")
row = new_row
else:
row = None
try:
DBSession.flush()
print(f"Row after save: {row}")
#print(f"Row after save: {row}")raise exception
except Exception as e:
DBSession.rollback()
print(f"Error during flush: {str(e)}")
print(e)
self.request.session.flash(f"Gagal menyimpan: {str(e)}", "error")
return None
return e
return row
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!