Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
irul
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Wiki
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):
...
@@ -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
# masih memungkinkan update yg sudah ada dgn syarat is value dari keys masih sama
# sperti salah route url asalkan kode msh sama
# sperti salah route url asalkan kode msh sama
def
append_csv
(
table
,
filename
,
keys
,
get_file_func
=
get_file
,
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
:
with
get_file_func
(
filename
)
as
f
:
reader
=
csv
.
DictReader
(
f
)
reader
=
csv
.
DictReader
(
f
,
delimiter
=
delimiter
)
filter_
=
dict
()
filter_
=
dict
()
foreigns
=
dict
()
foreigns
=
dict
()
is_first
=
True
is_first
=
True
...
@@ -186,10 +186,13 @@ def append_csv(table, filename, keys, get_file_func=get_file,
...
@@ -186,10 +186,13 @@ def append_csv(table, filename, keys, get_file_func=get_file,
foreign_table
,
foreign_field
=
foreigns
[
fname
]
foreign_table
,
foreign_field
=
foreigns
[
fname
]
value
=
cf
[
fname
]
value
=
cf
[
fname
]
sql
=
select
([
foreign_table
])
.
where
(
foreign_field
==
value
)
sql
=
select
([
foreign_table
])
.
where
(
foreign_field
==
value
)
# connection = DBSession.connection()
q
=
Base
.
metadata
.
bind
.
execute
(
sql
)
q
=
Base
.
metadata
.
bind
.
execute
(
sql
)
# q = connection.execute(sql)
row
=
q
.
fetchone
()
row
=
q
.
fetchone
()
value
=
row
and
row
.
id
or
None
value
=
row
and
row
.
id
or
None
q
.
close
()
# connection.close()
else
:
else
:
value
=
cf
[
fname
]
value
=
cf
[
fname
]
fname_orig
=
fmap
[
fname
]
fname_orig
=
fmap
[
fname
]
...
...
opensipkd/base/views/base_views.py
View file @
c0957fa
...
@@ -323,7 +323,7 @@ class BaseView(object):
...
@@ -323,7 +323,7 @@ class BaseView(object):
buttons
=
(
btn_post
,
btn_close
)
buttons
=
(
btn_post
,
btn_close
)
return
self
.
view_view
(
buttons
=
buttons
)
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
()
bindings
=
self
.
get_bindings
()
form
=
self
.
get_form
(
self
.
upload_schema
,
bindings
=
bindings
)
form
=
self
.
get_form
(
self
.
upload_schema
,
bindings
=
bindings
)
resources
=
form
.
get_widget_resources
()
resources
=
form
.
get_widget_resources
()
...
@@ -353,7 +353,7 @@ class BaseView(object):
...
@@ -353,7 +353,7 @@ class BaseView(object):
break
break
output_file
.
write
(
data
)
output_file
.
write
(
data
)
output_file
.
close
()
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
:
elif
"cancel"
in
self
.
req
.
POST
or
'batal'
in
self
.
req
.
POST
or
"close"
in
self
.
req
.
POST
:
self
.
cancel_act
()
self
.
cancel_act
()
...
@@ -368,9 +368,9 @@ class BaseView(object):
...
@@ -368,9 +368,9 @@ class BaseView(object):
def
get_file
(
self
,
filename
):
def
get_file
(
self
,
filename
):
return
open
(
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
,
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
):
def
before_add
(
self
):
return
{}
return
{}
...
...
opensipkd/base/views/departemen.py
View file @
c0957fa
import
csv
import
os
import
shutil
from
datetime
import
datetime
from
datetime
import
datetime
import
colander
import
colander
from
deform
import
(
widget
,
)
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
pyramid.view
import
(
view_config
,
)
from
sqlalchemy
import
func
from
sqlalchemy
import
func
from
sqlalchemy.orm
import
aliased
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
.company
import
company_widget
from
.upload
import
AddSchema
as
UploadSchema
from
..
import
get_params
from
..
import
get_params
from
..views
import
ColumnDT
,
DataTables
,
BaseView
,
get_urls
from
..views
import
ColumnDT
,
DataTables
,
BaseView
,
get_urls
...
@@ -123,6 +120,7 @@ class ViewDepartemen(BaseView):
...
@@ -123,6 +120,7 @@ class ViewDepartemen(BaseView):
# self.list_url = 'departemen'
# self.list_url = 'departemen'
self
.
list_route
=
'departemen'
self
.
list_route
=
'departemen'
self
.
form_scripts
=
""
self
.
form_scripts
=
""
self
.
list_buttons
=
self
.
list_buttons
+
(
btn_upload
,)
def
form_validator
(
self
,
form
,
value
):
def
form_validator
(
self
,
form
,
value
):
def
err_kode
():
def
err_kode
():
...
@@ -338,48 +336,50 @@ class ViewDepartemen(BaseView):
...
@@ -338,48 +336,50 @@ class ViewDepartemen(BaseView):
renderer
=
'templates/departemen/upload.pt'
,
renderer
=
'templates/departemen/upload.pt'
,
permission
=
'departemen'
)
permission
=
'departemen'
)
def
view_upload
(
self
):
def
view_upload
(
self
):
request
=
self
.
req
return
super
()
.
view_upload
(
exts
=
(
'.csv'
,),
delimiter
=
"
\t
"
)
form
=
self
.
get_form
(
UploadSchema
)
if
request
.
POST
:
# request = self.req
if
'save'
in
request
.
POST
:
# form = self.get_form(UploadSchema)
input_file
=
request
.
POST
[
'upload'
]
.
file
# if request.POST:
filename
=
request
.
POST
[
'upload'
]
.
filename
# if 'save' in request.POST:
ext
=
get_ext
(
filename
)
# input_file = request.POST['upload'].file
if
ext
.
lower
()
!=
'.csv'
:
# filename = request.POST['upload'].filename
request
.
session
.
flash
(
'File harus format csv'
,
'error'
)
# ext = get_ext(filename)
return
dict
(
form
=
form
.
render
())
# if ext.lower() != '.csv':
if
not
input_file
:
# request.session.flash('File harus format csv', 'error')
return
dict
(
form
=
form
.
render
())
# return dict(form=form.render())
input_file
.
seek
(
0
)
# if not input_file:
temp_file_path
=
'/tmp/'
+
get_random_string
(
10
)
+
'.csv'
# return dict(form=form.render())
# input_file.seek(0)
with
open
(
temp_file_path
,
'wb'
)
as
output_file
:
# temp_file_path = '/tmp/' + get_random_string(10) + '.csv'
shutil
.
copyfileobj
(
input_file
,
output_file
)
#
# with open(temp_file_path, 'wb') as output_file:
with
open
(
temp_file_path
)
as
f
:
# shutil.copyfileobj(input_file, output_file)
c
=
csv
.
DictReader
(
f
)
#
for
csv_row
in
c
:
# with open(temp_file_path) as f:
kode
=
csv_row
[
'kode'
]
# c = csv.DictReader(f)
if
kode
:
# for csv_row in c:
xcode
=
kode
.
split
(
"."
)
# kode = csv_row['kode']
for
r
in
range
(
len
(
xcode
)):
# if kode:
xc
=
xcode
[
r
]
and
int
(
xcode
[
r
])
# xcode = kode.split(".")
if
not
xc
and
type
(
xc
)
==
int
:
# for r in range(len(xcode)):
code
=
""
# xc = xcode[r] and int(xcode[r])
for
t
in
range
(
r
):
# if not xc and type(xc) == int:
code
+=
xcode
[
t
]
+
'.'
# code = ""
# for t in range(r):
if
code
:
# code += xcode[t] + '.'
code
=
code
[:
-
1
]
#
self
.
save_upload
(
code
,
csv_row
)
# if code:
# code = code[:-1]
self
.
save_upload
(
kode
,
csv_row
)
# self.save_upload(code, csv_row)
#
DBSession
.
flush
()
# self.save_upload(kode, csv_row)
os
.
remove
(
temp_file_path
)
#
# DBSession.flush()
return
self
.
route_list
()
# os.remove(temp_file_path)
return
dict
(
form
=
form
.
render
())
#
# return self.route_list()
# return dict(form=form.render())
def
get_values
(
self
,
row
,
values
=
None
):
def
get_values
(
self
,
row
,
values
=
None
):
if
not
values
:
if
not
values
:
...
@@ -390,18 +390,18 @@ class ViewDepartemen(BaseView):
...
@@ -390,18 +390,18 @@ class ViewDepartemen(BaseView):
values
[
"parent_kd"
]
=
parent
.
kode
values
[
"parent_kd"
]
=
parent
.
kode
return
values
return
values
def
save_upload
(
self
,
kode
,
csv_row
):
#
def save_upload(self, kode, csv_row):
row
=
Departemen
.
query_kode
(
kode
)
.
first
()
#
row = Departemen.query_kode(kode).first()
if
not
row
:
#
if not row:
row
=
Departemen
()
#
row = Departemen()
row
.
created
=
datetime
.
now
()
#
row.created = datetime.now()
row
.
create_uid
=
self
.
req
.
user
.
id
#
row.create_uid = self.req.user.id
row
.
level_id
=
kode
.
count
(
'.'
)
+
1
#
row.level_id = kode.count('.') + 1
row
.
status
=
1
#
row.status = 1
else
:
#
else:
row
.
updated
=
datetime
.
now
()
#
row.updated = datetime.now()
row
.
update_uid
=
self
.
req
.
user
.
id
#
row.update_uid = self.req.user.id
row
.
kode
=
kode
#
row.kode = kode
row
.
nama
=
csv_row
[
'nama'
]
#
row.nama = csv_row['nama']
DBSession
.
add
(
row
)
#
DBSession.add(row)
return
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