o
    h1                     @   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 d dlmZ d d	lmZ d dlZd d
lmZ d dlZd dlmZ d dlZd dlmZ d dlmZmZmZ ddddddddZddddddddddd d!d"Z d#d$ Z!d<d%d&Z"d=d(d)Z#d*d+ Z$	 G d,d- d-Z%d.d/ Z&ddddddddddd d!d0Z'd1d2 Z(d3d$ Z!d4d5 Z)d6d7 Z*ej+fd8d9Z,ej+fd:d;Z-dS )>    N)now)
connection)settings   )master)dump)intcomma)AuditLogconvert)convert_from_pathDocumentImage	ImageDraw	ImageFontMingguSeninSelasaRabuKamisJumatSabtu)SunMonTueWedThuFriSatJanuariFebruariMaretAprilMeiJuniJuliAgustus	SeptemberOktoberNovemberDesember)JanFebMarAprMayJunJulAugSepOctNovDecc                  C   sr   t j  } | d}| d}| d}| d}|d t|  d | }|dkr+d}t| d | }|||d	S )
N%a%d%b%Y Jumr   , )tgl_lengkaptglblntahun
tahunsaikidatetimer   strftime	monthListdayList)r   haritanggalbulanrB   rA   r@    rK   0/var/www/html/mfile_papteng_new/webapp/common.py
update_tgl.   s   




rM   c                 C   s   | d u r	t j  } |  S N)rD   r   	isoformat)daterK   rK   rL   dateISO:   s   
rQ   %Y-%m-%d %H:%M:%Sc                 C   s    | d u r	t j  } t j | |S rN   )rD   r   rE   )rP   formatrK   rK   rL   dateFormatted?   s   
rT   c              
      sr   t | j  tdd}tjrt } d r fddtj_	tj tj
 |tjjdddd	tjjddd
d	dS )Nz%Y-%m-%d %H)rS   sess_is_authc                    s   t jj| d  d  d dS )Npkpk_roles)menus_pkroles_pkusers_pk)m_masterAccess_menus_validate)menusession_currentrK   rL   <lambda>M   s
    z$template_variables.<locals>.<lambda>r   theadbar)	pk_parent_is_typesidebar)debugr`   settings_defaultdate_unique_currentlayout_headbarlayout_sidebar)dictsessionitemsrT   r   DEBUGrQ   r[   Menus_recursive_validateSettings_default
_recursive)requestrj   rK   r_   rL   template_variablesE   s   
rw   c                   @   sL   e Zd Zg ddfddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dS )query_00NTc                 C   s&   || _ || _|| _|| _t | _d S rN   )db_sqldb_stmtdb_name
db_preparer   cursorquery)selfry   rz   r{   r|   rK   rK   rL   __init__h   s
   zquery_00.__init__c                 C   sX   | j r| j| j| j n| j| j | jr'| jjr'dd | jjD | _| S g | _| S )Nc                 S      g | ]}|j qS rK   )name).0frK   rK   rL   
<listcomp>u       z&query_00.__enter__.<locals>.<listcomp>)r|   r~   executery   rz   descriptionfieldsr   rK   rK   rL   	__enter__q   s   "zquery_00.__enter__c                 C   s   | j r
| j   d S d S rN   )r~   close)r   exc_type	exc_value	tracebackrK   rK   rL   __exit__|   s   zquery_00.__exit__c                 C   s   t t| j|S rN   )rm   zipr   r   entryrK   rK   rL   keyvalue   s   zquery_00.keyvaluec                 c   s    | j D ]}| |V  qd S rN   )r~   r   r   rK   rK   rL   result   s   zquery_00.resultc                 C   s    | j  }|d u rd S | |S rN   )r~   fetchoner   r   rK   rK   rL   
result_one   s   
zquery_00.result_onec                 C   s   dd |   D S )Nc                 S   s   g | ]}|qS rK   rK   )r   brK   rK   rL   r      s    z'query_00.result_all.<locals>.<listcomp>)r   r   rK   rK   rL   
result_all   s   zquery_00.result_all)
__name__
__module____qualname__r   r   r   r   r   r   r   rK   rK   rK   rL   rx   g   s    	rx   c                 C   s.   t t| d} dtt| d|  dd  f S )N   zRp. %s%sz%0.2f)roundfloatr   int)nominalrK   rK   rL   currency   s    r   )010203040506070809101112c                 C   s.   |  d}|d d t|d   d |d  S )N-r   r=   r   r   )splitarrBulan)tglpecahrK   rK   rL   tgl_indo   s   
$r   c                  C   s   t j  } | d}| d}| d}| d}| d}| d}| d}|d t|  d | }|d	 t|  d	 | d	 | d	 | d	 | }	|d
krRd}t| d | }
|
|||	dS )Nr9   r:   r;   r<   z%Hz%Mz%Sr=    r>   r   r?   )r@   rA   rB   tgldetikrC   )r   rH   rI   rJ   rB   jammenitdetikrA   r   r@   rK   rK   rL   rM      s   







0c              
   C   sn   t d|||| z| jd}tjj|||||t d W d S  ty6 } zt d| W Y d }~d S d }~ww )Nu   📣 log_activity dipanggil:rV   )user_idactioncontent_type	object_pkr   	timestampu   ❌ Gagal mencatat log:)printrn   getr	   objectscreater   	Exception)rv   r   r   r   r   r   erK   rK   rL   log_activity   s   
r   c              
   C   s   t jtj| }| dsdS z t|}|	d}|
 }|d }t j|s/|| |W S  tyI } ztd| W Y d}~dS d}~ww )zp
    Convert halaman pertama PDF ke PNG thumbnail.
    rel_path: path relatif seperti '2025/07/30/file.pdf'
    .pdfNr   .pngu    ❌ Gagal membuat thumbnail PDF:)ospathjoinr   FILE_DIRlowerendswithfitzopen	load_page
get_pixmapexistssaver   r   )rel_pathpdf_full_pathdocpagepixoutput_pathr   rK   rK   rL   create_thumbnail   s    



r   c                 C   sX   |d |  }|  d}t|}|d}| }|d |  d }|| d| d S )N/r   r   r   u   Convert Berhasil r   )r   r   r   r   r   r   )pdf	file_pathpdffileimg_namer   r   r   outputrK   rK   rL   create_thumbnail_surat   s   



r   c                 C   s  t j|| }t j|\}}|d }|d }zVt jdkr<dd l}|  zddlm} ||| W |	  n!|	  w t
jdddd	d
t j||gdd t j|sXtdt|}	|	d}
|
 }|| |W S  ty } ztd|  td z^ddlm} ddlm}m}m} ||}	ddd |	jd d D }|jdddd}||}z|dd}W n   |  }Y |j!d|d|dd td | || |W W  Y d }~S  ty } ztd!|  W Y d }~W Y d }~d S d }~ww d }~ww )"Nr   r   ntr   r
   sofficez
--headlessz--convert-tor   z--outdirT)checkzLibreOffice gagal membuat PDFu7   ⚠️ Gagal membuat thumbnail Word dengan metode PDF: u2   ➡️ Coba fallback pakai python-docx + Pillow...r   r   
c                 S   r   rK   )text)r   prK   rK   rL   r     r   z)create_thumbnail_word.<locals>.<listcomp>   RGB)iX  i   white)colorz//usr/share/fonts/truetype/dejavu/DejaVuSans.ttf   )(   r   black   )fillfontspacingu   ➡️ Simpan thumbnail di:u#   ❌ Gagal fallback thumbnail Word: )"r   r   r   splitextr   	pythoncomCoInitializedocx2pdfr   CoUninitialize
subprocessrundirnamer   RuntimeErrorr   r   r   r   r   r   r   docxr   PILr   r   r   
paragraphsnewDrawtruetypeload_defaultmultiline_text)r   r   	full_pathbase_pdf_pathpng_pathr   r   r   r   r   r   r   r   r   r   r   imgdrawr   e2rK   rK   rL   create_thumbnail_word   sd   







r  rN   )NrR   ).r   pprintrD   django.utils.timezoner   	django.dbr   django.confr   modelsr   r[   funcr   -django.contrib.humanize.templatetags.humanizer   webapp.models.masterr	   r   r   r   sys	pdf2imager   r   r   r   r   r   r   r   rG   rF   rM   rQ   rT   rw   rx   r   r   r   r   r   r   r   r  rK   rK   rK   rL   <module>   sj   



'
