Commit c0957fa0 by aagusti

perbaikan appendcsv

1 parent c2c4fac1
...@@ -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]
......
...@@ -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 {}
......
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
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!