Ë
    âZ-hí   ã                   ó   — 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	m
Z
mZmZmZmZmZ d dl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  G d„ dej:                  «      Z G d„ dej:                  «      Z G d„ dej:                  «      Z  G d„ dej:                  «      Z! G d„ dej:                  «      Z" G d„ dej:                  «      Z#y)é    )Úmodels)Ú
ColorField)Úformat_htmlN)ÚStyledPilImage)ÚSquareModuleDrawerÚGappedSquareModuleDrawerÚCircleModuleDrawerÚRoundedModuleDrawerÚVerticalBarsDrawerÚHorizontalBarsDrawer)ÚSolidFillColorMask)ÚBytesIO)ÚRichTextField)Úgettext_lazyc                   óø   — e Zd Z ej                  «       Z ej                  d¬«      Z ej                  dd¬«      Z	 ej                  d¬«      Z ej                  dd¬«      Z ej                  dd¬«      Zd„ Zy	)
ÚFeedbackT)Úblankéd   )Ú
max_lengthr   ©Úauto_now_addéÿ   ©r   Únullc                 ó@   — | j                   › d| j                  xs d› �S )Nz	 stars - Ú	Anonymous)ÚratingÚcontact©Úselfs    ú+/var/www/skyplay_api_hub/feedback/models.pyÚ__str__zFeedback.__str__   s!   € Ø—+‘+�˜i¨¯©Ò(C¸Ð'DÐEÐEó    N)Ú__name__Ú
__module__Ú__qualname__r   ÚPositiveSmallIntegerFieldr   Ú	TextFieldÚcommentÚ	CharFieldr   ÚDateTimeFieldÚsubmitted_atÚreferrerÚGenericIPAddressFieldÚ
ip_addressr"   © r#   r!   r   r      sx   „ Ø-ˆV×-Ñ-Ó/€FØˆf×Ñ TÔ*€GØˆf×Ñ¨#°TÔ:€GØ'�6×'Ñ'°TÔ:€LØˆv×Ñ¨3°dÔ;€HØ-�×-Ñ-°D¸tÔD€JóFr#   r   c                   ó6  — e Zd Zg d¢Zg d¢Z G d„ d«      Z ej                  d¬«      Z ej                  «       Z
 ej                  dd¬	«      Z ed
d¬	«      Z edd¬	«      Z ej                  ded¬«      Z ej                  ded¬«      Zd„ Zd„ Zde_        y)ÚQRcodeGenerate)©ÚsquareÚSquare)Úgapped_squarezGapped Square©ÚcircleÚCircle©ÚroundedÚRounded)Úvertical_barszVertical Bars)Úhorizontal_barszHorizontal Bars)r3   r7   r:   c                   ó   — e Zd ZdZdZy)úQRcodeGenerate.MetazQR Code GenerateN©r$   r%   r&   Úverbose_nameÚverbose_name_pluralr0   r#   r!   ÚMetar@   2   s   „ Ø)ˆØ0Ñr#   rD   r   ©r   é
   zSize of each box in the QR code)ÚdefaultÚ	help_textz#000000zColor of the QR codez#FFFFFFzBackground color of the QR codeé   r4   )r   ÚchoicesrG   c                 óN   ‡— ‰j                  d«      Št        ˆfd„dD «       «      S )z&Convert hex color string to RGB tuple.ú#c              3   óB   •K  — | ]  }t        ‰||d z    d«      –— Œ y­w)é   é   N)Úint)Ú.0ÚiÚ	hex_colors     €r!   ú	<genexpr>z,QRcodeGenerate.hex_to_rgb.<locals>.<genexpr>A   s#   øè ø€ ÒB°1”S˜ 1 Q q¡SÐ)¨2×.ÑBùs   ƒ)r   rN   é   )ÚlstripÚtuple)r    rS   s    `r!   Ú
hex_to_rgbzQRcodeGenerate.hex_to_rgb>   s$   ø€ à×$Ñ$ SÓ)ˆ	ÜÓB¸	ÔBÓBÐBr#   c           	      ór  — t        «       t        «       t        «       t        «       t	        «       t        «       dœ}t        «       t        «       t        «       dœ}t        j                  dt        j                  j                  | j                  d¬«      }|j                  | j                  «       |j                  d¬«       | j                  | j                  «      }| j                  | j                   «      }|j#                  t$        |j'                  | j(                  t        «       «      |j'                  | j*                  t        «       «      t-        ||¬«      ¬	«      }t/        «       }|j1                  |d
¬«       t3        j4                  |j7                  «       «      j9                  «       }t;        d||«      S )N)r4   r6   r8   r;   r=   r>   )r4   r8   r;   é   rU   )ÚversionÚerror_correctionÚbox_sizeÚborderT)Úfit)Ú
back_colorÚfront_color)Úimage_factoryÚmodule_drawerÚ
eye_drawerÚ
color_maskÚPNG)ÚformataÍ  
            <img src="data:image/png;base64,{}" width="150" height="150" id="qr-image"/>
            <br/>
            <a href="data:image/png;base64,{}" download="qr_code.png">
                <button type="button">Download QR Code</button>
            </a>
            <button type="button" onclick="printQRCode()">Print QR Code</button>
            <script>
                function printQRCode() {{
                    var img = document.getElementById('qr-image');
                    var w = window.open();
                    w.document.write('<img src="' + img.src + '" onload="window.print();window.close()" />');
                    w.document.close();
                }}
            </script>
            )r   r   r	   r
   r   r   ÚqrcodeÚQRCodeÚ	constantsÚERROR_CORRECT_HÚqr_sizeÚadd_dataÚurlÚmakerX   Úqr_colorÚqr_backgroundÚ
make_imager   Úgetrc   rd   r   r   ÚsaveÚbase64Ú	b64encodeÚgetvalueÚdecoder   )	r    Úmodule_drawer_mappingÚeye_drawer_mappingÚqrra   r`   ÚimgÚbufferÚimg_strs	            r!   Úqr_codezQRcodeGenerate.qr_codeC   se  € ô )Ó*Ü5Ó7Ü(Ó*Ü*Ó,Ü/Ó1Ü3Ó5ñ!
Ðô )Ó*Ü(Ó*Ü*Ó,ñ
Ðô �]‰]ØÜ#×-Ñ-×=Ñ=Ø—\‘\Øô	
ˆð 	�‰�D—H‘HÔØ
�‰�DˆÔð —o‘o d§m¡mÓ4ˆØ—_‘_ T×%7Ñ%7Ó8ˆ
à�m‰mÜ(Ø/×3Ñ3°D×4FÑ4FÔHZÓH\Ó]Ø)×-Ñ-¨d¯o©oÔ?QÓ?SÓTÜ)°ZÈ[ÔYð	 ó 
ˆô “ˆØ�‰� ˆÔ&Ü×"Ñ" 6§?¡?Ó#4Ó5×<Ñ<Ó>ˆäðð  Øó%
ð 	
r#   zQR CodeN)r$   r%   r&   ÚMODULE_DRAWER_CHOICESÚEYE_DRAWER_CHOICESrD   r   r*   ÚnameÚURLFieldrn   ÚPositiveIntegerFieldrl   r   rp   rq   rc   rd   rX   r   Úshort_descriptionr0   r#   r!   r2   r2   "   s³   „ òÐòÐ÷1ñ 1ð ˆ6×Ñ sÔ+€DØ
ˆ&�/‰/Ó
€CØ)ˆf×)Ñ)°"Ð@aÔb€GÙ )Ð7MÔN€HÙ yÐ<]Ô^€MØ$�F×$Ñ$°Ð<QÐ[cÔd€MØ!�×!Ñ!¨RÐ9KÐU]Ô^€JòCò
<
ð| !*€GÕr#   r2   c                   óà   — e Zd Z ej                  d¬«      Z ej                  dd¬«      Z ej                  d¬«      Z ej                  dd¬«      Z
 ej                  d¬	«      Zd
„ Zd„ Zd„ Zy)ÚFaceProfiler   rE   rI   T©r   Úuniquezfaces/)Ú	upload_tor   r   c                 óT   — t        j                  |j                  «       «      | _        y ©N)ÚjsonÚdumpsÚtolistÚface_encoding)r    Úencoding_arrays     r!   Úset_encodingzFaceProfile.set_encoding‹   s   € Ü!ŸZ™Z¨×(=Ñ(=Ó(?Ó@ˆÕr#   c                 ó€   — | j                   r2t        j                  t        j                  | j                   «      «      S y rŒ   )r�   ÚnpÚarrayr�   Úloadsr   s    r!   Úget_encodingzFaceProfile.get_encodingŽ   s,   € Ø×ÒÜ—8‘8œDŸJ™J t×'9Ñ'9Ó:Ó;Ð;Ør#   c                 ó   — | j                   S rŒ   )r‚   r   s    r!   r"   zFaceProfile.__str__“   s   € Ø�y‰yÐr#   N)r$   r%   r&   r   r*   r‚   Úphone_numberÚ
ImageFieldÚ
face_imager(   r�   r+   Ú
created_atr’   r—   r"   r0   r#   r!   r‡   r‡   „   sp   „ Øˆ6×Ñ sÔ+€DØ#�6×#Ñ#¨r¸$Ô?€LØ"�×"Ñ"¨XÔ6€JØ$�F×$Ñ$¨4°dÔ;€MØ%�×%Ñ%°4Ô8€JòAòó
r#   r‡   c                   ól  — e Zd Z ej                  ddddd ed«      ¬«      Z ej                  ddd ed«      ¬«      Z ej                  dej                  d	ddd ed
«      ¬«      Z ej                  ddd ed«      ¬«      Z ej                  ddddd ed«      ¬«      Zd„ Zd„ Zd„ Z G d„ d«      Zy)ÚChatCategoryr   TNzCategory Name)r   r‰   r   r   rG   rB   ÚDescription)r   r   rG   rB   r    ÚsubcategorieszParent Category)Ú	on_deleteÚrelated_namer   r   rG   rB   z	Is Active)rG   r   r   rB   é2   zCategory Codec                 óN   — | j                   rdnd}| j                  xs d› d|› d�S )NÚActiveÚInactivezUnnamed Categoryz (ú))Ú	is_activer‚   )r    Ústatuss     r!   r"   zChatCategory.__str__¾   s-   € Ø!Ÿ^š^‘°ˆØ—)‘)Ò1Ð1Ð2°"°V°H¸AÐ>Ð>r#   c                 ó6   — | j                   j                  «       S rŒ   )r    Úallr   s    r!   Úget_childrenzChatCategory.get_childrenÂ   s   € Ø×!Ñ!×%Ñ%Ó'Ð'r#   c                 ó   — | j                   d u S rŒ   )Úparentr   s    r!   Úis_rootzChatCategory.is_rootÅ   s   € Ø�{‰{˜dÐ"Ð"r#   c                   ó,   — e Zd Z ed«      Z ed«      Zy)úChatCategory.MetazChat CategoryzChat CategoriesN)r$   r%   r&   Ú_rB   rC   r0   r#   r!   rD   r±   È   s   „ Ù˜Ó)ˆÙÐ 1Ó2Ñr#   rD   )r$   r%   r&   r   r*   r²   r‚   r(   ÚdescriptionÚ
ForeignKeyÚCASCADEr®   ÚBooleanFieldr¨   Úcoder"   r¬   r¯   rD   r0   r#   r!   rž   rž   —   së   „ Øˆ6×ÑØØØØØÙ�Ó'ô€Dð #�&×"Ñ"ØØØÙ�}Ó%ô	€Kð ˆV×ÑØØ—.‘.Ø$ØØØÙÐ(Ó)ô€Fð $�×#Ñ#ØØØÙ�{“^ô	€Ið ˆ6×ÑØØØØØÙ�Ó'ô€Dò?ò(ò#÷3ò 3r#   rž   c                   óÆ   — e Zd Z ej                  dd¬«      Z e«       Z ej                  dej                  dddd¬«      Z
 ej                  d¬«      Zd	„ Z G d
„ d«      Zy)ÚPredefinedQAr   Trˆ   rž   Úpredefined_qaÚCategory)r¡   r   r   r¢   rB   ©rG   c                 ó   — | j                   S rŒ   )Úquestionr   s    r!   r"   zPredefinedQA.__str__Û   s   € Ø�}‰}Ðr#   c                   ó   — e Zd ZdZdZy)úPredefinedQA.MetazChat Botz	Chat BotsNrA   r0   r#   r!   rD   rÀ   Þ   s   „ Ø!ˆØ)Ñr#   rD   N)r$   r%   r&   r   r*   r¾   r   Úanswerr´   ÚSET_NULLÚcategoryr¶   Úactiver"   rD   r0   r#   r!   r¹   r¹   Ì   sh   „ Øˆv×Ñ¨3°tÔ<€HÙ‹_€Fà ˆv× Ñ ØØ—/‘/ØØØ$Øô€Hð !ˆV× Ñ ¨Ô.€Fò÷*ò *r#   r¹   c                   ó  — e Zd Z ej                  d¬«      Z ej                  dd¬«      Z ej                  ddd¬«      Z ej                  dd¬«      Z	 ej                  d	¬
«      Z ej                  d¬«      Zd„ Zd„ Zy)ÚChatLogr   rE   Tr   rI   )r   r   r   r£   rˆ   z[]r¼   )Úauto_nowc                 ód   — 	 t        j                  | j                  «      S # t        $ r g cY S w xY wrŒ   )r�   r–   ÚconversationÚ	Exceptionr   s    r!   Úget_conversationzChatLog.get_conversationì   s0   € ð	Ü—:‘:˜d×/Ñ/Ó0Ð0øÜò 	ØŠIð	ús   ‚! ¡/®/c                 ó:   — d| j                   › d| j                  › �S )Nz
Chat from z at )Ú	user_nameÚ	timestampr   s    r!   r"   zChatLog.__str__ò   s   € Ø˜DŸN™NÐ+¨4°·±Ð/?Ð@Ð@r#   N)r$   r%   r&   r   r*   rÍ   Ú
EmailFieldÚ
user_emailÚ
user_phoneÚ
session_idr(   rÉ   r+   rÎ   rË   r"   r0   r#   r!   rÆ   rÆ   ä   s�   „ Ø �× Ñ ¨CÔ0€IØ"�×"Ñ"¨°DÔ9€JØ!�×!Ñ!¨R°tÀ$ÔG€JØ!�×!Ñ!¨R¸Ô=€JØ#�6×#Ñ#¨DÔ1€LØ$�×$Ñ$¨dÔ3€IòóAr#   rÆ   )$Ú	django.dbr   Úcolorfield.fieldsr   Údjango.utils.htmlr   rh   Úqrcode.image.styledpilr   Ú!qrcode.image.styles.moduledrawersr   r   r	   r
   r   r   Úqrcode.image.styles.colormasksr   Úior   ru   r�   Únumpyr”   Úckeditor.fieldsr   Údjango.utils.translationr   r²   ÚModelr   r2   r‡   rž   r¹   rÆ   r0   r#   r!   ú<module>rÞ      s�   ðå Ý (Ý )Û Ý 1÷÷ õ >Ý Û Û Û Ý )Ý 6ô	Fˆv�|‰|ô 	Fô_*�V—\‘\ô _*ôD�&—,‘,ô ô&33�6—<‘<ô 33ôj*�6—<‘<ô *ô0Aˆf�l‰lõ Ar#   