Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
aa.gusti
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit c0957fa0
authored
Aug 22, 2024
by
aagusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
perbaikan appendcsv
1 parent
c2c4fac1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
73 additions
and
70 deletions
opensipkd/base/scripts/initializedb.py
opensipkd/base/views/base_views.py
opensipkd/base/views/departemen.py
opensipkd/base/scripts/initializedb.py
View file @
c0957fa
...
...
@@ -139,9 +139,9 @@ def restore_csv(table, filename, get_file_func=get_file, db_session=DBSession):
# masih memungkinkan update yg sudah ada dgn syarat is value dari keys masih sama
# sperti salah route url asalkan kode msh sama
def
append_csv
(
table
,
filename
,
keys
,
get_file_func
=
get_file
,
db_session
=
DBSession
,
update_exist
=
False
):
db_session
=
DBSession
,
update_exist
=
False
,
delimiter
=
","
):
with
get_file_func
(
filename
)
as
f
:
reader
=
csv
.
DictReader
(
f
)
reader
=
csv
.
DictReader
(
f
,
delimiter
=
delimiter
)
filter_
=
dict
()
foreigns
=
dict
()
is_first
=
True
...
...
@@ -186,10 +186,13 @@ def append_csv(table, filename, keys, get_file_func=get_file,
foreign_table
,
foreign_field
=
foreigns
[
fname
]
value
=
cf
[
fname
]
sql
=
select
([
foreign_table
])
.
where
(
foreign_field
==
value
)
# connection = DBSession.connection()
q
=
Base
.
metadata
.
bind
.
execute
(
sql
)
# q = connection.execute(sql)
row
=
q
.
fetchone
()
value
=
row
and
row
.
id
or
None
q
.
close
()
# connection.close()
else
:
value
=
cf
[
fname
]
fname_orig
=
fmap
[
fname
]
...
...
opensipkd/base/views/base_views.py
View file @
c0957fa
...
...
@@ -323,7 +323,7 @@ class BaseView(object):
buttons
=
(
btn_post
,
btn_close
)
return
self
.
view_view
(
buttons
=
buttons
)
def
view_upload
(
self
,
exts
=
(
'.png'
,
'.ico'
)):
def
view_upload
(
self
,
exts
=
(
'.png'
,
'.ico'
)
,
delimiter
=
","
):
bindings
=
self
.
get_bindings
()
form
=
self
.
get_form
(
self
.
upload_schema
,
bindings
=
bindings
)
resources
=
form
.
get_widget_resources
()
...
...
@@ -353,7 +353,7 @@ class BaseView(object):
break
output_file
.
write
(
data
)
output_file
.
close
()
self
.
save_upload
(
fullpath
)
self
.
save_upload
(
fullpath
,
delimiter
=
delimiter
)
elif
"cancel"
in
self
.
req
.
POST
or
'batal'
in
self
.
req
.
POST
or
"close"
in
self
.
req
.
POST
:
self
.
cancel_act
()
...
...
@@ -368,9 +368,9 @@ class BaseView(object):
def
get_file
(
self
,
filename
):
return
open
(
filename
)
def
save_upload
(
self
,
file_name
):
def
save_upload
(
self
,
file_name
,
delimiter
=
","
):
return
append_csv
(
self
.
table
,
file_name
,
self
.
upload_keys
,
get_file_func
=
self
.
get_file
,
update_exist
=
True
)
get_file_func
=
self
.
get_file
,
update_exist
=
True
,
delimiter
=
delimiter
)
def
before_add
(
self
):
return
{}
...
...
opensipkd/base/views/departemen.py
View file @
c0957fa
import
csv
import
os
import
shutil
from
datetime
import
datetime
import
colander
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
opensipkd.models
import
DBSession
,
Departemen
,
Partner
,
PartnerDepartemen
,
ResCompany
from
opensipkd.tools
import
(
get_ext
,
get_random_string
,
get_settings
)
from
.company
import
company_widget
from
.upload
import
AddSchema
as
UploadSchema
from
..
import
get_params
from
..views
import
ColumnDT
,
DataTables
,
BaseView
,
get_urls
...
...
@@ -123,6 +120,7 @@ class ViewDepartemen(BaseView):
# self.list_url = 'departemen'
self
.
list_route
=
'departemen'
self
.
form_scripts
=
""
self
.
list_buttons
=
self
.
list_buttons
+
(
btn_upload
,)
def
form_validator
(
self
,
form
,
value
):
def
err_kode
():
...
...
@@ -338,48 +336,50 @@ class ViewDepartemen(BaseView):
renderer
=
'templates/departemen/upload.pt'
,
permission
=
'departemen'
)
def
view_upload
(
self
):
request
=
self
.
req
form
=
self
.
get_form
(
UploadSchema
)
if
request
.
POST
:
if
'save'
in
request
.
POST
:
input_file
=
request
.
POST
[
'upload'
]
.
file
filename
=
request
.
POST
[
'upload'
]
.
filename
ext
=
get_ext
(
filename
)
if
ext
.
lower
()
!=
'.csv'
:
request
.
session
.
flash
(
'File harus format csv'
,
'error'
)
return
dict
(
form
=
form
.
render
())
if
not
input_file
:
return
dict
(
form
=
form
.
render
())
input_file
.
seek
(
0
)
temp_file_path
=
'/tmp/'
+
get_random_string
(
10
)
+
'.csv'
with
open
(
temp_file_path
,
'wb'
)
as
output_file
:
shutil
.
copyfileobj
(
input_file
,
output_file
)
with
open
(
temp_file_path
)
as
f
:
c
=
csv
.
DictReader
(
f
)
for
csv_row
in
c
:
kode
=
csv_row
[
'kode'
]
if
kode
:
xcode
=
kode
.
split
(
"."
)
for
r
in
range
(
len
(
xcode
)):
xc
=
xcode
[
r
]
and
int
(
xcode
[
r
])
if
not
xc
and
type
(
xc
)
==
int
:
code
=
""
for
t
in
range
(
r
):
code
+=
xcode
[
t
]
+
'.'
if
code
:
code
=
code
[:
-
1
]
self
.
save_upload
(
code
,
csv_row
)
self
.
save_upload
(
kode
,
csv_row
)
DBSession
.
flush
()
os
.
remove
(
temp_file_path
)
return
self
.
route_list
()
return
dict
(
form
=
form
.
render
())
return
super
()
.
view_upload
(
exts
=
(
'.csv'
,),
delimiter
=
"
\t
"
)
# request = self.req
# form = self.get_form(UploadSchema)
# if request.POST:
# if 'save' in request.POST:
# input_file = request.POST['upload'].file
# filename = request.POST['upload'].filename
# ext = get_ext(filename)
# if ext.lower() != '.csv':
# request.session.flash('File harus format csv', 'error')
# return dict(form=form.render())
# if not input_file:
# return dict(form=form.render())
# input_file.seek(0)
# temp_file_path = '/tmp/' + get_random_string(10) + '.csv'
#
# with open(temp_file_path, 'wb') as output_file:
# shutil.copyfileobj(input_file, output_file)
#
# with open(temp_file_path) as f:
# c = csv.DictReader(f)
# for csv_row in c:
# kode = csv_row['kode']
# if kode:
# xcode = kode.split(".")
# for r in range(len(xcode)):
# xc = xcode[r] and int(xcode[r])
# if not xc and type(xc) == int:
# code = ""
# for t in range(r):
# code += xcode[t] + '.'
#
# if code:
# code = code[:-1]
# self.save_upload(code, csv_row)
#
# self.save_upload(kode, csv_row)
#
# DBSession.flush()
# os.remove(temp_file_path)
#
# return self.route_list()
# return dict(form=form.render())
def
get_values
(
self
,
row
,
values
=
None
):
if
not
values
:
...
...
@@ -390,18 +390,18 @@ class ViewDepartemen(BaseView):
values
[
"parent_kd"
]
=
parent
.
kode
return
values
def
save_upload
(
self
,
kode
,
csv_row
):
row
=
Departemen
.
query_kode
(
kode
)
.
first
()
if
not
row
:
row
=
Departemen
()
row
.
created
=
datetime
.
now
()
row
.
create_uid
=
self
.
req
.
user
.
id
row
.
level_id
=
kode
.
count
(
'.'
)
+
1
row
.
status
=
1
else
:
row
.
updated
=
datetime
.
now
()
row
.
update_uid
=
self
.
req
.
user
.
id
row
.
kode
=
kode
row
.
nama
=
csv_row
[
'nama'
]
DBSession
.
add
(
row
)
return
row
#
def save_upload(self, kode, csv_row):
#
row = Departemen.query_kode(kode).first()
#
if not row:
#
row = Departemen()
#
row.created = datetime.now()
#
row.create_uid = self.req.user.id
#
row.level_id = kode.count('.') + 1
#
row.status = 1
#
else:
#
row.updated = datetime.now()
#
row.update_uid = self.req.user.id
#
row.kode = kode
#
row.nama = csv_row['nama']
#
DBSession.add(row)
#
return row
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment