Commit 1bb07832 by aagusti

penambahan fungsi form

1 parent 99ad3621
from sqlalchemy.ext.declarative import declarative_base
from zope.sqlalchemy import register
from sqlalchemy import Column, ForeignKey, Integer, String, engine_from_config, func
from sqlalchemy import Column, DateTime, Float, ForeignKey, Integer, SmallInteger, String, engine_from_config, func
from opensipkd.base.models import Base, NamaModel, DefaultModel, TABLE_ARGS
from opensipkd.base import get_settings
from opensipkd.models import User
......@@ -23,6 +23,20 @@ class Coba(Base, NamaModel):
file_1 = Column(String(255))
file_2 = Column(String(255))
file_3 = Column(String(255))
money = Column(Float)
date_os = Column(DateTime(timezone=False))
date_ori = Column(DateTime(timezone=False))
date_part =Column(DateTime(timezone=False))
time_ori = Column(DateTime(timezone=False))
date_time = Column(DateTime(timezone=False))
check_box = Column(SmallInteger)
select_combo = Column(SmallInteger)
select_combo2 =Column(String(255))
file_upload = Column(String(255))
img_upload = Column(String(255))
option_list = Column(Integer)
option_box = Column(String(255))
class CobaItems(Base, DefaultModel):
__tablename__="coba_items"
......
......@@ -5,6 +5,7 @@
route_name request.matched_route.name;
coba_form ['coba-form','coba-form-add','coba-form-edit','coba-form-delete','coba-form-view'];
coba_upload ['coba-upload','coba-upload-add','coba-upload-edit','coba-upload-delete','coba-upload-view'];
coba_view ['coba-view','coba-view-add','coba-view-edit','coba-view-delete','coba-view-view'];
"
>
<js metal:fill-slot="js_files">
......@@ -36,6 +37,9 @@
<li tal:attributes="class route_name in coba_upload and 'active'">
<a href="${home}/coba/upload">Upload</a>
</li>
<li tal:attributes="class route_name in coba_view and 'active'">
<a href="${home}/coba/view">Upload & View</a>
</li>
<!-- </ul> -->
<!-- </li> -->
......
<tal:block tal:define="oid oid|field.oid;
css_class css_class|field.widget.css_class;
style style|field.widget.style;">
${field.start_mapping()}
<a tal:define="preview_url cstruct.get('preview_url');
filename cstruct.get('filename')"
tal:condition="preview_url"
target="_blank"
href="${structure: preview_url}">Show</a>
<input type="file" name="upload" id="${oid}" tal:attributes="style style;
accept accept|field.widget.accept;
data-filename cstruct.get('filename');
attributes|field.widget.attributes|{};" />
<input tal:define="uid cstruct.get('uid')" tal:condition="uid" type="hidden" name="uid" value="${uid}" />
${field.end_mapping()}
<script type="text/javascript">
deform.addCallback('${oid}', function (oid) {
$('#' + oid).upload();
});
</script>
</tal:block>
\ No newline at end of file
<tal:block tal:define="oid oid|field.oid;
css_class css_class|field.widget.css_class;
style style|field.widget.style;">
${field.start_mapping()}
<img tal:condition="preview_url"
tal:define="preview_url cstruct.get('preview_url');
filename cstruct.get('filename')"
src="${structure: preview_url}"></img>
<input type="file" name="upload" id="${oid}" tal:attributes="style style;
accept accept|field.widget.accept;
data-filename cstruct.get('filename');
attributes|field.widget.attributes|{};" />
<input tal:define="uid cstruct.get('uid')" tal:condition="uid" type="hidden" name="uid" value="${uid}" />
${field.end_mapping()}
<script type="text/javascript">
deform.addCallback('${oid}', function (oid) {
$('#' + oid).upload();
});
</script>
</tal:block>
\ No newline at end of file
<tal:block tal:define="oid oid|field.oid;
css_class css_class|field.widget.css_class;
style style|field.widget.style;">
${field.start_mapping()}
<a tal:define="preview_url cstruct.get('preview_url');
filename cstruct.get('filename')" tal:condition="preview_url"
href="${structure: preview_url}">Show</a>
${field.end_mapping()}
</tal:block>
\ No newline at end of file
<tal:block tal:define="oid oid|field.oid;
css_class css_class|field.widget.css_class;
style style|field.widget.style;">
${field.start_mapping()}
<img tal:condition="preview_url" tal:define="preview_url cstruct.get('preview_url');
filename cstruct.get('filename')" src="${structure: preview_url}"></img>
${field.end_mapping()}
</tal:block>
\ No newline at end of file
import colander
from deform import widget
from deform import widget, FileData
from pyramid.view import view_config
from opensipkd.coba.models import Coba
from . import BaseView
from opensipkd.base.views import widget_os
from opensipkd.tools import mem_tmp_store, Upload, ymd, hms, ymdhms
from opensipkd.coba import COBA_UPLOAD
from datetime import datetime
items = (("1", "Satu"),('2','Dua'),('3','Tiga'),('4','Empat'),('5','Lima'),
("6", "Enam"),('7','Tujuh'),('8','Delapan'),('9','Sembilan'),
('10','Sepuluh'),("11", "Sebelas"),('12','Dua Belas'),
('13','Tiga Belas'),('14','Empat Belas'),('15','Lima Belas'))
from opensipkd.base import get_urls
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
......@@ -13,6 +20,75 @@ class AddSchema(colander.Schema):
nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(min=3, max=64),
title="Text"
)
money = colander.SchemaNode(
colander.String(),
widget=widget.MoneyInputWidget()
)
date_os = colander.SchemaNode(
colander.String(),
widget = widget_os.BootStrapDateInputWidget(type_name="text")
)
date_ori = colander.SchemaNode(
colander.String(),
widget = widget.DateInputWidget(type_name="text")
)
date_part = colander.SchemaNode(
colander.String(),
widget = widget.DatePartsWidget()
)
time_ori = colander.SchemaNode(
colander.String(),
widget = widget.TimeInputWidget()
)
date_time = colander.SchemaNode(
colander.String(),
widget = widget.DateTimeInputWidget()
)
check_box = colander.SchemaNode(
colander.Integer(),
widget = widget.CheckboxWidget(true_val="1", false_val="0")
)
select_combo = colander.SchemaNode(
colander.Integer(),
widget = widget.SelectWidget(values=items)
)
select_combo2 = colander.SchemaNode(
colander.Integer(),
widget = widget.Select2Widget(values=items)
)
file_upload = colander.SchemaNode(
FileData(),
widget = widget.FileUploadWidget(tmpstore=mem_tmp_store,
template='opensipkd.coba:views/templates/file_upload.pt',
readonly_template='opensipkd.coba:views/templates/readonly/file_upload.pt')
)
img_upload = colander.SchemaNode(
FileData(),
widget = widget.FileUploadWidget(tmpstore=mem_tmp_store,
template='opensipkd.coba:views/templates/img_upload.pt',
readonly_template='opensipkd.coba:views/templates/readonly/img_upload.pt')
)
option_list = colander.SchemaNode(
colander.Integer(),
widget = widget.RadioChoiceWidget(values=items)
)
option_box = colander.SchemaNode(
colander.Set(),
widget = widget.CheckboxChoiceWidget(values=items)
)
......@@ -82,7 +158,51 @@ class Views(BaseView):
err_nama()
elif found:
err_nama()
# Set to String
if "option_box" in value:
value["option_box"]=str(value["option_box"])
if "time_ori" in value:
value["time_ori"]=datetime.strptime(value["time_ori"], "%H:%M:%S")
if "check_box" in value:
value["check_box"]=value["check_box"] and 1 or 0
# Save File Upload to Folder
if "file_upload" in value:
upload = Upload(COBA_UPLOAD)
value["file_upload"]=upload.save_fp(value["file_upload"])
if "img_upload" in value:
upload = Upload(COBA_UPLOAD)
value["img_upload"]=upload.save_fp(value["img_upload"])
def get_values(self, row, istime=False):
d = super().get_values(row, istime)
folder = COBA_UPLOAD+'/'
url = get_urls(self.req.static_url(folder))
if "file_upload" in d:
filename = row.file_upload
preview_url = "/".join([url, filename])
d["file_upload"] = {"uid": filename.split(".")[0],
"filename": filename,
"preview_url": preview_url
}
if "img_upload" in d:
filename = row.img_upload
preview_url = "/".join([url, filename])
d["img_upload"] = {"uid": filename.split(".")[0],
"filename": filename,
"preview_url": preview_url
}
d["date_ori"]=ymd(row.date_ori)
d["date_os"]=ymd(row.date_os)
d["date_part"]=ymd(row.date_part)
d["date_time"]=ymd(row.date_time)+'T'+hms(row.date_time)+'Z'
d["time_ori"]=hms(row.time_ori)
d["option_box"]=set(row.option_box)
d["check_box"]=row.check_box and "1" or "0"
return d
@view_config(route_name='coba-form', renderer='templates/list.pt',
permission='view')
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!