o
    /iD                     @   sT  d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZmZmZ d dlmZmZ d dlmZmZ d d	lmZmZmZmZ d d
lZd dl
mZ d dl m!Z! d dlmZ d dl"m#Z#m$Z$m%Z% d dl&m'Z' ddl(m)Z* G dd deZ+G dd deZ,dd Z-G dd deZ.dd Z/dd Z0dd Z1d d! Z2e!d"d# Z3d
S )$    )
HTTPStatus)HttpResponseHttpResponseRedirectJsonResponse)reverse)messages)renderredirect)
CommonView
CommonFormCommonModelForm)koleksimaster)dumplog_activity)ContentVersionContentVersionAttachmentTag
ContentTagN)get_object_or_404)csrf_exempt)r   )extract_text_from_filepredict_categorysuggest_tags)View   )uploadc                   @      e Zd ZdddZdd ZdS )UploadFormCreateViewNc                 C   s`   |d u rt  }tjj }tjjddd}tjjdddd}dd |D }t|d||||dS )	Nr   	pk_parentdeepTr    r!   flatc                 S      i | ]	}|d  |d qS pk
attributes .0ir(   r(   </var/www/html/mfile_papteng_new/webapp/views/fileman/form.py
<dictcomp>    s    z,UploadFormCreateView.get.<locals>.<dictcomp>zfileman/form.html)form	skpd_listcategories_treecategories_flat)	UploadFormHandlem_masterSkpddgobjectsall	m_koleksi
Categories
_recursiver   )selfrequestr.   r/   r0   r1   r(   r(   r,   get   s   zUploadFormCreateView.getc                    s  t |j|j}|jd}g d  fdd|j D }| }td d d}| r%tj	j
d|d d|d< tjj
d|d	 d
|d	< tjj
d|d d
|d< |jd|d< |jd |d< tjjd,i |}|jdd}dd |dD }	|	D ]}
tjj|
d\}}tjj||d q{|j}t||| t|dd|d< tjj|dd}dd |D pg }tjj||d|d|d |d j |d	 j|d j|d |d |d
}tj!j"d|dd}|D ]}t#jj||j$|j%|j&|j'd  qt(|d!d"|d#|dd  t)*|d$ |r%t+d%d|id&|d'< d$|d(< t,|t-j.d)S |r3d*|d(< t,|t-j/d)S | D ]\}}||j0v rG||j0| _1q7| j||d+S )-Nattachmentscsrfmiddlewaretokenpending_delete_idstagsc                    s   i | ]\}}| vr||qS r(   r(   r*   kvEXCLUDE_KEYSr(   r,   r-   .       z-UploadFormCreateView.post.<locals>.<dictcomp>r	   messager   tahunasisrJ   pk_categoriesrL   r&   
pk_skpd_dgr&   
user_inputstatus_kontenrA    c                 S       g | ]}|  r|   qS r(   striplowerr*   tr(   r(   r,   
<listcomp><        z-UploadFormCreateView.post.<locals>.<listcomp>,name)contenttagr'   {}
content_idr_   c                 S      g | ]
}|j jr|j jqS r(   r_   r]   rW   r(   r(   r,   rY   F       judul	deskripsi
pk_contentsrf   rg   r'   rJ   rM   rO   rQ   rP   rA   FrL   ri   
is_deleted
pk_versionr]   pathcontent_typesizer   contentszUpload dokumen zberhasil menyimpan data.content_item)kwargsr	   rI   statusz$gagal menyimpan, data belum lengkap.r.   r(   )2r2   POSTFILESgetlistitemsis_ajaxdictis_validr3   Ta	_read_oner7   r8   r4   sessionr<   cleaned_dataContents_createsplitr   r5   get_or_creater   r&   fileman_uploaddeployfix_json_attributesfilterselect_relatedr   createrJ   Attachments
_read_manyr   r]   rn   _typerp   r   r   infor   r   r   OKBAD_REQUESTfieldsinitial)r:   r;   r.   filesvaluesr{   	json_datarq   tags_rawrA   tag_namer_   _r&   tag_objs	tag_namesversionr=   arC   rD   r(   rE   r,   post)   st   
zUploadFormCreateView.postN__name__
__module____qualname__r<   r   r(   r(   r(   r,   r      s    
r   c                       s2   e Zd Z fddZdd ZG dd dZ  ZS )r2   c                    sv   t  j|i | d| jd _d| jd _d| jd _d| jd _| jd	 jjd
di | jd jjd
di d S )NKategorirM   z---Pilih SKPD---rO   zDeskripsi Singkatrg   zJenis BerkasrQ   rf   placeholderzMasukkan judul dokumen...z%Tuliskan deskripsi singkat dokumen...)super__init__r   labelwidgetattrsupdate)r:   argsrs   	__class__r(   r,   r   v   s   zUploadFormHandle.__init__c              
   C   s^   zt |}t|}t|}||fW S  ty. } ztd|  dg fW  Y d}~S d}~ww )zZ
		Fungsi bantu untuk prediksi kategori dan tag
		langsung dari form (pakai model NLP).
		z[AI Predict] Gagal prediksi: N)r   r   r   	Exceptionprint)r:   filetextpred_categorysuggested_tagser(   r(   r,   auto_predict_category_and_tags   s   
z/UploadFormHandle.auto_predict_category_and_tagsc                   @   s   e Zd ZejZg dZdS )zUploadFormHandle.Meta)rJ   rM   rO   r'   rf   rg   rQ   N)r   r   r   r7   r   modelr   r(   r(   r(   r,   Meta   s    r   )r   r   r   r   r   r   __classcell__r(   r(   r   r,   r2   r   s    r2   c                 C   s    t | tr
| |S t| |d S r   )
isinstancer|   r<   getattr)objfieldr(   r(   r,   get_val   s    r   c                   @   r   )UploadFormUpdateViewNc                 C   s  |d u rt  }tjj|d}tjj|dd}ddd |D }dd tj	j
d|d	D }| D ]\}}	||jv rB|	|j| _q3tjj }
tjjd
d
d}dd tjjd
d
ddD }|d |jdkr~|jddvr~t|ddtd|gdiS t|d|||
||||dS )Nr&   ra   r_   z, c                 S   s   g | ]}|j jqS r(   rd   rW   r(   r(   r,   rY      s    z,UploadFormUpdateView.get.<locals>.<listcomp>c                 S   s   g | ]	}t |d s|qS )rk   )r   )r*   r   r(   r(   r,   rY      s    r   rL   ri   r   r   c                 S   r$   r%   r(   r)   r(   r(   r,   r-      s    z,UploadFormUpdateView.get.<locals>.<dictcomp>Tr"   rP   r&   roleADMINKOORDINATORforbidden.htmlurlnyarr   r   zfileman/form_edit.html)r&   r.   r/   r=   r0   r1   tags_initial)r2   r7   r   r   r   r5   r   r   joinr   r   rz   r   r   r3   r4   r6   r8   r9   r   r<   r   r   )r:   r;   r&   r.   rq   tags_qstags_strr=   rC   rD   r/   r0   r1   r(   r(   r,   r<      s8   
$zUploadFormUpdateView.getc                 C   s  t |j|j}dd |j D }|jd}| }td d d}|jdd}dd |d	D }|	 rp|jd
d}	dd |	d	D }
|

 }tjj|d}t|dd}tjj||d|d||d|d|d|d|jd|d
}tjjd|d}|D ]}t|ddstjj|t|dt|dt|dt|dd q|jdd}|d	D ]}|  rtjdd idt|i qtjjd|d d!|d< tjjd|d d"|d< tjjd|d d"|d< |j d |d< tj|d|i t!jj"|d##  |
D ]}t$jj%|d$\}}t!jj%||d% qtjjd|d}|D ]}t|ddr6q+q+|rDt&j'||||d& t(|d'd(|d)|dd  t)*|d* |rpt+d+|gd,|d-< d.|d/< t,|t-j.d0S | j|||d1S )2Nc                 S   s   i | ]\}}|d vr||qS )r>   r(   rB   r(   r(   r,   r-      rG   z-UploadFormUpdateView.post.<locals>.<dictcomp>r=   rH   r@   rR   c                 S   s   g | ]
}|  rt|qS r(   )isdigitint)r*   xr(   r(   r,   rY      re   z-UploadFormUpdateView.post.<locals>.<listcomp>r[   rA   c                 S   rS   r(   rT   rW   r(   r(   r,   rY      rZ   r   r'   r`   rf   rg   rJ   rM   rO   rQ   r&   rh   r   r   rk   Fr]   rn   r   rp   rl   TrK   rN   ra   r\   rb   r_   )	new_filesr@   editrq   zEdit dokumen zBerhasil memperbarui data.rr   r   r	   zBerhasil menyimpan data.rI   rt   rv   )/r2   rw   rx   rz   ry   r{   r|   r<   r   r}   copyr7   r   r   r   r   r5   r   r   r   r   r   r   r   rU   r   _updater   r3   r~   r8   r4   r   r   r   deleter   r   r   deploy_partialr   r   r   r   r   r   r   )r:   r;   r&   r.   r   r=   r{   r   pending_idsr   rA   r   oldold_attr_fixedr   	old_filesr   att_idr   r_   r   remaining_filesr(   r(   r,   r      s   

zUploadFormUpdateView.postr   r   r(   r(   r(   r,   r      s    
$r   c                 C   s2  t t|d}|j}tjjj|d}tjj|d}|dd}t|}t	jj
|dd}dd |D }	tjj||d	|d
||d|d|d|d| jd|	d
}
tjjd|dd}|D ]}tjj|
t|dt|dt|dt|dd qdtjddid|i tjj
|jd}|D ]}tjj||j|j|j|jdd q|j}t|trt|}tj|j|j|t j!jj|j"dtj#jj|j$dt j%jj|j&d|j'dd|ji t	jj
|d(  |j)pg }	|	D ]}t*jj+|d \}}t	jj+||d! qt,| d"d#|d$|j  t-.| d% t/d&|dS )'N)_pkr   r'   r`   ra   r_   c                 S   rc   r(   rd   rW   r(   r(   r,   rY     re   z$rollback_version.<locals>.<listcomp>rf   rg   rJ   rM   rO   rQ   r&   rh   r   Frj   r]   rn   r   rp   rl   rk   Tri   )rm   )ri   r]   rn   r   rp   rk   )rJ   )rf   rg   r'   rJ   rM   rO   rQ   r\   r   rollbackrq   zRollback ke versi ID z"Rollback metadata & file berhasil.rr   )0r   r   ri   r7   r   r5   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   rn   ro   rp   r'   r   r|   jsondumpsrf   rg   r3   r~   rJ   r8   rM   r4   rO   rQ   r   rA   r   r   r   r   successr	   )r;   r&   r   ri   content_objcurrentraw_attrattributes_fixedtag_qsr   backup_versionactive_filesr   restored_filesfattrr   r_   r   r(   r(   r,   rollback_version  s|   
	



r   c                 C   s   t jddid|i td S )Nrk   Tr&   )r7   r   r   r   )r;   r&   r(   r(   r,   remove\  s   r   c              
   C   s&  z]t jj|d}|d | jdkr(| jddvr(t| ddtd|gd	iW S t jjd
|d}|D ]}t	j
t|dd q2t jj|d t| dd|d|d  d t| d tdW S  t jjyr   t| d td Y S  ty } ztd| t| d tdW  Y d }~S d }~ww )Nr   rP   r&   r   r   r   r   rr   r   r   r   r   rq   zHapus dokumen rf   )actionro   	object_pkdescriptionzBerhasil menghapus data.content_listz(Data yang ingin dihapus tidak ditemukan.zError:z&Terjadi kesalahan saat menghapus data.)r7   r   r   r   r<   r   r   r   r   r   destroy_one_permanentr   _deleter   r   warningr	   DoesNotExisterrorr   r   )r;   r&   rq   attachment_listr   r   r(   r(   r,   r   b  s4   $

r   c                 C   sx   | sdS t | trt| S zt|  | W S  tjy;   | dd}z
t| |W  Y S  tjy:   Y Y dS w w )Nr`   '")r   r|   r   r   loadsJSONDecodeErrorreplace)attr_raw
attr_fixedr(   r(   r,   r     s    




r   c              
   C   s   | j d}|stddiddS zt|}t|}t|}t||dW S  ty@ } ztdt|iddW  Y d }~S d }~ww )Nr   r   z(Tidak ada File atau  category yang cocoki  rt   )r   r   i  )rx   r<   r   r   r   r   r   str)r;   r   r   r   r   r   r(   r(   r,   predict_category_tags  s   
 r   )4httpr   django.httpr   r   r   django.urlsr   django.contribr   django.shortcutsr   r	   webapp.views.baser
   r   r   webapp.modelsr   r7   r   r3   webapp.commonr   r   webapp.models.koleksir   r   r   r   r   r   django.views.decorators.csrfr   webapp.ml_loader_svcr   r   r   django.viewsr   rR   r   r   r   r2   r   r   r   r   r   r   r   r(   r(   r(   r,   <module>   s4   Z#}H 