upload.py 3.15 KB
import os
import colander
from deform import widget, FileData
from opensipkd.base.widgets import widget_os
from pyramid.view import view_config
from ..models.payment import UploadRealisasiOpsen
from . import BaseView
from ..models.eis import UploadFiles
from datetime import date
from .. import APP_CLASS
from opensipkd.tools import mem_tmp_store, Upload
from pyramid.i18n import TranslationStringFactory

_ = TranslationStringFactory('upload_files')

class ListSchema(colander.Schema):
    id = colander.SchemaNode(
        colander.Integer(),
        title="Action")
    
    title = colander.SchemaNode(
        colander.String(),
        oid="title", )
    
    description = colander.SchemaNode(
        colander.String(),
        oid="description", 
        title="Deskripsi",)
    
    file_name = colander.SchemaNode(
        colander.String(),
        oid="File", )
    
    status = colander.SchemaNode(
        colander.Boolean(),
        widget=widget.CheckboxWidget(),
        oid="status")

class AddSchema(colander.Schema):
    title = colander.SchemaNode(
        colander.String(),
        widget=widget.TextInputWidget(),
        title="Judul",
        oid="title",
    )
    description = colander.SchemaNode(
      colander.String(),
      oid="description", 
      title="Deskripsi",)
    
    file_name = colander.SchemaNode(
        FileData(),
        widget=widget.FileUploadWidget(mem_tmp_store, size="30971520",),
        title='Upload Dokumen',
    )
    status = colander.SchemaNode(
        colander.String(), widget=widget.CheckboxWidget(true_val="1", false_val="0"), title=_('Status'))


class EditSchema(AddSchema):
    id = colander.SchemaNode(colander.String(),
                             missing=colander.drop,
                             widget=widget.HiddenWidget(readonly=True))


class Views(BaseView):
    def __init__(self, request):
        super().__init__(request)
        self.list_schema = ListSchema
        self.add_schema = AddSchema
        self.edit_schema = EditSchema
        self.list_route = 'eis-upload-file'
        self.table = UploadFiles

    # def view_list(self):
    #     return super().view_list()

    # def view_act(self):
    #     return super().view_act()

    # def view_view(self):
    #     return super().view_view()

    def form_validator(self, form, value):
      exc = colander.Invalid(form, '')
      # Save File Upload to Folder
      if "file_name" in value:
          upload = Upload(APP_CLASS.bangbadil_files)
          value["file_name"]=upload.save_fp(value["file_name"])
        
    def view_add(self):
        return super().view_add()

    def get_values(self, row, istime=False):
      d = super().get_values(row, istime)
      if "file_name" in d:
          filename = row.file_name
          url = self.req.static_url(APP_CLASS.bangbadil_files)
          preview_url = os.path.join(url, filename)
          d["file_name"] = {"uid": filename.split(".")[0],
                        "filename": filename,
                        "preview_url": preview_url
                        }
      return d

    # def view_edit(self):
    #     return super().view_edit()

    # def view_delete(self):
    #     return super().view_delete()