Commit 0abc3c8e by Prismana

Penambahan tombol dan fungsi import pada user, departemen, pemerintah, provinsi

1 parent d4ba51db
id,kategori,alamat,singkat,level_id,nama,kode,status,created,create_uid
4,kategori2,alamat2,nama singkat2,1,Bu Yongki,998,1,2025-03-14 13:34:00,1
5,kategori3,alamat3,nama singkat3,1,Pak yongki4,997,1,2025-03-04 09:00:35,1
\ No newline at end of file
external_id,external_user_name,provider_name,local_user_id
2,eksternal user 1,Santos,1
3,eksternal user 2,Bareskim,4
4,eksternal user 3,Landond turmp,2
\ No newline at end of file
id,partner_id,nama,kode,status,created,create_uid
2,1,Bu yongki,666,1,2025-03-14 15:10:00,1
3,1,Bu yongki2,999,1,2025-03-14 15:15:00,1
\ No newline at end of file
kategori,ibu_kota,nama,kode,status,created,create_uid,id
provinsi,Ibu kota1,nama1,ID-UUS,0,2025-03-02 14:29:46,1,88
provinsi2,Ibu kota4,nama3,ID-UIS,0,2025-03-02 15:29:46,1,87
\ No newline at end of file
registered_date,email,status,user_name
2025-03-02,admin@local.host,1,admin
2025-03-02,guest@local.host,1,guest2
2025-03-02,prismana11@local.host,1,guest3
\ No newline at end of file
......@@ -4,11 +4,8 @@ import inspect
import locale
import logging
import re
import urllib
from .routes import routes
# from opensipkd.tools.captcha import get_captcha_url
try:
......
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>reports</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
eclipse.preferences.version=1
encoding/partner.jrxml=UTF-8
encoding/users.jrxml=UTF-8
<?xml version="1.0" encoding="UTF-8" ?>
<jdbcDataAdapter class="net.sf.jasperreports.data.jdbc.JdbcDataAdapterImpl">
<name>New Data Adapter 1</name>
<driver>org.postgresql.Driver</driver>
<username>postgres</username>
<password>postgres</password>
<url>jdbc:postgresql://localhost:5432/demo</url>
<database></database>
<savePassword>true</savePassword>
<serverAddress></serverAddress>
</jdbcDataAdapter>
......@@ -8,7 +8,7 @@
<defaultValueExpression><![CDATA["PEMERINTAH KABUPATEN TANGERANG"]]></defaultValueExpression>
</parameter>
<parameter name="Logo" class="java.lang.String">
<defaultValueExpression><![CDATA["C:\\Users\\ASUS L455\\Downloads\\tangeranglogo.png"]]></defaultValueExpression>
<defaultValueExpression><![CDATA["C:\Users\ASUS\Downloads\bangkit.png"]]></defaultValueExpression>
</parameter>
<queryString language="csv">
<![CDATA[]]>
......
urut,kode,nama,ibu_kota,kategori,provinsi_id/res_propinsi.kode
01,ID-JB.01,Kabupaten Bandung,Soreang,kabupaten,ID-JB
02,ID-JB.02,Kabupaten Bandung Barat,Ngamprah,kabupaten,ID-JB
03,ID-JB.03,Kabupaten Bekasi,Cikarang Pusat,kabupaten,ID-JB
04,ID-JB.04,Kabupaten Bogor,Cibinong,kabupaten,ID-JB
05,ID-JB.05,Kabupaten Ciamis,Ciamis,kabupaten,ID-JB
06,ID-JB.06,Kabupaten Cianjur,Cianjur,kabupaten,ID-JB
07,ID-JB.07,Kabupaten Cirebon,Sumber,kabupaten,ID-JB
08,ID-JB.08,Kabupaten Garut,Tarogong Kidul,kabupaten,ID-JB
09,ID-JB.9,Kabupaten Indramayu,Indramayu,kabupaten,ID-JB
10,ID-JB.10,Kabupaten Karawang,Karawang Barat,kabupaten,ID-JB
11,ID-JB.11,Kabupaten Kuningan,Kuningan,kabupaten,ID-JB
12,ID-JB.12,Kabupaten Majalengka,Majalengka,kabupaten,ID-JB
13,ID-JB.13,Kabupaten Pangandaran,Parigi,kabupaten,ID-JB
14,ID-JB.14,Kabupaten Purwakarta,Purwakarta,kabupaten,ID-JB
15,ID-JB.15,Kabupaten Subang,Subang,kabupaten,ID-JB
16,ID-JB.16,Kabupaten Sukabumi,Palabuhanratu,kabupaten,ID-JB
17,ID-JB.17,Kabupaten Sumedang,Sumedang Utara,kabupaten,ID-JB
18,ID-JB.18,Kabupaten Tasikmalaya,Singaparna,kabupaten,ID-JB
19,ID-JB.19,Kota Bandung,Bandung,kota,ID-JB
20,ID-JB.20,Kota Banjar,Banjar,kota,ID-JB
21,ID-JB.21,Kota Bekasi,Bekasi,kota,ID-JB
22,ID-JB.22,Kota Bogor,Bogor,kota,ID-JB
23,ID-JB.23,Kota Cimahi,Cimahi,kota,ID-JB
24,ID-JB.24,Kota Cirebon,Cirebon,kota,ID-JB
25,ID-JB.25,Kota Depok,Depok,kota,ID-JB
26,ID-JB.26,Kota Sukabumi,Sukabumi,kota,ID-JB
27,ID-JB.27,Kota Tasikmalaya,Tasikmalaya,kota,ID-JB
kode,nama,kecamatan_id/res_kecamatan.kode,,,,,,,,,,,
32.76.01.01,Depok,32.76.01,,,,,,,,,,,
32.76.01.02,Depok Jaya,32.76.01,,,,,,,,,,,
32.76.01.03,Mampang,32.76.01,,,,,,,,,,,
32.76.01.04,Pancoran Mas,32.76.01,,,,,,,,,,,
32.76.01.05,Rangkapan Jaya,32.76.01,,,,,,,,,,,
32.76.01.06,Rangkapan Jaya Baru,32.76.01,,,,,,,,,,,
32.76.02.01,Cisalak Pasar,32.76.02,,,,,,,,,,,
32.76.02.02,Curug,32.76.02,,,,,,,,,,,
32.76.02.03,Harjamukti,32.76.02,,,,,,,,,,,
32.76.02.04,Mekarsari,32.76.02,,,,,,,,,,,
32.76.02.05,Pasir Gunung Selatan,32.76.02,,,,,,,,,,,
32.76.02.06,Tugu,32.76.02,,,,,,,,,,,
32.76.03.01,Bedahan,32.76.03,,,,,,,,,,,
32.76.03.02,Cinangka,32.76.03,,,,,,,,,,,
32.76.03.03,Kedaung,32.76.03,,,,,,,,,,,
32.76.03.04,Pasir Putih,32.76.03,,,,,,,,,,,
32.76.03.05,Pengasinan,32.76.03,,,,,,,,,,,
32.76.03.06,Sawangan Baru,32.76.03,,,,,,,,,,,
32.76.03.07,Sawangan Lama,32.76.03,,,,,,,,,,,
32.76.04.01,Grogol,32.76.04,,,,,,,,,,,
32.76.04.02,Krukut,32.76.04,,,,,,,,,,,
32.76.04.03,Limo,32.76.04,,,,,,,,,,,
32.76.04.04,Meruyung,32.76.04,,,,,,,,,,,
32.76.05.01,Abadijaya,32.76.05,,,,,,,,,,,
32.76.05.02,Baktijaya,32.76.05,,,,,,,,,,,
32.76.05.03,Cisalak,32.76.05,,,,,,,,,,,
32.76.05.04,Mekarjaya,32.76.05,,,,,,,,,,,
32.76.05.05,Sukmajaya,32.76.05,,,,,,,,,,,
32.76.05.06,Tirtajaya,32.76.05,,,,,,,,,,,
32.76.06.01,Beji,32.76.06,,,,,,,,,,,
32.76.06.02,Beji Timur,32.76.06,,,,,,,,,,,
32.76.06.03,Kemirimuka,32.76.06,,,,,,,,,,,
32.76.06.04,Kukusan,32.76.06,,,,,,,,,,,
32.76.06.05,Pondokcina,32.76.06,,,,,,,,,,,
32.76.06.06,Tanahbaru,32.76.06,,,,,,,,,,,
32.76.07.01,Cipayung,32.76.07,,,,,,,,,,,
32.76.07.02,Bojong Pondok Terong,32.76.07,,,,,,,,,,,
32.76.07.03,Cipayung,32.76.07,,,,,,,,,,,
32.76.07.04,Cipayung Jaya,32.76.07,,,,,,,,,,,
32.76.07.05,Pondok Jaya,32.76.07,,,,,,,,,,,
32.76.07.06,Ratujaya,32.76.07,,,,,,,,,,,
32.76.08.01,Cilodong,32.76.08,,,,,,,,,,,
32.76.08.02,Jatimulya,32.76.08,,,,,,,,,,,
32.76.08.03,Kalibaru,32.76.08,,,,,,,,,,,
32.76.08.04,Kalimulya,32.76.08,,,,,,,,,,,
32.76.08.05,Sukamaju,32.76.08,,,,,,,,,,,
32.76.09.01,Cinere,32.76.09,,,,,,,,,,,
32.76.09.02,Gandul,32.76.09,,,,,,,,,,,
32.76.09.03,Pangkalan Jati,32.76.09,,,,,,,,,,,
32.76.09.04,Pangkalan Jati Baru,32.76.09,,,,,,,,,,,
32.76.10.01,Cilangkap,32.76.10,,,,,,,,,,,
32.76.10.02,Cimpaeun,32.76.10,,,,,,,,,,,
32.76.10.03,Jatijajar,32.76.10,,,,,,,,,,,
32.76.10.04,Leuwinanggung,32.76.10,,,,,,,,,,,
32.76.10.05,Sukamaju Baru,32.76.10,,,,,,,,,,,
32.76.10.06,Sukatani,32.76.10,,,,,,,,,,,
32.76.10.07,Tapos,32.76.10,,,,,,,,,,,
32.76.11.01,Bojongsari Lama,32.76.11,,,,,,,,,,,
32.76.11.02,Bojongsaribaru,32.76.11,,,,,,,,,,,
32.76.11.03,Curug,32.76.11,,,,,,,,,,,
32.76.11.04,Durenmekar,32.76.11,,,,,,,,,,,
32.76.11.05,Durenseribu,32.76.11,,,,,,,,,,,
32.76.11.06,Pondokpetir,32.76.11,,,,,,,,,,,
32.76.11.07,Serua,32.76.11,,,,,,,,,,,
\ No newline at end of file
kecamatan_id/pad.tblkecamatan.id,kelurahankd,kelurahannm,tmt,enabled
2,81,Sidodadi,2025-09-06 00:00:00,1
3,78,Sidorejo,2025-09-06 00:00:00,1
4,79,Sidoharjo,2025-09-06 00:00:00,1
5,80,Sidomulyo,2025-09-06 00:00:00,1
\ No newline at end of file
......@@ -21,6 +21,7 @@ user-add,/user/add,Tambah User,1
user-edit,/user/{id}/edit,Edit User,1
user-view,/user/{id}/view,View User,1
user-delete,/user/{id}/delete,Hapus User,1
user-upload,/user/upload,Upload User,1
user-act,/user/{act}/act,Act User,1
user-ext,/user/ext,Daftar User Ext,1
user-ext-add,/user/ext/add,Tambah User Ext,
......@@ -28,6 +29,7 @@ user-ext-edit,/user/ext/{id}/edit,Edit User Ext,
user-ext-view,/user/ext/{id}/view,View User Ext,
user-ext-delete,/user/ext/{id}/delete,Hapus User Ext,
user-ext-act,/user/ext/{act}/act,Act User Ext,
user-ext-upload,/user/ext/upload,Upload User Ext,
register,/register,Register,
register-external,/register/external,Register External,
profile,/profile,Profile,
......@@ -137,6 +139,7 @@ provinsi-view,/provinsi/{id}/view,Provinsi View,1,0,
provinsi-delete,/provinsi/{id}/delete,Provinsi Hapus,1,0,
provinsi-act,/provinsi/{act}/act,Provinsi Act,1,0,
provinsi-rpt,/provinsi/{rpt}/rpt,Provinsi Report,1,0,
provinsi-upload,/provinsi/upload,UploadProvinsi,1,0,
dati2,/dati2,Kabupaten/Kota,1,0,
dati2-add,/dati2/add,Kabupaten/Kota Add,1,0,
dati2-edit,/dati2/{id}/edit,Kabupaten/Kota Edit,1,0,
......@@ -167,4 +170,5 @@ company-edit,/company/{id}/edit,Pemda Edit,1,0,
company-view,/company/{id}/view,Pemda View,1,0,
company-delete,/company/{id}/delete,Pemda Hapus,1,0,
company-act,/company/{act}/act,Pemda Act,1,0,
company-rpt,/company/{rpt}/rpt,Pemda Report,1,0,
\ No newline at end of file
company-rpt,/company/{rpt}/rpt,Pemda Report,1,0,
company-upload,/company/upload,Import Pemerintah,1,0,
\ No newline at end of file
email,status,user_name
admin@local.host,1,admin
guest@local.host,1,guest
......@@ -23,7 +23,10 @@ log = logging.getLogger(__name__)
from datatables import ColumnDT
# , DataTables, get_urls)
btn_upload = Button('upload', title=_('import'), css_class="btn-info")
from deform.form import Button
# Coba tambah tombol baru import
button_import = Button('upload', title=_('Import'), css_class='btn-info')
def no_action():
test = ColumnDT
......
import logging
from . import DataTables, button_import
from .partner_base import PartnerSchema
from .. import get_urls
from ..views import BaseView
import logging
import colander
from datatables import ColumnDT
from deform import (widget, )
......@@ -8,10 +12,8 @@ from sqlalchemy.orm import aliased
from opensipkd.models import DBSession, ResCompany, ResKecamatan, Partner
from opensipkd.models import ResProvinsi, ResDati2, ResDesa, User
from . import DataTables
from .partner_base import PartnerSchema
from .. import get_urls
from ..views import BaseView
from opensipkd.tools.buttons import btn_upload
log = logging.getLogger(__name__)
SESS_ADD_FAILED = 'Tambah pemda gagal'
......@@ -52,13 +54,16 @@ class AddSchema(PartnerSchema):
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(), missing=colander.drop,
widget=widget.HiddenWidget(readonly=True),
visible=False, )
partner_id = colander.SchemaNode(colander.Integer(),
widget=widget.HiddenWidget(),
missing=colander.drop,
oid="partner_id")
id = colander.SchemaNode(
colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True),
visible=False, )
partner_id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(),
missing=colander.drop,
oid="partner_id")
class ListSchema(colander.Schema):
......@@ -78,9 +83,7 @@ class ListSchema(colander.Schema):
validator=colander.Length(max=64, max_err='Maksimal 64 karakter'),
oid="parent_nm",
field="alias.nama"
)
status = colander.SchemaNode(
colander.Integer(),
widget=widget.CheckboxWidget(),
......@@ -95,6 +98,7 @@ class ViewCompany(BaseView):
self.edit_schema = EditSchema
self.list_schema = ListSchema
self.table = ResCompany
self.list_buttons = self.list_buttons + self.list_report + (button_import,)
def form_validator(self, form, value):
err = colander.Invalid(form, "")
......@@ -170,14 +174,17 @@ class ViewCompany(BaseView):
desa_list=desa_list
)
@view_config(route_name='company-view',
renderer='templates/form.pt', permission='company')
@view_config(
route_name='company-view',
renderer='templates/form.pt',
permission='company')
def view_view(self):
return super().view_view()
@view_config(route_name='company',
renderer='templates/table.pt',
permission='company')
@view_config(
route_name='company',
renderer='templates/table.pt',
permission='company')
def view_list(self):
return super().view_list()
......@@ -187,8 +194,10 @@ class ViewCompany(BaseView):
self.table.id == self.req.user.company_id)
return query
@view_config(route_name='company-act', renderer='json',
permission='view')
@view_config(
route_name='company-act',
renderer='json',
permission='view')
def view_act(self):
request = self.req
ses = request.session
......@@ -222,8 +231,10 @@ class ViewCompany(BaseView):
log.error(r)
return r
@view_config(route_name='company-add',
renderer='templates/form.pt', permission='company')
@view_config(
route_name='company-add',
renderer='templates/form.pt',
permission='company')
def view_add(self):
return super(ViewCompany, self).view_add()
......@@ -241,13 +252,17 @@ class ViewCompany(BaseView):
d["parent_nm"] = parent.nama
return d
@view_config(route_name='company-edit',
renderer='templates/form.pt', permission='company')
@view_config(
route_name='company-edit',
renderer='templates/form.pt',
permission='company')
def view_edit(self):
return super(ViewCompany, self).view_edit()
@view_config(route_name='company-delete',
renderer='templates/form_input.pt', permission='company')
@view_config(
route_name='company-delete',
renderer='templates/form_input.pt',
permission='company')
def view_delete(self):
return super(ViewCompany, self).view_delete()
......@@ -264,6 +279,7 @@ class ViewCompany(BaseView):
part = None
if "id" in values:
del values["id"]
if not part:
part = Partner()
part.from_dict(values)
......@@ -275,7 +291,6 @@ class ViewCompany(BaseView):
values["partner_id"] = part.id
if parent_id:
values["parent_id"] = parent_id
if "id" in self.req.matchdict:
values["id"] = self.req.matchdict["id"]
......@@ -284,4 +299,15 @@ class ViewCompany(BaseView):
part.company_id = row.id
DBSession.add(part)
DBSession.flush()
return row
# Fungsi upload
@view_config(
route_name='company-upload',
renderer='templates/form.pt',
permission='company'
)
def view_upload(self):
self.upload_keys = ["id"]
return super().view_upload(exts=(".csv", ".tsv"))
\ No newline at end of file
from datetime import datetime
import colander
from . import button_import
from .company import company_widget
from .. import get_params
from ..views import ColumnDT, DataTables, BaseView, get_urls
from datetime import datetime
from deform import (widget, )
from opensipkd.models import DBSession, Departemen, Partner, PartnerDepartemen, ResCompany
from opensipkd.tools import (get_settings)
from opensipkd.tools.buttons import btn_upload
from pyramid.view import (view_config, )
from sqlalchemy import func
from sqlalchemy.orm import aliased
from .company import company_widget
from .. import get_params
from ..views import ColumnDT, DataTables, BaseView, get_urls
SESS_ADD_FAILED = 'Tambah departemen gagal'
SESS_EDIT_FAILED = 'Edit departemen gagal'
......@@ -45,8 +44,9 @@ def departemen_widget_form():
class AddSchema(colander.Schema):
parent_id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(), oid="parent_id", missing=colander.drop,
)
widget=widget.HiddenWidget(),
oid="parent_id",
missing=colander.drop)
parent_nm = colander.SchemaNode(
colander.String(), missing=colander.drop,
......@@ -58,27 +58,37 @@ class AddSchema(colander.Schema):
),
oid="parent_nm", title="Induk")
parent_kd = colander.SchemaNode(colander.String(),
widget=widget.TextInputWidget(css_class="readonly"),
missing=colander.drop, oid="parent_kd", title="Kode Induk")
parent_kd = colander.SchemaNode(
colander.String(),
widget=widget.TextInputWidget(css_class="readonly"),
missing=colander.drop, oid="parent_kd", title="Kode Induk")
kode = colander.SchemaNode(colander.String(),
validator=colander.Length(max=32), oid="kode")
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
oid="kode")
nama = colander.SchemaNode(colander.String(), oid="nama")
singkat = colander.SchemaNode(colander.String(), missing=colander.drop,
oid="singkat")
kategori = colander.SchemaNode(colander.String(), missing=colander.drop,
oid="kategori")
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")
singkat = colander.SchemaNode(
colander.String(),
missing=colander.drop,
oid="singkat")
kategori = colander.SchemaNode(
colander.String(),
missing=colander.drop,
oid="kategori")
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.Integer(),
......@@ -105,14 +115,31 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(), title="Action", visible=False)
kode = colander.SchemaNode(colander.String(), title="Kode")
nama = colander.SchemaNode(colander.String(), title="Nama")
status = colander.SchemaNode(colander.Boolean(), title="Status", width='50pt',
widget=widget.CheckboxWidget())
level_id = colander.SchemaNode(colander.Integer(), title="Level", width='40pt')
parent = colander.SchemaNode(colander.String(), title="Induk")
company_nm = colander.SchemaNode(colander.String(), title="Company")
id = colander.SchemaNode(
colander.String(),
title="Action",
visible=False)
kode = colander.SchemaNode(
colander.String(),
title="Kode")
nama = colander.SchemaNode(
colander.String(),
title="Nama")
status = colander.SchemaNode(
colander.Boolean(),
title="Status",
width='50pt',
widget=widget.CheckboxWidget())
level_id = colander.SchemaNode(
colander.Integer(),
title="Level",
width='40pt')
parent = colander.SchemaNode(
colander.String(),
title="Induk")
company_nm = colander.SchemaNode(
colander.String(),
title="Company")
class ViewDepartemen(BaseView):
......@@ -125,7 +152,7 @@ class ViewDepartemen(BaseView):
# self.list_url = 'departemen'
self.list_route = 'departemen'
self.form_scripts = ""
self.list_buttons = self.list_buttons + (btn_upload,)
self.list_buttons = self.list_buttons + (button_import,)
def form_validator(self, form, value):
def err_kode():
......@@ -323,26 +350,34 @@ class ViewDepartemen(BaseView):
return {"company_list": ResCompany.get_list(),
"departemen_list":get_departemen_list()}
@view_config(route_name='departemen-add', renderer='templates/form.pt',
permission='departemen')
@view_config(
route_name='departemen-add',
renderer='templates/form.pt',
permission='departemen')
def view_add(self):
return super(ViewDepartemen, self).view_add()
@view_config(route_name='departemen-edit',
renderer='templates/form.pt', permission='departemen')
@view_config(
route_name='departemen-edit',
renderer='templates/form.pt',
permission='departemen')
def view_edit(self):
return super(ViewDepartemen, self).view_edit()
@view_config(route_name='departemen-delete',
renderer='templates/form.pt', permission='departemen')
@view_config(
route_name='departemen-delete',
renderer='templates/form.pt',
permission='departemen')
def view_delete(self):
return super(ViewDepartemen, self).view_delete()
@view_config(route_name='departemen-upload',
renderer='templates/form.pt',
permission='departemen')
@view_config(
route_name='departemen-upload',
renderer='templates/form.pt',
permission='departemen')
def view_upload(self):
return super().view_upload(exts=('.csv', '.tsv'), delimiter="\t")
self.upload_keys = ["kode"]
return super().view_upload(exts=('.csv', '.tsv'))
# request = self.req
# form = self.get_form(UploadSchema)
......
......@@ -20,7 +20,7 @@ class PartnerEmailValidator(colander.Email, Validator):
Validator.__init__(self, row)
colander.Email.__init__(self)
def __call__(self, node, value):
def __call__(self, node, value):
def email_found():
data = dict(email=email, rid=found.id, rname=found.nama)
ts = _(
......
from . import widget_os, button_import
from ..views import BaseView
import colander
from deform import (widget, )
from deform import (widget,)
from pyramid.i18n import TranslationStringFactory
from pyramid.view import (view_config, )
from . import widget_os
from opensipkd.models import DBSession, ResProvinsi, kategori_provinsi
from ..views import BaseView
from opensipkd.tools.buttons import btn_upload
_ = TranslationStringFactory("opensipkd")
SESS_ADD_FAILED = 'Tambah provinsi gagal'
SESS_EDIT_FAILED = 'Edit provinsi gagal'
@colander.deferred
def provinsi_widget(node, kw):
values = kw.get('provinsi_list', [])
......@@ -80,6 +81,7 @@ class ViewProvinsi(BaseView):
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.table = ResProvinsi
self.list_buttons = self.list_buttons + self.list_report + (button_import,)
########
# List #
......@@ -118,33 +120,55 @@ class ViewProvinsi(BaseView):
elif found:
err_nama()
@view_config(route_name='provinsi-view',
renderer='templates/form.pt', permission='provinsi')
@view_config(
route_name='provinsi-view',
renderer='templates/form.pt',
permission='provinsi')
def view_view(self): # row = query_id(request).first()
return super(ViewProvinsi, self).view_view()
@view_config(route_name='provinsi',
renderer='templates/table.pt',
permission='provinsi')
@view_config(
route_name='provinsi',
renderer='templates/table.pt',
permission='provinsi')
def view_list(self):
return super(ViewProvinsi, self).view_list()
@view_config(route_name='provinsi-act', renderer='json',
permission='view')
@view_config(
route_name='provinsi-act',
renderer='json',
permission='view')
def view_act(self):
return super(ViewProvinsi, self).view_act()
@view_config(route_name='provinsi-add',
renderer='templates/form.pt', permission='provinsi')
@view_config(
route_name='provinsi-add',
renderer='templates/form.pt',
permission='provinsi')
def view_add(self):
return super(ViewProvinsi, self).view_add()
@view_config(route_name='provinsi-edit',
renderer='templates/form.pt', permission='provinsi')
@view_config(
route_name='provinsi-edit',
renderer='templates/form.pt',
permission='provinsi')
def view_edt(self):
return super(ViewProvinsi, self).view_edit()
@view_config(route_name='provinsi-delete',
renderer='templates/form.pt', permission='provinsi')
# Fungsi delete
@view_config(
route_name='provinsi-delete',
renderer='templates/form.pt',
permission='provinsi')
def view_delete(self):
return super(ViewProvinsi, self).view_delete()
# Tambah fungsi upload
@view_config(
route_name='provinsi-upload',
renderer='templates/form.pt',
permission='provinsi'
)
def view_upload(self):
self.upload_keys = ["id"]
return super().view_upload(exts=(".csv", ".tsv"))
\ No newline at end of file
import logging
import colander
from deform import (widget, )
from pyramid.view import view_config
......@@ -203,7 +202,8 @@ class Views(BaseView):
"""
@view_config(
route_name='routes', renderer='templates/table.pt',
route_name='routes',
renderer='templates/table.pt',
permission='edit-title')
def view_list(self):
kwargs = {"allow_view": False,
......
from . import BaseView, button_import
from .company import company_widget
from .user_login import (regenerate_security_code, send_email_security_code, generate_api_key,)
import os
import re
import colander
from deform import (widget, )
from opensipkd.tools import create_now, SaveFile
from opensipkd.tools.report import open_rml_row, csv_response, open_rml_pdf, \
pdf_response, file_response
from opensipkd.tools.report import open_rml_row, csv_response, open_rml_pdf, pdf_response, file_response
from opensipkd.models import (DBSession, User, Group, UserGroup, ResCompany,)
from pyramid.i18n import TranslationStringFactory
from pyramid.view import view_config
from sqlalchemy import (func, )
from sqlalchemy import (func,)
from ziggurat_foundations.models.services.user import UserService
from . import BaseView
from .company import company_widget
from .user_login import (
regenerate_security_code, send_email_security_code, generate_api_key, )
from opensipkd.models import (DBSession, User, Group, UserGroup, ResCompany, )
_ = TranslationStringFactory('user')
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(),
title="Action",
searchable=False)
id = colander.SchemaNode(
colander.String(),
title="Action",
searchable=False)
email = colander.SchemaNode(colander.String())
user_name = colander.SchemaNode(colander.String(),
title=_("user-name",
default="User Name"))
status = colander.SchemaNode(colander.Integer(),
widget=widget.CheckboxWidget(),
width=50,
searchable=False)
last_login = colander.SchemaNode(colander.String(),
width=100,
field="last_login_date",
searchable=False)
registered = colander.SchemaNode(colander.String(),
width=100,
field="registered_date",
searchable=False)
user_name = colander.SchemaNode(
colander.String(),
title=_("user-name",
default="User Name"))
status = colander.SchemaNode(
colander.Integer(),
widget=widget.CheckboxWidget(),
width=50,
searchable=False)
last_login = colander.SchemaNode(
colander.String(),
width=100,
field="last_login_date",
searchable=False)
registered = colander.SchemaNode(
colander.String(),
width=100,
field="registered_date",
searchable=False)
class Views(BaseView):
......@@ -50,10 +52,10 @@ class Views(BaseView):
self.table = User
self.edit_schema = EditSchema
self.add_schema = AddSchema
self.list_buttons = self.list_buttons + self.list_report
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', 'users.jrxml')
def get_bindings(self, row=None):
......@@ -68,6 +70,7 @@ class Views(BaseView):
api_key_list = (
('', _('Tidak ada')),
('1', _('Buatkan')))
group_list = get_group_list()
return dict(status_list=status_list,
group_list=group_list,
......@@ -76,13 +79,16 @@ class Views(BaseView):
company_list=ResCompany.get_list())
@view_config(
route_name='user', renderer='templates/table.pt',
route_name='user',
renderer='templates/table.pt',
permission='user-view')
def view_list(self):
return super(Views, self).view_list()
@view_config(
route_name='user-act', renderer='json', permission='user-view')
route_name='user-act',
renderer='json',
permission='user-view')
def view_act(self):
# url_dict = self.req.matchdict
# if url_dict['act'] == 'csv':
......@@ -180,7 +186,8 @@ class Views(BaseView):
return row
@view_config(
route_name='user-add', renderer='templates/form.pt',
route_name='user-add',
renderer='templates/form.pt',
permission='user-view')
def view_add(self):
return super(Views, self).view_add()
......@@ -192,19 +199,22 @@ class Views(BaseView):
return d
@view_config(
route_name='user-edit', renderer='templates/form.pt',
route_name='user-edit',
renderer='templates/form.pt',
permission='user-edit')
def view_edit(self):
return super(Views, self).view_edit()
@view_config(
route_name='user-view', renderer='templates/form.pt',
route_name='user-view',
renderer='templates/form.pt',
permission='user-view')
def view_view(self):
return super(Views, self).view_view()
@view_config(
route_name='user-delete', renderer='templates/form.pt',
route_name='user-delete',
renderer='templates/form.pt',
permission='user-edit')
def view_delete(self):
return super(Views, self).view_delete()
......@@ -226,6 +236,16 @@ class Views(BaseView):
if self.req.user.company_id:
q = q.filter_by(company_id=self.req.user.company_id)
return q
# Tambah fungsi upload/import
@view_config(
route_name='user-upload',
renderer='templates/form.pt',
permission='user'
)
def view_upload(self):
self.upload_keys = ["email"]
return super().view_upload(exts=(".csv", ".tsv"))
#######
......
......@@ -5,7 +5,7 @@ from opensipkd.tools.buttons import btn_close, btn_delete, btn_view
from pyramid.i18n import TranslationStringFactory
from pyramid.view import view_config
from . import BaseView
from . import BaseView, button_import # Tombol import
from opensipkd.models import (DBSession, User, ExternalIdentity)
_ = TranslationStringFactory('user')
......@@ -38,30 +38,35 @@ class UserExt(BaseView):
self.edit_schema = EditSchema
self.list_schema = ListSchema
self.list_route = "user-ext"
self.list_buttons = (btn_close,)
self.list_buttons = (btn_close,) + self.list_report + (button_import,)
self.table = ExternalIdentity
@view_config(
route_name='user-ext', renderer='templates/table.pt',
route_name='user-ext',
renderer='templates/table.pt',
permission='user-view')
def view_list(self):
form = super(UserExt, self).view_list(allow_edit=False, allow_delete=False)
return form
@view_config(
route_name='user-ext-view', renderer='templates/form.pt',
route_name='user-ext-view',
renderer='templates/form.pt',
permission='user-view')
def view_view(self):
return super(UserExt, self).view_view()
# Fungsi delete
@view_config(
route_name='user-ext-delete', renderer='templates/form.pt',
route_name='user-ext-delete',
renderer='templates/form.pt',
permission='user-edit')
def view_delete(self):
return super(UserExt, self).view_delete()
@view_config(
route_name='user-ext-act', renderer='json', permission='user-view')
route_name='user-ext-act',
renderer='json', permission='user-view')
def view_act(self):
return super(UserExt, self).view_act()
......@@ -70,3 +75,13 @@ class UserExt(BaseView):
def query_id(self):
return DBSession.query(ExternalIdentity).filter_by(external_id=self.req.matchdict["id"])
# Fungsi upload
@view_config(
route_name='user-ext-upload',
renderer='templates/form.pt',
permission='user-upload'
)
def view_upload(self):
self.upload_keys=["local_user_id"]
return super().view_upload(exts=(".csv", ".tsv"))
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!