Commit df92e247 by aa.gusti

perbaikan partner

1 parent 324d8d62
......@@ -124,6 +124,8 @@ def add_cors_headers_response_callback(event):
# https://groups.google.com/forum/#!topic/pylons-discuss/QIj4G82j04c
def has_permission_(request, perm_names, context=None):
if not perm_names:
return False
if isinstance(perm_names, str):
perm_names = [perm_names]
for perm_name in perm_names:
......
......@@ -10,7 +10,7 @@ from dateutil.relativedelta import relativedelta
from deform import (widget, Form, ValidationFailure, FileData, )
from deform.widget import SelectWidget
from opensipkd.tools import dmy, get_settings, get_ext, \
date_from_str, get_random_string
date_from_str, get_random_string, Upload, InvalidExtension
from opensipkd.tools.buttons import btn_save, btn_cancel, btn_close, btn_delete, \
btn_add, btn_csv, \
btn_pdf, btn_unpost, btn_post
......@@ -302,8 +302,6 @@ class BaseView(object):
return False
def view_view(self, **kwargs): # row = query_id(request).first()
request = self.req
row = self.query_id().first()
if not row:
......@@ -355,7 +353,7 @@ class BaseView(object):
if not exts:
exts = self.upload_exts
delimiter = args.get("delimiter")
delimiter = kw.get("delimiter")
bindings = self.get_bindings()
form = self.get_form(self.upload_schema, bindings=bindings)
resources = form.get_widget_resources()
......@@ -386,7 +384,7 @@ class BaseView(object):
output_file.write(data)
output_file.close()
try:
self.save_upload(fullpath, **args)
self.save_upload(fullpath, **kw)
except Exception as e:
self.req.session.flash(str(e), 'error')
return dict(form=form.render(),
......@@ -742,6 +740,50 @@ class BaseView(object):
"""
return self.route_list()
def convert_avi_to_mp4(self, input_name):
output = os.path.splitext(input_name)[0] + ".mp4"
command = "ffmpeg -y -i {input} -c:v mpeg4 {output}".format(
input=input_name, output=output)
log.debug(f"Convert: {command}")
os.popen(command)
# os.remove(input_name)
# "ffmpeg -i {input} -ac 2 -b:v 2000k -c:a aac -c:v libx264 -b:a 160k -vprofile high -bf 0 -strict experimental -f mp4 {output}.mp4"
return output
def form_error(self, form, error=None):
if error is None:
error = []
if not error:
return
err = colander.Invalid(form, "")
for e in error:
err[e[0]] = e[1]
raise err
def save_upload_file(self, form, value, folder, field):
file_dict = value[field]["file_name"]
if not os.path.exists(folder):
os.makedirs(folder)
upload = Upload(folder)
error = []
if file_dict:
input_file = file_dict["fp"]
if input_file:
filename = file_dict["filename"].lower()
ext = get_ext(filename)
if ext not in self.upload_exts:
error.append((field, InvalidExtension(self.upload_exts).error))
else:
full_file_name = upload.save_to_file(input_file, ext, filename)
if ext == ".avi":
full_file_name = self.convert_avi_to_mp4(full_file_name)
file_name = os.path.split(full_file_name)[1]
return file_name
self.form_error(form, error)
@colander.deferred
def deferred_status(node, kw):
......
......@@ -3,7 +3,7 @@ from deform import (
widget, Button,
)
from opensipkd.base import get_id_card_folder
from opensipkd.models import DBSession, Partner
from opensipkd.models import DBSession, Partner, PartnerFiles
from opensipkd.models import (
ResProvinsi, ResDati2, ResKecamatan, ResDesa)
from opensipkd.models.common import ResCompany
......@@ -287,7 +287,8 @@ class ViewPartner(BaseView):
}
return d
def before_delete(self, row):
PartnerFiles.query().filter_by(partner_id=row.id).delete()
@colander.deferred
def partner_widget(node, kw):
values = kw.get('partner_list', [])
......
import colander
from deform import FileData, widget
from opensipkd.tools import mem_tmp_store
from translationstring import TranslationStringFactory
from opensipkd.base.views.dati2 import dati2_widget
from opensipkd.base.views.desa import desa_widget
from opensipkd.base.views.kecamatan import kecamatan_widget
from opensipkd.base.views.provinsi import provinsi_widget
from opensipkd.models import Partner
from opensipkd.tools import mem_tmp_store
from translationstring import TranslationStringFactory
from .. import get_urls
from . import Validator
from .. import get_urls
_ = TranslationStringFactory('partner')
class PartnerEmailValidator(colander.Email, Validator):
def __init__(self, row):
Validator.__init__(self, row)
......@@ -65,6 +67,7 @@ class PartnerKodeValidator(Validator):
def partner_kode_validator(node, kw):
return PartnerKodeValidator(kw['row'])
class NamaSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
......@@ -76,11 +79,17 @@ class NamaSchema(colander.Schema):
colander.String(),
validator=colander.Length(max=64),
oid="nama")
mobile = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=16),
oid="mobile")
email = colander.SchemaNode(
colander.String(),
validator=partner_email_validator,
oid="email")
class PartnerSchema(NamaSchema):
nip = colander.SchemaNode(
colander.String(),
......
......@@ -11,19 +11,23 @@
">
${field.start_mapping()}
<img tal:condition="ext in img" id="preview-${oid}" alt="" src="${preview_url}"
style="width:100px;height:auto;display:block;"
style="${style}"
onload="window.URL.revokeObjectURL(this.src);"></img>
<video tal:condition="ext in video" width="100%" height="100%" controls
src="${preview_url}" type="video/${ext}">
<video tal:condition="ext in video" style="${style}" controls
src="${preview_url}" type="video/${ext}">
Your browser does not support the video tag.
</video>
<video tal:condition="ext=='mp4'" width="100%" height="100%" controls
src="${preview_url}" type="video/mp4">
<video tal:condition="ext=='mp4'"
controls
style="${style}"
src="${preview_url}"
type="video/mp4">
Your browser does not support the video tag.
</video>
<embed tal:condition="ext=='pdf'" src="${preview_url}" width="100%" height="400">
<embed tal:condition="ext=='pdf'" src="${preview_url}" style="${style}">
<a id="label-${oid}" tal:condition="preview_url" class="label label-default" href="${preview_url}"
target="_blank"><i class="fa fa-search"></i> View</a>
......
<p tal:define="preview_url cstruct.get('preview_url');
ext str(cstruct.get('filename').split('.')[-1:][0]).lower()|[];">
<tal:block tal:condition="preview_url and ext in ['jpg','jpeg','png','bmp','gif']">
css_class css_class|field.widget.css_class;
style style|field.widget.style;
preview_url cstruct.get('preview_url')|'';
ext str(cstruct.get('filename').split('.')[-1:][0]).lower()|[];
fname str(cstruct.get('filename'))|'';
delete cstruct.get('delete')|'';
ext str(cstruct.get('filename').split('.')[-1:][0]).lower()|[];
img ['jpg', 'jpeg', 'gif', 'png', 'svg', 'eps', 'psd'];
video ['avi', 'mov', 'mpv'];
">
<img tal:condition="ext in img" id="preview-${oid}" alt="" src="${preview_url}"
style="${style}"
onload="window.URL.revokeObjectURL(this.src);"></img>
<video tal:condition="ext in video" style="${style}" controls
src="${preview_url}" type="video/${ext}">
Your browser does not support the video tag.
</video>
<video tal:condition="ext=='mp4'"
controls
style="${style}"
src="${preview_url}"
type="video/mp4">
Your browser does not support the video tag.
</video>
<embed tal:condition="ext=='pdf'" src="${preview_url}" style="${style}">
<tal:block tal:condition="preview_url and ext in ['jpg','jpeg','png','bmp','gif']">
<img src="${structure: preview_url}" style="width:100px;height:auto;"></img>
<br>
</tal:block>
<a class="label label-default" href="${structure: preview_url}"
target="_blank"><i class="fa fa-search"></i> View</a>
</p>
</tal:block>
<a class="label label-default" href="${structure: preview_url}"
target="_blank"><i class="fa fa-search"></i> View</a>
</p>
\ 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!