o
    {g$V                     @   s  d dl Z 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m	Z	m
Z
 d dlmZ 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mZ d d	l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# 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/m0Z0 dd Z1dd Z2e edd Z3edd Z4edd Z5d"ddZ6d"d d!Z7dS )#    N)BytesIO)TemporaryDirectory)Image	ImageDraw	ImageFont)datetime)messages)login_required)IntegrityErrortransaction)HttpResponse)redirectrender)timezone)csrf_exempt)require_POST)A4letter)ImageReader)canvas)api_view)	CustomersCompanyUserBatchCompany)Categoryc                 C   s   t jj| d dkS )Nqr_coder   )r   objectsfiltercount)new_id r"   7/var/www/rescue_company/qr_manager/views/qr_genrator.pyis_id_unique_in_database   s   r$   c                    sx   | d u rd} |d u rd}t jt j  t }t||k r8d fddt| D }t|r2|| t||k st	|S )N       c                 3   s    | ]}t  V  qd S )N)secretschoice).0_
charactersr"   r#   	<genexpr>.   s    z&generate_unique_ids.<locals>.<genexpr>)
stringascii_lettersdigitssetlenjoinranger$   addlist)lengthr    
unique_idsr!   r"   r,   r#   generate_unique_ids#   s   
r:   c           .         sn  zz	| j jjd }W n ty# } zt|d d}W Y d }~nd }~ww t| jdd}t| jdd}| jdd }|rFtj	j|d	}| jd
d}| jdd}| jdd}	|	dkrv|dkrv|
 dkrvtj| ddd tdW S | jdd }
|stj| ddd tdW S |stj| ddd tdW S |stj| ddd tdW S ||krtj| ddd tdW S W n ty   tj| ddd td Y S w zt||}W n# ty } ztj| dt| dd tdW  Y d }~S d }~ww | j }z)tj	j|||||d |
r|
 _   t jt|jj  _    jr9|j j j7  _|j  t  g }|D ]}z|| }tjdtjjddd }|| |j d!d" |j!||d#}|"d$}z| j jj#}W n ty } zt|d d }W Y d }~nd }~ww |r7zt$%|}|j&d% d& }|'||ft$j(}|j)| d' }|j*| d' }|dkrt$+d(|j&d)}t,-|}|j.|||| || gd%d* |/d+}t$0|t$+d(|j&d%|}|1| t,-|}nt,-|}|j.|||| || g|d* |j2|||f|j3d$kr|nd d, W n ty6 } ztd-|  W Y d }~nd }~ww d.}d/}t45||}d0}|j6d1||d2}|d' |d%  }|d3 |d  } d4}!|j*}"|"|! |  }#|"|  d5 }$t7|j)|d6 }%|dkrt$+d$|%|$fd7}&n	t$+d$|%|$f|}&|$|# d' }'|%|j) d' }(|'})|&j2||(|)f|j3d$kr|nd d, t,-|&}|%| d' }*|"|) |! d8 }+|j8|*|+f|||d9 |&}	 t9 },|j|,d:d; |,:d% |;||,< f W qC ty } z#t| tj| d<| dd tdW  Y d }~  W  d    W S d }~ww W d    n	1 s$w   Y  W nA t=yI } ztj| d=dd tdW  Y d }~S d }~w tyk } zt| tj| d>dd tdW  Y d }~S d }~ww z't>j	? fd?d@|D  |	dkrt@| }-|-W S |	dkrtA| }-|-W S  ty } zt| tj| dAdd tdW  Y d }~S d }~ww )BN/	exceptionhttp://rescuescanner.in/r8      r    r&   category)pkcolorblackbgcolortransparentdownload_optionzippdfz#ffffffz$Please select color other than whitedanger
extra_tags/qr_generator
batch_namezPlease select a categoryzPlease select a colorz Please select a background colorz-Color and background color cannot be the samezInvalid length or count valuezError generating unique IDs: )
created_byr    r?   rA   rC      
   versionerror_correctionbox_sizeborderTfit
fill_color
back_colorRGBAr   r%      L   )fillAmaskError adding logo: z>/var/www/rescue_company/static/TTSupermolotNeue-CondBoldIt.ttf#   z!SCAN CODE IN CASE OF AN EMERGENCYr   r   font      <   (   r   r   r   r      rf   r^   PNGformatz1)Error creating QR code for zDatabase error occurredzUnexpected error occurredc                    s   g | ]
\}}t | d qS ))r   batch)r   )r*   coder+   	new_batchr"   r#   
<listcomp>  s    z$generate_qr_code.<locals>.<listcomp>Error creating PDF or ZIP)Busercompanyredirect_url	ExceptionprintintPOSTgetr   r   lowerr   errorr   
ValueErrorr:   strr   createrL   saver    cost_per_qr_codeqr_generation_pricetotal_amountr   atomicqrcodeQRCode	constantsERROR_CORRECT_Hadd_datamake
make_imageconvert
logo_on_qrr   opensizeresizeLANCZOSwidthheightnewr   Drawellipse
getchannel	compositeputalphapastemoder   truetypetextbboxmaxtextr   seekappendgetvaluer
   r   bulk_createcreate_pdf_with_qr_codescreate_zip_with_qr_codes).requestBASE_URLer8   r    category_idr?   rA   rC   rE   rL   unique_hash_codesrw   
list_of_qrunique_hash_codeurlqrimgr   logo	logo_sizexposypostransparent_areadrawqr_alpha	font_path	font_sizerf   text_below_qr	text_bbox
text_widthtext_heightpadding	qr_heighttotal_block_heightcanvas_heightcanvas_widthr   vertical_offsetqr_xqr_ytext_xtext_ybuffereddownload_responser"   rs   r#   generate_qr_code5   sP  
















(
$

{ 



r   c                 C   sp  |sd}g }t jj|d}tjj|d}dd |D }|D ]}zz	| jjjd }W n tyB }	 zt	|	d d}W Y d }	~	nd }	~	ww || }
t
jd	t
jjd
d	d}||
 |jdd |j|j|jd}|d}|jdkr}tdt|jd fd}ntdt|jd f|j}||d t|}t }|jd||d}|j|d  d }|j|d  d }|j||f|||jd t  }|j!|dd |"d |#||$ f W q ty }	 zt	|	d t%j&| ddd t'd W  Y d }	~	  S d }	~	ww z|dkrt(||}|W S |d!krt)||}|W S  ty7 }	 zt%j&| d"dd t'd W  Y d }	~	S d }	~	ww )#NrG   id)rq   c                 S      g | ]}|j qS r"   r   r*   customerr"   r"   r#   ru         z"download_batch.<locals>.<listcomp>r;   r<   r=   rN   rO   rP   TrU   rW   rZ   rD   2   rk   rd   re   r[   rg      rm   rn   ro   r   r   Error creating QR coderH   rI   rK   rF   rv   )*r   r   r~   r   r   rw   rx   ry   rz   r{   r   r   r   r   r   r   r   rA   rC   r   r   r   	img_widthr   r   r   r   r   load_defaultr   r   r   r   r   r   r   r   r   r   r   r   r   )r   batch_idrE   r   rq   all_customersr   r   r   r   r   r   r   r   rf   r   xyr   r   r"   r"   r#   download_batch  st   










r   c                 C   s  |sd}g }t jj|d}t|dkr|d j}ntj| ddd tdS dd	 |D }z7|D ]1}zz	| jj	j
d
 }W n tyW }	 zt|	d d}W Y d }	~	nd }	~	ww || }
tjdtjjddd}||
 |jdd |j|j|jd}|d}zd}W n ty }	 zt|	d d }W Y d }	~	nd }	~	ww |rz6t|}|jd d }|||ftj}|j| d }|j| d }|j|||f|jdkr|nd d W n ty }	 ztd|	  W Y d }	~	nd }	~	ww t !|}t"# }|j$d||d}|j|d  d }|j|d  d }|j%||f|||jd t& }|j'|dd |(d |)||* f W q0 tyb }	 zt|	d tj| d | dd tdW  Y d }	~	  W S d }	~	ww W n$ ty }	 zt|	d tj| d!dd tdW  Y d }	~	S d }	~	ww z$|dkrt+||d"|d j,}|W S |d#krt-||d"|d j,}|W S  ty }	 ztj| d$dd tdW  Y d }	~	S d }	~	ww )%NrG   r   r   zError downloading QR coderH   rI   rK   c                 S   r   r"   r   r   r"   r"   r#   ru   e  r   z*download_individual_qr.<locals>.<listcomp>r;   r<   r=   rN   rO   rP   TrU   rW   rZ   zVhttps://rescuescanner.in/media/media/static/user_profile_image/customer_12_524RtOM.jpgr[   r`   rb   rd   re   rg   r   rm   rn   ro   r   zError creating QR code for r   
individualrF   rv   ).r   r   r   r3   rq   r   r   r   rw   rx   ry   rz   r{   r   r   r   r   r   r   r   rA   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   cust_idrE   r   r   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   rf   r   r   r   r   r   r"   r"   r#   download_individual_qrW  s   





&


E


r   c                 C   s   t dd}|dkrd| d|d< n	d|j d|d< tj|td}t\}}t| D ].\}\}	}
|dkr8|  t|
}t|}|	 \}}|j
||| d	 || d	 ||d
 q*|  |S )Nzapplication/pdfcontent_typer   attachment; filename="qr_codes_z.pdf"Content-Disposition)pagesizer   r[   )r   r   )r   batch_numberr   Canvasr   	enumerateshowPager   r   getSize	drawImager   )r   rt   	called_byr   responsecr   r   ir   img_datar   r   r   
img_heightr"   r"   r#   r     s   
&r   c           
      C   s   t  }t|dtj}| D ]\}}| d}||| qW d    n1 s)w   Y  |d t|dd}	|dkrGd| d|	d	< |	S d|j d|	d	< |	S )
Nwz.pngr   zapplication/zipr   r   r   z.zip"r   )	ior   zipfileZipFileZIP_DEFLATEDwritestrr   r   r   )
r   rt   r   r   
zip_bufferzipfr   r   img_filenamer   r"   r"   r#   r     s   

r   )NN)8r   osr(   r   r   tempfiler   PILr   r   r   r   r   randomr/   django.contribr   django.contrib.auth.decoratorsr	   	django.dbr
   r   django.httpr   django.shortcutsr   r   django.utilsr   django.views.decorators.csrfr   django.views.decorators.httpr   reportlab.lib.pagesizesr   r   reportlab.lib.utilsr   reportlab.pdfgenr   rest_framework.decoratorsr   accounts.modelsr   r   r   r   qr_manager.modelsr   r$   r:   r   r   r   r   r   r"   r"   r"   r#   <module>   sJ     ^
B

f