a
    E)h:                     @   s  d dl Z d dl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
 d dlmZmZ d dl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mZm Z m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m;Z<m=Z> d dl?m@Z@mAZAmBZBmCZCmDZD d dlEmFZF d dlGmHZH dd ZIe1e3dd ZJe1e3dd ZKd(d d!ZLd"d# ZMd$d% ZNd&d' ZOdS ))    N)BytesIO)Document)	PdfReader)Image)convert_from_bytesconvert_from_path)	Converter)settings)ContentFile)default_storage)	Paginator	EmptyPagePageNotAnInteger)
connection)QValueF	CharField	TextFieldIntegerField)Cast)HttpResponseHttpResponseRedirectJsonResponseHttp404)renderget_object_or_404)slugify)csrf_exempt)require_POST)messages)dumpcurrencytgl_indo)koleksimaster)ContentVersionContentVersionAttachmentContents
ContentTagTag)Users)upload_to_drivec              
   C   s   | j dkr| jd}|rtz t||j}td|jddW S  typ } ztdt|dW  Y d}~S d}~0 0 ntdd	dS tdd
dS )z9
    Upload PDF ke Google Drive dan kembalikan link.
    POSTfilesuccesszHhttps://drive.google.com/drive/folders/19pH19iCJ8hNr9OF0TwyWwMiKeR-_iecS)status	file_nameweb_linkerrorr0   messageNzFile tidak ditemukan.zMetode request harus POST)methodFILESgetr,   namer   	Exceptionstr)requestr.   linke r?   OD:\WORK\M-FILE\MFILE_PAPTENG_NEW\mfile_papteng_new\webapp\views\fileman\main.pyupload_pdf_to_drive<   s    

*rA   c                 C   s  | j d}|s"tdddddS t jdd }ttj	|j
d	 }| d
| d}tjtjd|}tjtj|dd t|d(}| D ]}|| qW d   n1 s0    Y  t|}g }	tjtjd| d
| }
tj|
dd tt|D ]r}||}|jtddd}d|d  d}tj|
|}|| tj d| d
| d| }|	| q
|  td|	dS )z0
    Konversi PDF ke beberapa gambar (PNG).
    r.   r3   zNo PDF file providedr4     r0   N   r   -.pdfconverted_pdfsT)exist_okzwb+converted_images   )matrixpage_   z.pngzconverted_images//r/   )r0   images)r7   r8   r   uuiduuid4hexr   ospathsplitextr9   joinr	   
MEDIA_ROOTmakedirsdirnamer   openchunkswritefitzrangelen	load_page
get_pixmapMatrixsave	MEDIA_URLappendclose)r<   pdf_file	unique_id	base_namefilenamepdf_pathdestinationchunkdoc
image_urlsimage_folderipagepiximage_filename
image_path	image_urlr?   r?   r@   convert_to_imagesU   s2    *


rw   c                 C   s   | j d}|r|jds(tdddS tjddd$}||  |j}W d   n1 s`0    Y  |	dd	}t
|}|j|d
dd |  t|d8}t| dd}dtj| d|d< W d   n1 s0    Y  t| t| |S )z,
    Konversi PDF ke file Word (.docx).
    r.   rF   z(File tidak valid. Harap unggah file PDF.rB   rC   F)deletesuffixNz.docxr   )startendrbzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.document)content_typezattachment; filename=""zContent-Disposition)r7   r8   r9   endswithr   tempfileNamedTemporaryFiler\   readreplacer   convertrf   rZ   rS   rT   basenameremove)r<   r.   tmp_pdftmp_pdf_pathtmp_docx_pathcv	docx_fileresponser?   r?   r@   convert_to_word   s&    $6

r   c                 C   s  i }t  }| jdd }| jd}| jd}| jd}| jd}| jd}	| jdd	}
t| jd
dpxd}|r|dkr|| jd< |r|| jd< |r| rt|| jd< |r|dkrdnd| jd< |r| rt|| jd< |	r|	| jd< |r|| jd< |
dkr0dD ]}| j|d q| jdrPt| jd |d< | jdrpt| jd |d< | jdrt| jd |d< | D ] \}}|t f i ||iM }q| jdr$| jd }dd t	j
j D }|r$t  }|D ]"}|t f i | d|iO }q||M }| jddkr:dnd}t	j
j||jtdt dd}| jdd}t||}||}g }|D ]}t	j
|}t	jjd|d d }| |d!< d"d |D |d#< t	jjd|d d |d$< tjjd|d d% |d< || qt| d&|t	jjd	d	d'tjj  ||| jddt!| jd" rlt| jdndt!| jd" rt| jdndt!| jd" rt| jdnd| jdd|| jdd(d)S )*zI
    Tampilkan daftar konten dengan filter, sorting, dan pagination.
    term 
pk_skpd_dgtahundispitem_jmlsortingresetr   rr   rM   search_kategorisearch_skpdlistcoldisplayshow1)r   r   r   r   Npk_categoriesc                 S   s&   g | ]}t |ttfr|js|jqS r?   )
isinstancer   r   is_relationr9   ).0fieldr?   r?   r@   
<listcomp>   s   zpage_list.<locals>.<listcomp>Z__icontainsdesc-createdcreated
attributes)Zattributess   pk)asispk_contentsattachmentsc                 S   s   g | ]}|j |jd qS )r9   rT   r   )r   ar?   r?   r@   r      s   Zattachments_list	thumbnailr   r   zfileman/list.html)	pk_parentdeepasc)r   Zcategories_listZ	skpd_listr   pagingZterm_currentZsearch_skpd_dgr   Zsearch_tahunr   r   r   )#r   GETr8   stripintsession	isnumericpopitems	m_koleksir(   _meta
get_fieldsobjectsfilterorder_byannotater   r   deferr   get_page_sanitize_resultAttachments
_read_manycountm_masterSkpddgre   r   
Categories
_recursiveallr;   isdigit)r<   r   Z	my_filterfr   r   r   r   r   r   r   rr   keyvalueZ
term_valuefieldsqr   orderqueryZitem_per_page	paginatorr   resultitemZattachments_qsr?   r?   r@   	page_list   s    






 




(((r   c                 C   s  t jjd|d}t jjd|dd}|j}| jd}| jd}|j|ksR|dv rVdnd	}d
\}}	}
|j	rt j
j|j	jd}t j
j|j	jd}|r|d nd}	|jD ]T}|	r|	| d dkrt|j| |j|< |	r|	| d dkrt|j| |j|< q|jrtjj|jjd}
tjjd|jdj }tjj|dd}| }d}|rltjj|jdd }|rx|jnd|_t| d||||	|
||||d	S )z
    Detail satu konten.
    rM   r   F)r   r   
is_deletedr   role)ADMINKOORDINATORyesno)NNNr   r   NtypeZmoneydate)r   r   
pk_versionzfileman/item.html)	r   r   
categoriesr   skpdallowuser_yg_inputstatus_kontenversions)r   r(   	_read_oner   r   r   r   r8   
user_inputr   r   _recursive_reverser   r   r"   r#   r   r   r   r+   usrupperr&   r   r   r   firstr'   rT   Z
latest_pdfr   )r<   r   r   r   r   Zuser_pkZ	user_roler   r   r   r   Zattr_objr   r   r   Zlatest_versionZlatest_attachmentr?   r?   r@   	page_item  sN    

r   c           	         s   t jj|d}t D}|d|g dd |jD   fdd| D }W d   n1 s`0    Y  |D ]}tj	j
|d d|d	< qnt|d
}| jd}||}t| d||dS )z)
    Tampilkan riwayat versi konten.
    r   z
            SELECT cv.*, u.usr AS user_nama
            FROM content_versions cv
            LEFT JOIN users u ON u.pk = cv.user_input
            WHERE cv.pk_contents = %s
            ORDER BY cv.created DESC
        c                 S   s   g | ]}|d  qS )r   r?   )r   r   r?   r?   r@   r   p      z page_history.<locals>.<listcomp>c                    s   g | ]}t t |qS r?   )dictzip)r   rowcolumnsr?   r@   r   q  r   Nr   r   r   r   rr   zfileman/history.html)r   r   )r   r(   r   r   cursorexecutedescriptionfetchallr'   r   r   r   r   r8   r   r   )	r<   r   contentr   Zversions_listvr   page_numberZversions_pager?   r   r@   page_historyb  s     
4

r   c                 C   s   t t| d}tjj|dd}t|d}| j	d}z|
|}W n8 tyd   |
d}Y n ty   |
|j}Y n0 t| d||dS )	z;
    Detail tag dan daftar konten dengan tag tersebut.
    )r9   )Zcontenttag__tagr   r   rr   rM   zfileman/tags_detail.html)tagcontents)r   r*   lowerr(   r   r   r   r   r   r8   rr   r   r   	num_pagesr   )r<   tag_namer   Zcontents_listr   rr   r   r?   r?   r@   page_tag_detail  s    
r  )N)PrS   rP   r   ior   docxr   PyPDF2r   PILr   	pdf2imager   r   pdf2docxr   r]   django.confr	   django.core.files.baser
   django.core.files.storager   django.core.paginatorr   r   r   	django.dbr   django.db.modelsr   r   r   r   r   r   django.db.models.functionsr   django.httpr   r   r   r   django.shortcutsr   r   django.utils.textr   django.views.decorators.csrfr   django.views.decorators.httpr   Zdjango.contribr    webapp.commonr!   r"   r#   Zwebapp.modelsr$   r   r%   r   Zwebapp.models.koleksir&   r'   r(   r)   r*   webapp.models.masterr+   webapp.utilsr,   rA   rw   r   r   r   r   r  r?   r?   r?   r@   <module>   sL    + 
hV4