o
    1i7F                     @   s  d dl mZmZ d dlmZ d dlmZmZ d dl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 d d	l mZ d d
lmZ d dlmZ d dlmZmZmZmZ d dl
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" d dl m#Z#m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- d dl.Z.d dl/m0Z0 d dl1m2Z2 d dl mZmZ d dl3Z3d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl6m:Z: d dl*m+Z+ d dl m#Z# d dl.Z.d dl;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;Z;d d!lAmBZBmCZC d d"lDmEZE d d#lDmFZF d d$lGmHZH d d%lImJZJ d d&l&mKZK d'd( ZLe%e'd)d* ZMe%e'd+d, ZNd-d. ZOd/d0 ZPd1d2 ZQdDd3d4ZRdDd5d6ZSd7d8 ZTeKd9d: ZUd dl m#Z# d d;lmVZV d<d= ZWd>d? ZXd@dA ZYdBdC ZZdS )E    )Http404HttpResponse)PermissionDenied)renderredirect)models)ExtractYear	TruncDateExtractMonth)koleksimaster)dumpcreate_thumbnail)QCount)HttpResponseRedirectr   )	Paginator)r   Value	CharFieldIntegerField)Cast)r   	TextField)r   currencytgl_indo)JsonResponser   )csrf_exempt)require_POST)default_storage)ContentFile)DocumentN)	PdfReader)BytesIO)r   r   )Image)convert_from_bytes)	Converter)convert_from_path)r   )settings)slugify)ContentVersionContentVersionAttachment)Users)Skpddg)upload_to_drive)messages)require_GETc              
   C   s   | j dkr@| jd}|r9zt||j}td|jddW S  ty8 } ztdt|dW  Y d }~S d }~ww tdddS tdd	dS )
NPOSTfilesuccesszHhttps://drive.google.com/drive/folders/19pH19iCJ8hNr9OF0TwyWwMiKeR-_iecS)status	file_nameweb_linkerrorr3   messagezFile tidak ditemukan.zMetode request harus POST)methodFILESgetr-   namer   	Exceptionstr)requestr1   linke rB   4/var/www/html/mfile_papteng_new/webapp/views/main.pyupload_pdf_to_drive<   s    

rD   c                 C   s  | j dkr| jdr| jd }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 ]}|| qKW d    n1 s]w   Y  t|}g }	tjtjd| d| }
tj|
dd	 tt|D ]8}||}|jtddd}d|d  d}tj|
|}|| tj d| d| d| }|	| q|  td|	dS tdddddS )Nr0   r1      r   -.pdfconverted_pdfsT)exist_okzwb+converted_images   )matrixpage_   z.pngzconverted_images//r2   )r3   imagesr6   zNo PDF file providedr7     r3   )r9   r:   r;   uuiduuid4hexr(   ospathsplitextr<   joinr'   
MEDIA_ROOTmakedirsdirnamer   openchunkswritefitzrangelen	load_page
get_pixmapMatrixsave	MEDIA_URLappendcloser   )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_urlrB   rB   rC   convert_to_imagesM   s6   



rz   c                 C   s   | j d}|r|jdstdddS tjddd}||  |j}W d    n1 s0w   Y  |	dd}t
|}|j|d	d d
 |  t|d}t| dd}dtj| d|d< W d    n1 sow   Y  t| t| |S )Nr1   rG   z(File tidak valid. Harap unggah file PDF.rQ   rR   F)deletesuffixz.docxr   )startendrbzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.document)content_typezattachment; filename=""zContent-Disposition)r:   r;   r<   endswithr   tempfileNamedTemporaryFiler_   readreplacer%   convertri   r]   rV   rW   basenameremove)r?   r1   tmp_pdftmp_pdf_pathtmp_docx_pathcv	docx_fileresponserB   rB   rC   convert_to_wordv   s$   

r   c                 C   s   t dS )Ndash)r   )r?   rB   rB   rC   home   s   r   c                 C   s@   t | trz| jdddjdddW S  ty   |  Y S w | S )z7Membersihkan string dari byte non-UTF-8 (misalnya 0x96)cp1252ignore)errorszutf-8)
isinstancer>   encodedecoder=   )textrB   rB   rC   safe_decode   s   
r   c           !      C   sx  | j dtjjddd }t|}tjjj|d dd d dd}t	j
jj|d	 }t	j
jj|d	 }t	jjj|d
td}|d }t	jjj|d
 }t	jjj|d
tdd ped}t	jjj|d
jtdddjtdd}t	jjj|dd }	t	jjj|ddtd}
|
d }
t	jjj|dd }t	jjj|ddtd}|d }	 t	jjjtddtddB |ddjtdd}t	jjjtddtddB |dtdd }t	jjjd|ddjtdd}t	jjjd|ddjtdd}t	jjj|d }t	jjj|d }t	jjj|dd }t	jjj|dd }t	jjj|ddjtdd}t	jjj|d }ddlm} |j }|jdjtddd  }|jd!jtddd  }|jjtd"d#d$jtddd  }t	j
j d%d d& }t	jj d'}tj }g }|d(d)D ]} t| d)| d)< ||  qt | d*i d|d+|d,t!|d-t!|d.t!|d/|d0|d1|d1|d2|	d3|
d4|d5|d6t!|d7|d8|d9|pd:dd;|p d:dd<|p'd dd=|||||||r4t!|ng ||d>S )?NtatcurrenttahunrK   )
tahun__lte   r   )r   pk_contents__tahunsize	size__sumr   createdbulanr   *totalMASUK)tanggal__year_typesuratf__sizesuratf__size__sumKELUAR)r   )r   tanggal__month)banyak)r   r   )AuditLog	user__usrlog_idz-totalaction	timestamp)tanggalr   z-_pk2   sortpkuraizdash/home.htmltahun_activeberkasmasuk_monthlysuratmasuk_monthlysuratkeluar_monthlyskpdsbanyak_berkasukuran_berkasbanyak_surat_masukukuran_surat_masukbanyak_surat_keluarukuran_surat_keluardisposisi_monthlyukuran_disposisi	total_loguser_teraktifzN/A)r   r   )r   r   )r   r   )aksi_terbanyakhari_terbanyaktotal_berkas_surattotal_disposisitotal_surat_masuktotal_surat_keluartotal_attachmentsukuran_total_attachmentsattachments_monthlycontents_limit
categories)"GETr;   m_masterTa	_read_oneintobjectsfiltervalues	m_koleksiContentscountAttachments	aggregater   Sumannotater
   r   Suratr   	Disposisiwebapp.models.masterr   order_byfirstr	   all
Categoriesr,   r   rh   r   list)!r?   r   r   ukuran_banyak_berkasr   r   r   r   r   r   r   r   r   r   ukuran_berkas_totalr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   cleaned_skpdsskpdrB   rB   rC   r      s  $&&$



	

r   c                 C   
   t | dS )Nz403.htmlr   r?   	exceptionrB   rB   rC   page403H     
r   c                 C   r   )Nz404.htmlr   r   rB   rB   rC   page404L  r   r   c                 C   sP   t jj }|D ]}zt|j W q ty# } zW Y d }~qd }~ww tdS )NSukses)r   r   r   r   r   rW   r=   r   )r?   berkasrt   rA   rB   rB   rC   generate_thumbnailP  s   r   c                 C   sj   | j dd }|d u rtjjddd }tjjj|dj	t
dddj	tdd	}td
t|iddS )Nr   r   r   r   r   r   r   r   r   dataFsafe)r   r;   r   r   r   r   r   r   r   r   r
   r   r   r   r   )r?   r   r   rB   rB   rC   attachments_monthly_api[  s   r   )
connectionc              	   C   s&  d}d}g }t  }|d|g | }W d    n1 s w   Y  |D ]5\}}t  }|d||g | }	W d    n1 sFw   Y  |	sNq'|||dd |	D d q't  }|d||g | }
W d    n1 sxw   Y  |
r||d	d
d |
D d t|ddS )N      z|
            SELECT pk, text
            FROM categories
            WHERE pk_parent = %s
            ORDER BY text
        z
                SELECT pk, judul
                FROM contents
                WHERE pk_categories = %s AND pk_skpd_dg = %s
            c                 S   "   g | ]}|d  |d pddqS r   rN   
(No Title))idtitlerB   .0frB   rB   rC   
<listcomp>      z#graph_skpd_view.<locals>.<listcomp>)r  r<   childrenzy
            SELECT pk, judul
            FROM contents
            WHERE pk_categories = %s AND pk_skpd_dg = %s
        SP2Dc                 S   r  r  rB   r  rB   rB   rC   r    r  Fr   )r   cursorexecutefetchallrh   r   )r?   r   
KONTRAK_IDSP2D_IDresultr  subcatscat_idcat_namefiles
files_sp2drB   rB   rC   graph_skpd_viewq  sP   

	




	r  c                 C   sN   t  }|d|| g | }W d    n1 sw   Y  dd |D S )Nz
            SELECT pk, judul
            FROM contents
            WHERE pk_categories=%s AND pk_skpd_dg=%s
            ORDER BY pk DESC
            LIMIT 20
        c                 S   r  r  rB   r	  rrB   rB   rC   r    s   " zget_files.<locals>.<listcomp>)r   r  r  r  )pk_skpdr  r  rowsrB   rB   rC   	get_files  s   

	r  c                 C   sX   t  }|d|g | }W d    n1 sw   Y  dd |D }t|ddS )Nz
            SELECT pk, judul
            FROM contents
            WHERE pk_categories = %s
            ORDER BY pk DESC
            LIMIT 100
        c                 S   s   g | ]}|d  |d dqS )r   rN   )r   judulrB   r  rB   rB   rC   r    s    z'graph_category_view.<locals>.<listcomp>Fr   )r   r  r  r  r   )r?   r   r  r  r   rB   rB   rC   graph_category_view  s   


r!  c                 C   s(  t |}t }|d|g | }W d    n1 sw   Y  |s,tg g dS d|d  |d p7dddg}g }t 8}|d	|g | }|D ]"}|d
|d  |d dd |d| d
|d  d qPW d    n1 s}w   Y  t 8}|d|g | }|D ]"}|d|d  |d dd |d| d|d  d qW d    n1 sw   Y  t :}|d|g | }|D ]$}|d|d  |d dd |d|d  d|d  d qW d    n	1 sw   Y  t||dS )Nz@
            SELECT pk, judul FROM contents WHERE pk=%s
        )nodesedgeszcontent-r   rN   r  Content)r  labelgroupzK
            SELECT pk, name FROM attachments WHERE pk_contents=%s
        zatt-
Attachment)fromtozQ
            SELECT pk, judul FROM content_versions WHERE pk_contents=%s
        zver-Versionz
            SELECT va.pk, va.name, va.pk_version
            FROM content_version_attachments va
            JOIN content_versions cv ON cv.pk = va.pk_version
            WHERE cv.pk_contents=%s
        zvatt-VersionAttachmentrK   )r   r   r  r  fetchoner   r  rh   )r?   r   r  contentr"  r#  r  r  rB   rB   rC   graph_content_view  sZ   



 "

 "

 &r.  )N)[django.httpr   r   django.core.exceptionsr   django.shortcutsr   r   	django.dbr   django.db.models.functionsr   r	   r
   webapp.modelsr   r   r   r   webapp.commonr   r   django.db.modelsr   r   r   django.core.paginatorr   r   r   r   r   r   r   r   r   django.views.decorators.csrfr   django.views.decorators.httpr   django.core.files.storager   django.core.files.baser   docxr    rV   PyPDF2r!   ior"   r   PILr#   	pdf2imager$   pdf2docxr%   r&   rS   django.confr'   r`   django.utils.textr(   webapp.models.koleksir)   r*   r   r+   r,   webapp.utilsr-   django.contribr.   r/   rD   rz   r   r   r   r   r   r   r   r   r   r  r  r!  r.  rB   rB   rB   rC   <module>   s   ' 
#

C