Ë
    •@Öi;G  ã                   óâ  — 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
 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Z G d„ dee«      Z G d„ dej8                  «      Z G d„ dej8                  «      Z G d„ dej8                  «      Z G d„ dej8                  «      Z  G d„ dej8                  «      Z! G d„ dej8                  «      Z" G d„ dej8                  «      Z#d„ Z$d„ Z% G d„ dej8                  «      Z& G d „ d!ej8                  «      Z' G d"„ d#ej8                  «      Z( G d$„ d%ej8                  «      Z) G d&„ d'ej8                  «      Z* G d(„ d)ej8                  «      Z+y)*é    )Úmodels)ÚAbstractBaseUserÚBaseUserManagerÚPermissionsMixinÚAbstractUser)ÚValidationError)ÚSum)ÚMaxValueValidatorÚMinValueValidator)Úgettext_lazy)ÚAccountManager)ÚImage)ÚBytesIO)ÚInMemoryUploadedFileNc                   ó   — e Zd Z ej                  dddd¬«      Z ej                  dddd¬«      Z ej                  ddd¬«      Z ej                  d	dd¬
«      Z
ej                  j                  dddd¬«      Zej                  j                  dddd¬«      Zg d¢Zej                  j                  ded¬«      Zej                  j                  dddd¬«      Zg d¢Zej                  j                  ded¬«      Z ej&                  dd¬«      Z ej&                  dd¬«      Z ej,                  d¬«      Z ej,                  d¬«      Z ej,                  d¬«      Z ej,                  d¬«      Z e«       ZdZdgZd„ Zy )!ÚUserAccountzemail addressé–   TF)Ú
max_lengthÚuniqueÚnulléÿ   )r   r   Úblankr   ©r   r   r   zdate of birth)Úverbose_namer   r   zTelephone numberÚ )r   r   r   ÚdefaultÚAdress))ÚMaler   )ÚFemaler   )ÚOtherr    é   r   ©r   Úchoicesr   ÚPicture)r   r   r   r   ))Úusersr%   )Ú	personnelr&   )ÚstaffÚStaffé2   r%   Údate_joined)r   Úauto_now_addz
last login)r   Úauto_now©r   ÚemailÚtelc                 ó   — | j                   S ©N)Úfullname©Úselfs    ú /var/www/html/fnps/src/models.pyÚ__str__zUserAccount.__str__=   s   € Ø�}‰}Ðó    N) Ú__name__Ú
__module__Ú__qualname__r   Ú
EmailFieldr.   Ú	CharFieldÚusernamer2   Ú	DateFieldÚbirthdayÚfieldsr/   ÚadressÚGendÚgenderÚpictureÚtypeÚ
typecompteÚDateTimeFieldr*   Ú
last_loginÚBooleanFieldÚis_adminÚ	is_activeÚis_staffÚis_superuserr   ÚobjectsÚUSERNAME_FIELDÚREQUIRED_FIELDSr6   © r7   r5   r   r      s   „ à%�F×%Ñ% À3ÈdÐY^Ô_€EØ$�F×$Ñ$°¸4ÀtÐRVÔW€Hà#�6×#Ñ#¨s¸ÀDÔI€Hàˆv×Ñ¨oÀ4ÈtÔT€HØ—=‘=×*Ñ*°À#ÐTfÐqsÐ*Ót€CØ—m‘m×-Ñ-°5ÀSÐW_ÐikÐ-Ól€Fò€Dð �]‰]×$Ñ$ØØØð %ó €Fð
 �m‰m×%Ñ%¨4¸CÈiÐ_cÐ%Ód€Gò€Dð —‘×(Ñ(ØØØð )ó €Jð )�F×(Ñ(°mÐQUÔV€KØ(�F×(Ñ(°lÈDÔQ€JØ'�F×'Ñ'°Ô6€HØ'�F×'Ñ'°Ô5€IØ'�F×'Ñ'°Ô6€HØ'�F×'Ñ'°Ô6€LáÓ€GØ€NØ�g€Oór7   r   c                   óô   — e Zd Z ej                  d¬«      Z ej                  «       Z ej                  d¬«      Z ej                  dd¬«      Z
 ej                  d¬«      Z ej                  d¬«      Zd„ Zy	)
ÚContactMessageéd   ©r   éÈ   T©r   r   ©r+   r-   c                 ó8   — | j                   › d| j                  › �S ©Nz - )ÚnameÚsubjectr3   s    r5   r6   zContactMessage.__str__H   s   € Ø—)‘)�˜C §¡˜~Ð.Ð.r7   N)r8   r9   r:   r   r<   r[   r;   r.   r\   Ú	TextFieldÚmessagerG   Úsent_atrI   Ú
recieptionr6   rQ   r7   r5   rS   rS   @   ss   „ Øˆ6×Ñ sÔ+€DØˆF×ÑÓ€EØˆf×Ñ¨#Ô.€GØˆf×Ñ T°Ô5€GØ"ˆf×"Ñ"°Ô5€GØ$�×$Ñ$¨TÔ2€Jó/r7   rS   c                   óB  — e Zd Z ej                  d¬«      Z ej                  «       Z ej                  d¬«      Z ej                  dd¬«      Z
 ej                  dd¬«      Z ej                  d¬«      Z ej                  d¬«      Z ej                  d¬«      Zd„ Zy	)
Útb_actualitenewsrT   rU   rV   TrW   rX   r-   c                 ó8   — | j                   › d| j                  › �S rZ   ©r[   Útitler3   s    r5   r6   ztb_actualitenews.__str__U   ó   € Ø—)‘)�˜C §
¡
˜|Ð,Ð,r7   N)r8   r9   r:   r   r<   r[   r;   Údatere   r]   ÚshortdesÚlongdesrG   ÚregdateÚupdaterI   Ústatusr6   rQ   r7   r5   rb   rb   K   s™   „ Øˆ6×Ñ sÔ+€DØˆ6×ÑÓ€DØˆF×Ñ¨Ô,€EØˆv×Ñ d°Ô6€HØˆf×Ñ T°Ô5€GØ"ˆf×"Ñ"°Ô5€GØ!ˆV×!Ñ!¨tÔ4€FØ ˆV× Ñ ¨Ô.€Fó-r7   rb   c                   ó&  — e Zd Z ej                  d¬«      Z ej                  d¬«      Z ej                  ddd¬«      Z ej                  dddd¬	«      Z	 ej                  d¬
«      Z ej                  d¬
«      Z ej                  d¬«      Zd„ Zy)Útb_eventcaterT   rU   i�  éú   Tr   ú	pictures/Ú	Picturent©Ú	upload_tor   r   r   rX   r-   c                 ó8   — | j                   › d| j                  › �S rZ   rd   r3   s    r5   r6   ztb_eventcate.__str__a   rf   r7   N)r8   r9   r:   r   r<   r[   Údescriptionre   Ú
ImageFieldrD   rG   rj   rk   rI   rl   r6   rQ   r7   r5   rn   rn   X   s�   „ Øˆ6×Ñ sÔ+€DØ"�&×"Ñ"¨cÔ2€KØˆF×Ñ¨°¸TÔB€EØˆf×Ñ¨+¸DÈ{ÐbfÔg€GØ"ˆf×"Ñ"°Ô5€GØ!ˆV×!Ñ!¨tÔ4€FØ ˆV× Ñ ¨Ô.€Fó-r7   rn   c                   óP  — e Zd Z ej                  ddd¬«      Z ej                  ddd¬«      Z ej                  ddd¬«      Z ej                  dddd¬«      Z	 ej                  d¬«      Z ej                  ddd¬«      Z ej                  ddd¬«      Z ej                  ddd¬«      Z ej                   ed	ddej$                  ¬
«      Z ej                   edddej$                  ¬
«      Z ej                   edddej$                  ¬
«      Z ej,                  ddd¬«      Zd„ Zy)Údashboardpicturer   Tr   rp   r$   rr   r-   ©r+   r   r   Ú
useriddash©Úrelated_namer   r   Ú	on_deleteÚupdauseriddashÚdeluseriddashr   ©r   r   r   c                 ó   — | j                   › S r1   ©Útextdisplay1r3   s    r5   r6   zdashboardpicture.__str__q   ó   € Ø×#Ñ#Ð$Ð%r7   N)r8   r9   r:   r   r<   rƒ   Útextdisplay2Útextdisplay3rv   rD   rI   Úf_activerG   Úhis_registration_dateÚhis_update_dateÚhis_delete_dateÚ
ForeignKeyr   ÚSET_NULLÚuseridÚupdate_useridÚdelete_useridÚIntegerFieldÚrankr6   rQ   r7   r5   rx   rx   d   sW  „ Ø'�v×'Ñ'°3¸DÈÔM€LØ'�v×'Ñ'°3¸DÈÔM€LØ'�v×'Ñ'°3¸DÈÔM€LØˆf×Ñ¨+¸DÈyÐ`dÔe€GØ"ˆv×"Ñ"¨4Ô0€HØ2˜f×2Ñ2ÀÈ4ÐW[Ô\ÐØ,˜×,Ñ,¸$ÀTÐQUÔV€OØ,˜×,Ñ,¸$ÀTÐQUÔV€OØ&�V×&Ñ& {ÀÐTXÐ`dÐpv×pÑpô  A€FØ-˜F×-Ñ-¨kÐGWÐ_cÐkoð  |B÷  |Kñ  |Kô  L€MØ-˜F×-Ñ-¨kÀÐ]aÐimÐy÷  zIñ  zIô  J€MØ!ˆf×!Ñ! t°4À!ÔD€Dó&r7   rx   c                   ó6  — e Zd Z ej                  ddd¬«      Z ej                  ddd¬«      Z ej                  eej                  ddd¬«      Z
 ej                  ddd¬«      Z ej                  dd¬«      Z ej                  dd¬«      Z ej                  dd¬«      Z ej                  dd¬«      Z ej                  dd¬«      Z ej&                  ddd	d¬
«      Z ej&                  dddd¬
«      Z ej&                  dddd¬
«      Z ej&                  dddd¬
«      Z ej&                  dddd¬
«      Z ej&                  dddd¬
«      Z ej4                  d¬«      Z ej8                  ddd¬«      Z ej8                  ddd¬«      Z ej8                  ddd¬«      Z ej                  ddddej                  ¬«      Z  ej                  ddddej                  ¬«      Z! ej                  ddddej                  ¬«      Z" ejF                  ddd¬«      Z$d„ Z%y)Útb_eventpostupdater   Tr   Úcateprojects©r}   r   r   r|   ©r   r   rW   rp   r$   rr   ÚPicture1ÚPicture2ÚPicture3ÚPicture4ÚPicture5r-   ry   Ú	UserLoginÚuseriddash1r{   Úupdauseriddash2Údeluseriddash3r   r€   c                 ó   — | j                   › S r1   r‚   r3   s    r5   r6   ztb_eventpostupdate.__str__Œ   r„   r7   N)&r8   r9   r:   r   r<   ÚreporternameÚprojectnamer‹   rn   rŒ   Úcategoryre   r>   rg   r]   rƒ   r…   r†   Útextdisplay4rv   Ú
displaypicÚpicture1Úpicture2Úpicture3Úpicture4Úpicture5rI   r‡   rG   rˆ   r‰   rŠ   r�   rŽ   r�   r�   r‘   r6   rQ   r7   r5   r“   r“   t   sk  „ Ø$�F×$Ñ$°¸ÀTÔJ€LØ&�f×&Ñ&°#¸4ÀtÔL€KØ ˆv× Ñ  ¸¿¹ÈtÐ[_Ðn|Ô}€HØ �× Ñ ¨C°TÀÔF€EØˆ6×Ñ ¨TÔ2€DØ'�v×'Ñ'¨d¸Ô>€LØ'�v×'Ñ'¨d¸Ô>€LØ'�v×'Ñ'¨d¸Ô>€LØ'�v×'Ñ'¨d¸Ô>€LØ"�×"Ñ"¨[¸tÐR[ÐcgÔh€JØ ˆv× Ñ ¨;¸TÐPZÐbfÔg€HØ ˆv× Ñ ¨;¸TÐPZÐbfÔg€HØ ˆv× Ñ ¨;¸TÐPZÐbfÔg€HØ ˆv× Ñ ¨;¸TÐPZÐbfÔg€HØ ˆv× Ñ ¨;¸TÐPZÐbfÔg€HØ"ˆv×"Ñ"¨4Ô0€HØ2˜f×2Ñ2ÀÈ4ÐW[Ô\ÐØ,˜×,Ñ,¸$ÀTÐQUÔV€OØ,˜×,Ñ,¸$ÀTÐQUÔV€OØ&�V×&Ñ& {ÀÐUYÐaeÐqw÷  rAñ  rAô  B€FØ-˜F×-Ñ-¨kÐGXÐ`dÐlpð  }C÷  }Lñ  }Lô  M€MØ-˜F×-Ñ-¨kÐGWÐ^bÐjnð  {A÷  {Jñ  {Jô  K€MØ!ˆf×!Ñ! t°4À!ÔD€Dó&r7   r“   c                   óp  — e Zd Z ej                  dd¬«      Z ej                  d¬«      Z ej                  d¬«      Z ej                  d¬«      Z ej                  dd¬«      Z
 ej                  d¬«      Z ej                  d¬	«      Z ej                  ddd¬
«      Z ej                  d¬«      Zd„ Zy)rœ   r)   T©r   r   é€   rU   rT   r–   r!   r-   r   rX   c                 ó8   — | j                   › d| j                  › �S ©NÚ )r[   Úsurnamer3   s    r5   r6   zUserLogin.__str__�   s   € Ø—)‘)�˜A˜dŸl™l˜^Ð,Ð,r7   N)r8   r9   r:   r   r<   r�   Úpasswordr[   r±   r>   ÚdateofbirthÚ	id_numberrI   rK   ÚrolerG   Úregistered_onr6   rQ   r7   r5   rœ   rœ   �   s±   „ ØˆV×Ñ¨°DÔ9€FØˆv×Ñ¨3Ô/€HØˆ6×Ñ sÔ+€DØˆf×Ñ¨#Ô.€GØ"�&×"Ñ"¨°DÔ9€KØ �× Ñ ¨BÔ/€IØ#�×#Ñ#¨DÔ1€IØˆ6×Ñ r°¸DÔA€DØ(�F×(Ñ(°dÔ;€Mó-r7   rœ   c                   ó¾  — e Zd Z ej                  ddd¬«      Z ej                  ddd¬«      Z ej                  ddd¬«      Z ej                  ddd¬«      Z ej                  ddd¬«      Z	 ej                  ddd¬«      Z
 ej                  ddd¬«      Z ej                  ddd¬«      Z ej                  dd¬«      Z ej                  dd¬«      Z ej                   dd¬«      Z ej                   dd¬«      Z ej                   dd¬«      Z ej                   dd¬«      Z ej                   dd¬«      Z ej,                  dddd¬«      Z ej,                  ddd	d¬«      Z ej,                  ddd
d¬«      Z ej,                  dddd¬«      Z ej6                  d¬«      Z ej:                  ddd¬«      Z ej:                  ddd¬«      Z ej:                  ddd¬«      Z  ejB                  e"dddejF                  ¬«      Z$ ejB                  e"dddejF                  ¬«      Z% ejB                  e"dddejF                  ¬«      Z& ejN                  ddd¬«      Z(d„ Z)y)Útb_teamsr   Tr   r–   rW   rp   r$   rr   r—   r˜   r™   r-   ry   Úuseriddash2r{   Úupdauseriddash4Údeluseriddash4r   r€   c                 ó   — | j                   › S r1   r‚   r3   s    r5   r6   ztb_teams.__str__½   r„   r7   N)*r8   r9   r:   r   r<   ÚpositionÚ
departmentÚ	staffnameÚstaffsurnameÚstaffmiddlenameÚofficeÚaddressÚregionr>   ÚdobÚdatejoinr]   rƒ   r…   r†   r¤   Útextdisplay5rv   Údpr¦   r§   r¨   rI   r‡   rG   rˆ   r‰   rŠ   r‹   rœ   rŒ   r�   rŽ   r�   r�   r‘   r6   rQ   r7   r5   r¸   r¸   ¡   s�  „ Ø �× Ñ ¨C°TÀÔF€HØ"�&×"Ñ"¨c°tÀ4ÔH€JØ$�F×$Ñ$°¸ÀTÔJ€IØ'�v×'Ñ'°3¸DÈÔM€LØ&�f×&Ñ&°#¸4ÀtÔL€OØ!�×!Ñ!¨S°dÀ$ÔG€FØˆf×Ñ¨#°4¸tÔD€GØˆV×Ñ¨°$¸dÔC€FØ
ˆ&×
Ñ
 ¨DÔ
1€CØˆv×Ñ T°Ô6€HØ'�v×'Ñ'¨d¸Ô>€LØ'�v×'Ñ'¨d¸Ô>€LØ'�v×'Ñ'¨d¸Ô>€LØ&�f×&Ñ&¨T¸Ô=€LØ'�v×'Ñ'¨d¸Ô>€LØ	ˆ×	Ñ	 [°tÈ)Ð[_Ô	`€BØ ˆv× Ñ ¨;¸TÐPZÐbfÔg€HØ ˆv× Ñ ¨;¸TÐPZÐbfÔg€HØ ˆv× Ñ ¨;¸TÐPZÐbfÔg€HØ"ˆv×"Ñ"¨4Ô0€HØ2˜f×2Ñ2ÀÈ4ÐW[Ô\ÐØ,˜×,Ñ,¸$ÀTÐQUÔV€OØ,˜×,Ñ,¸$ÀTÐQUÔV€OØ&�V×&Ñ& y¸mÐSWÐ_cÐou×o~Ño~Ô€FØ-˜F×-Ñ-¨iÐEVÐ^bÐjnð  {A÷  {Jñ  {Jô  K€MØ-˜F×-Ñ-¨iÐEUÐ\`ÐhlÐx~÷  yHñ  yHô  I€MØ!ˆf×!Ñ! t°4À!ÔD€Dó&r7   r¸   c                 óž   — g d¢}t         j                  j                  | j                  «      d   j	                  «       }||vrt        d«      ‚y )N)ú.jpgz.jpegz.pngz.gifz.webpé   zUnsupported file extension.)ÚosÚpathÚsplitextr[   Úlowerr   )ÚvalueÚvalid_extensionsÚexts      r5   Úvalidate_image_file_extensionrÓ   Â   sH   € ÚAÐÜ
�'‰'×
Ñ
˜5Ÿ:™:Ó
& qÑ
)×
/Ñ
/Ó
1€CØ
Ð"Ñ"ÜÐ;Ó<Ð<ð #r7   c                 ó<   — | j                   }|dkD  rt        d«      ‚y )Ni  P z1The maximum file size that can be uploaded is 5MB)Úsizer   )rÐ   Úfilesizes     r5   Úvalidate_image_file_sizer×   È   s$   € Ø�z‰z€HØ�/Ò!ÜÐQÓRÐRð "r7   c                   ó¦   ‡ — e Zd Z ej                  dd¬«      Z ej                  dd¬«      Z ej                  dddd¬«      Z	d„ Z
ˆ fd	„Zd
„ Zˆ xZS )ÚProjectTyperT   Tr¬   rW   zproject_types/zRecommended size: 500x500px)rs   r   r   Ú	help_textc                 ó   — | j                   S r1   )r[   r3   s    r5   r6   zProjectType.__str__×   s   € Ø�y‰yÐr7   c                 ó”   •— | j                   r,| j                  s | j                  | j                   «      | _         t        ‰| �  |i |¤Ž y r1   )ÚimageÚpkÚcompress_imageÚsuperÚsave©r4   ÚargsÚkwargsÚ	__class__s      €r5   rá   zProjectType.saveÚ   s7   ø€ à�:Š:˜dŸgšgØ×,Ñ,¨T¯Z©ZÓ8ˆDŒJÜ‰‰�dÐ%˜fÓ%r7   c           	      óÜ  — t        j                  |«      }|j                  dk7  r|j                  d«      }d}|j                  |d   kD  s|j
                  |d   kD  r |j                  |t         j                  «       t        «       }|j                  |ddd¬«       |j                  d«       t        |d	|j                  j                  d
«      d   › d�dt        j                  |«      d«      S )ú(Compress image while maintaining qualityÚRGB)éô  ré   rË   r   ÚJPEGéU   T©ÚformatÚqualityÚoptimizerv   ú.rÊ   ú
image/jpegN©r   ÚopenÚmodeÚconvertÚheightÚwidthÚ	thumbnailÚLANCZOSr   rá   Úseekr   r[   ÚsplitÚsysÚ	getsizeof©r4   rÝ   ÚimgÚmax_sizeÚoutputs        r5   rß   zProjectType.compress_imageà   sÙ   € ä�j‰j˜ÓˆØ�8‰8�uÒØ—+‘+˜eÓ$ˆCð ˆØ�:‰:˜ ™Ò# s§y¡y°8¸A±;Ò'>Ø�M‰M˜(¤E§M¡MÔ2ô “ˆØ�‰ØØØØð	 	ô 	
ð 	�‰�AŒä#ØØØ�z‰z×Ñ Ó$ QÑ'Ð(¨Ð-ØÜ�M‰M˜&Ó!Øó
ð 	
r7   )r8   r9   r:   r   r<   r[   r]   ru   rv   rÝ   r6   rá   rß   Ú__classcell__©rå   s   @r5   rÙ   rÙ   Í   sX   ø„ Øˆ6×Ñ s°4Ô8€DØ"�&×"Ñ"¨°DÔ9€KØˆF×ÑØ"ØØØ/ô	€Eòô&ö
r7   rÙ   c                   óô  ‡ — e Zd Z ej                  d¬«      Z ej                  dd¬«      Z ej                  dd e	d«      g¬«      Z
 ej                  ddd	¬
«      Z ej                  d¬«      Z ej                  d¬«      Z ej                  d¬«      Z ej"                  eej&                  ddd¬«      Z ej*                  deegddd¬«      Zd„ Zˆ fd„Zd„ Zed„ «       Zed„ «       Zd„ Zdd„Z d„ Z!ˆ xZ"S )ÚProjectrV   rU   TrW   é
   é   ç{®Gáz„?©Ú
max_digitsÚdecimal_placesÚ
validatorsç        )r
  r  r   rX   )r,   r-   Úprojectsr•   z	projects/zRecommended size: 1200x800px)rs   r  r   r   rÚ   c                 ó   — | j                   S r1   )re   r3   s    r5   r6   zProject.__str__  s   € Ø�z‰zÐr7   c                 ó¼   •— | j                   r@| j                  rd|j                  dg «      v r | j                  | j                   «      | _         t	        ‰| �  |i |¤Ž y )NÚfeatured_imageÚupdate_fields)r  rÞ   Úgetrß   rà   rá   râ   s      €r5   rá   zProject.save  sQ   ø€ à×Ò¨¯ªÐ3CÀvÇzÁzÐRaÐceÓGfÑ3fØ"&×"5Ñ"5°d×6IÑ6IÓ"JˆDÔÜ‰‰�dÐ%˜fÓ%r7   c           	      óÜ  — t        j                  |«      }|j                  dk7  r|j                  d«      }d}|j                  |d   kD  s|j
                  |d   kD  r |j                  |t         j                  «       t        «       }|j                  |ddd¬«       |j                  d«       t        |d	|j                  j                  d
«      d   › d�dt        j                  |«      d«      S )rç   rè   )i°  i   rË   r   rê   rë   Trì   rv   rð   rÊ   rñ   Nrò   rþ   s        r5   rß   zProject.compress_image  sÙ   € ä�j‰j˜ÓˆØ�8‰8�uÒØ—+‘+˜eÓ$ˆCð ˆØ�:‰:˜ ™Ò# s§y¡y°8¸A±;Ò'>Ø�M‰M˜(¤E§M¡MÔ2ô “ˆØ�‰ØØØØð	 	ô 	
ð 	�‰�AŒä#ØØØ�z‰z×Ñ Ó$ QÑ'Ð(¨Ð-ØÜ�M‰M˜&Ó!Øó
ð 	
r7   c                 ó4   — | j                   | j                  z
  S r1   ©Útarget_amountÚcurrent_amountr3   s    r5   Úremaining_amountzProject.remaining_amount6  s   € à×!Ñ! D×$7Ñ$7Ñ7Ð7r7   c                 óZ   — | j                   dk(  ry| j                  | j                   z  dz  S )Nr   rT   r  r3   s    r5   Úget_percentage_fundedzProject.get_percentage_funded:  s/   € à×Ñ Ò"ØØ×#Ñ# d×&8Ñ&8Ñ8¸CÑ?Ð?r7   c                 ó6   — | j                   j                  «       S r1   )Údonation_setÚcountr3   s    r5   Úget_donations_countzProject.get_donations_count@  s   € Ø× Ñ ×&Ñ&Ó(Ð(r7   c                 ó>   — | j                   j                  d«      d | S )Nz-donation_date)r  Úorder_by)r4   Úlimits     r5   Úget_recent_donationszProject.get_recent_donationsC  s!   € Ø× Ñ ×)Ñ)Ð*:Ó;¸F¸UÐCÐCr7   c                 óp   — | j                   j                  d«      j                  «       j                  «       S )NÚuser)r  ÚvaluesÚdistinctr  r3   s    r5   Úget_total_donorszProject.get_total_donorsF  s+   € Ø× Ñ ×'Ñ'¨Ó/×8Ñ8Ó:×@Ñ@ÓBÐBr7   )é   )#r8   r9   r:   r   r<   re   r]   ru   ÚDecimalFieldr   r  r  rG   Ú
created_atÚ
updated_atrI   rK   r‹   rÙ   rŒ   Úproject_typerv   rÓ   r×   r  r6   rá   rß   Úpropertyr  r  r  r#  r(  r  r  s   @r5   r  r  þ   s(  ø„ ØˆF×Ñ¨Ô,€EØ"�&×"Ñ"¨°DÔ9€KØ'�F×'Ñ'°2ÀaÑUfÐgkÓUlÐTmÔn€MØ(�V×(Ñ(°BÀqÐRVÔW€NØ%�×%Ñ%°4Ô8€JØ%�×%Ñ%¨tÔ4€JØ#�×#Ñ#¨DÔ1€IØ$�6×$Ñ$ [¸F¿O¹OÐRVÐ^bÐq{Ô|€LØ&�V×&Ñ&ØØ1Ð3KÐLØØØ0ô€Nòô&ò
ð< ñ8ó ð8ð ñ@ó ð@ò
)óDöCr7   r  c                   ó.  ‡ — e Zd Z ej                  eej                  dd¬«      Z ej                  eej                  ¬«      Z	 ej                  dd ed«      g¬«      Z ej                  d¬«      Z ej                  d	dd¬
«      Z ej                  d	dd¬
«      Z ej                  d	dd¬
«      Z ej                  dg d¢¬«      Z ej                  ddd¬«      Z ej*                  dd¬«      Z ej                  dg d¢d¬«      Zd„ Zd„ Zˆ fd„Zˆ xZS )ÚDonationT)r}   r   r   ©r}   r  r  r  r	  rX   r   r   r)   ))ÚpaypalÚPayPal)ÚstripeÚStripe)ÚflutterwaveÚFlutterwave)ÚcinetpayÚCinetPay)r   r#   rT   )r   r   r   rW   r!   ))ÚpendingÚPending)Ú	completedÚ	Completed)ÚfailedÚFailed)ÚrefundedÚRefundedr:  r"   c                 ó  — d| _         | j                  «        t        j                  j	                  | j
                  d¬«      j                  t        d«      ¬«      d   xs d| j
                  _        | j
                  j                  «        y )Nr<  )ÚprojectÚpayment_statusÚamount)ÚtotalrF  r   )	rD  rá   r0  rN   ÚfilterrC  Ú	aggregater	   r  r3   s    r5   Úmark_as_completedzDonation.mark_as_completedd  sw   € Ø)ˆÔØ�	‰	ŒÜ&.×&6Ñ&6×&=Ñ&=Ø—L‘LØ&ð '>ó '
÷ ‰)œ#˜h›-ˆ)Ó
(¨ñ'2ò '7ð 67ð 	�‰Ô#ð 	�‰×ÑÕr7   c                 óf   — | j                   › d| j                  › d| j                  j                  › �S )Nz	 donated z to )Údonator_namerE  rC  re   r3   s    r5   r6   zDonation.__str__m  s/   € Ø×#Ñ#Ð$ I¨d¯k©k¨]¸$¸t¿|¹|×?QÑ?QÐ>RÐSÐSr7   c                 óÎ   •— | j                   j                  st        d«      ‚| j                   j                  }| j                  |kD  rt        d|› d�«      ‚t        ‰| �  |i |¤Ž y )Nz.This project is no longer accepting donations.z\The donation amount exceeds the remaining amount needed for this project. Maximum allowed: $rð   )rC  rK   r   r  rE  rà   rá   )r4   rã   rä   r  rå   s       €r5   rá   zDonation.savep  s~   ø€ à�|‰|×%Ò%Ü!Ð"RÓSÐSð  Ÿ<™<×8Ñ8ÐØ�;‰;Ð)Ò)Ü!ð  %Að  BRð  ASð  STð  #Uó  Vð  Vô 	‰‰�dÐ%˜fÓ%r7   )r8   r9   r:   r   r‹   r   ÚCASCADEr%  r  rC  r*  r   rE  rG   Údonation_dater<   rK  Údonator_mailÚdonator_telÚpayment_methodÚtransaction_referenceÚ	JSONFieldÚpayment_metadatarD  rI  r6   rá   r  r  s   @r5   r0  r0  I  s'  ø„ Øˆ6×Ñ˜[°F·N±NÈÐUYÔZ€DØˆf×Ñ °6·>±>ÔB€GØ ˆV× Ñ ¨B¸qÑN_Ð`dÓNeÐMfÔg€FØ(�F×(Ñ(°dÔ;€MØ#�6×#Ñ#¨s¸ÀTÔJ€LØ#�6×#Ñ#¨s¸ÀTÔJ€LØ"�&×"Ñ"¨c¸ÀDÔI€KØ%�V×%Ñ%°ò >ô €Nð -˜F×,Ñ,¸À4ÈdÔSÐØ'�v×'Ñ'¨d¸Ô>ÐØ%�V×%Ñ%Øò
ð ô	€NòòT÷&ð &r7   r0  c                   ó|   — e Zd Z ej                  eej                  ¬«      Z ej                  ddddd¬«      Z	d„ Z
y)	ÚUserProfiler1  r  r  r  T)r
  r  r   r   r   c                 ó.   — | j                   j                  S r1   )r%  r=   r3   s    r5   r6   zUserProfile.__str__‡  s   € Ø�y‰y×!Ñ!Ð!r7   N)r8   r9   r:   r   ÚOneToOneFieldr   rM  r%  r*  Útotal_donatedr6   rQ   r7   r5   rV  rV  }  s@   „ Øˆ6×Ñ °v·~±~ÔF€DØ'�F×'Ñ'ØØØØØô€Mó"r7   rV  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y	)
Ú
NewsletterrT   rU   Tr¬   rX   r–   r-   c                 ó8   — | j                   › d| j                  › �S rZ   )r[   r.   r3   s    r5   r6   zNewsletter.__str__“  rf   r7   N)r8   r9   r:   r   r<   r[   r.   rG   Úregistration_dateÚdeactivated_daterI   Úu_activer6   rQ   r7   r5   r[  r[  Œ  sg   „ Øˆ6×Ñ sÔ+€DØˆF×Ñ¨°DÔ9€EØ,˜×,Ñ,¸$Ô?ÐØ+�v×+Ñ+°¸TÔBÐØ"ˆv×"Ñ"¨4Ô0€Hó-r7   r[  c                   ó~  — e Zd Z ej                  dd¬«      Z ej                  eej                  ddd¬«      Z	 ej                  dd¬«      Z ej                  d¬«      Z ej                  d¬«      Z ej                  d¬	«      Z ej                  eej                  ddd
¬«      Z ej"                  d¬«      Zd„ Zy)Útodolistré   Tr¬   Úinchargetodor•   r–   r)   rU   r-   Ú	admintodorX   c                 ó8   — | j                   › d| j                  › �S r¯   )Útasknamerl   r3   s    r5   r6   ztodolist.__str__£  s   € Ø—-‘-�  $§+¡+ Ð/Ð/r7   N)r8   r9   r:   r   r<   re  r‹   rœ   rŒ   Úinchargepersonr>   ÚduedateÚpriorityrl   rI   rK   ÚadminidrG   r¶   r6   rQ   r7   r5   ra  ra  —  s»   „ Øˆv×Ñ¨3°tÔ<€HØ&�V×&Ñ& y¸F¿O¹OÐRVÐ^bÐqô  A€NØˆf×Ñ D°Ô5€GØˆv×Ñ¨2Ô.€HØˆV×Ñ¨Ô,€FØ#�×#Ñ#¨DÔ1€IØˆf×Ñ 	°V·_±_È4ÐW[ÐjuÔv€GØ(�F×(Ñ(°dÔ;€Mó0r7   ra  ),Ú	django.dbr   Údjango.contrib.auth.modelsr   r   r   r   Údjango.core.exceptionsr   Údjango.db.modelsr	   Údjango.core.validatorsr
   r   Údjango.utils.translationr   Ú_Úsrc.managerr   ÚPILr   Úior   Údjango.core.files.uploadedfiler   rü   rÌ   r   ÚModelrS   rb   rn   rx   r“   rœ   r¸   rÓ   r×   rÙ   r  r0  rV  r[  ra  rQ   r7   r5   ú<module>rv     s  ðÝ ß fÓ fÝ 2Ý  ß GÝ 6Ý &Ý Ý Ý ?ß ô/Ð"Ð#3ô /ôb	/�V—\‘\ô 	/ô-�v—|‘|ô -ô
-�6—<‘<ô 
-ô&�v—|‘|ô &ô &˜Ÿ™ô &ô8-�—‘ô -ô"&ˆv�|‰|ô &òB=òSô
/
�&—,‘,ô /
ôbICˆf�l‰lô ICôV2&ˆv�|‰|ô 2&ôh"�&—,‘,ô "ô-�—‘ô -ô0ˆv�|‰|õ 0r7   