Ë
    >È'jÓ%  ã                   óD  — d dl mZmZmZmZmZmZ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 d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZ d dlm Z m!Z"m#Z#m$Z$m%Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,  ed	g¬
«      Z-de
dedee.z  de/ddf
d„Z0e-jc                  deejd                  d¬«       ee«       ee«       edd¬«       edd¬«       eddd¬«       edd¬«       edd¬«      fde
dede/d e/d!e3d"e/d#edz  fd$„«       Z4e-jc                  d%ed&¬'«       ee«       ee«       eddd(¬«       edd¬«       edd¬«       eddd¬«       edd¬«       edd)¬«       ed*d+¬«      f	de
d,ed-e3de/d e/d!e3d"e/d#edz  d.e5fd/„«       Z6e-jo                  d0ed1¬'«       ee«       ee«      fde
d,efd2„«       Z%e-jc                  d3ed4¬'«       ee«       ee«      fd5ede
d,efd6„«       Z!e-jo                  d7ed8¬'«       ee«       ee«       edd9d:¬;«      fde
d,ed<e/dz  fd=„«       Z8e-jc                  d>ed?¬'«       ee«       ee«      fd5ede
defd@„«       Z9e-jc                  dAedB¬'«       ee«       ee«      fd5ede
defdC„«       Z:e-jc                  dDedE¬'«       ee«       ee«      fd5ede
d,efdF„«       Z;y)Gé    )Ú	APIRouterÚDependsÚFileÚFormÚHTTPExceptionÚQueryÚ
UploadFileÚstatus)ÚSessionÚ
joinedload)ÚSessionLocalÚget_dbÚrelease_db_connection)Úrequire_admin_token)ÚUser)ÚReward)ÚMessageÚRewardClaimIdRequestÚRewardClaimListResponseÚRewardClaimOutÚRewardClaimStatusRequestÚRewardIdRequestÚRewardListResponseÚ	RewardOut)Úcreate_rewardÚdelete_rewardÚdelete_reward_claimÚlist_reward_claimsÚlist_rewardsÚsave_reward_mediaÚserialize_rewardÚserialize_reward_claimÚsend_member_notificationÚupdate_reward_claim_statusÚupdate_rewardzadmin-rewards)ÚtagsÚdbÚadminÚclaimÚstatus_valueÚreturnNc                 ót  — |j                  «       j                  «       }|dvry t        |dd «      xs d}t        |dd «      }t        |dd «      xs t        |dd «      }|dk(  r	d}d	|› d
�}	nd}d	|› d�}	|�|	dt        |«      d›d�z  }	|�|	dt        |«      d›d�z  }	t	        | |t        |d«      d||	¬«       y )N>   ÚacceptedÚrejectedÚproduct_namezyour reward claimÚtotal_pointsÚavailable_pointsÚremaining_pointsr-   zReward claim acceptedzYour claim for z has been accepted.zReward claim rejectedz has been rejected.z Claim points: Ú,Ú.z Available balance: z points.Úuser_idÚreward)r5   Únotification_typeÚtitleÚmessage)ÚstripÚlowerÚgetattrÚintr#   )
r'   r(   r)   r*   Ústatus_normalizedr/   r0   r1   r8   r9   s
             ú>/var/www/html/kelly/kelly-backend/app/routers/admin/rewards.pyÚ_notify_claim_statusr@   #   sý   € Ø$×*Ñ*Ó,×2Ñ2Ó4ÐØÐ 8Ñ8Øä˜5 .°$Ó7ÒNÐ;N€LÜ˜5 .°$Ó7€LÜ˜uÐ&8¸$Ó?ÒkÄ7È5ÐRdÐfjÓCkÐà˜JÒ&Ø'ˆØ# L >Ð1DÐE‰à'ˆØ# L >Ð1DÐEˆàÐØ�_¤S¨Ó%6°qÐ$9¸Ð;Ñ;ˆØÐ#ØÐ)¬#Ð.>Ó*?ÀÐ)BÀ(ÐKÑKˆäØ
ØÜ˜˜yÓ)Ø"ØØöó    z/add-rewardzGCreate a reward (multipart: name, description, points, category, media))Úresponse_modelÚstatus_codeÚsummary.zReward name)ÚdescriptionzReward descriptioné   zPoints needed to claim)ÚgerE   zReward categoryzReward image)ÚdefaultrE   ÚnamerE   Úpoints_requiredÚcategoryÚmediac           
   ƒ   ób  K  — |j                  «       }|j                  «       }|j                  «       }	|st        t        j                  d¬«      ‚|	st        t        j                  d¬«      ‚|j                  }
t        | «       d }d }|r"|j                  rt        |«      ƒ d {  –—† \  }}t        «       }	 |j                  t        |
«      }|€t        t        j                  d¬«      ‚t        ||||||	||¬«      }t        |«      |j                  «        S 7 Œs# |j                  «        w xY w­w)NúName is required©rC   ÚdetailúCategory is requiredzAdmin not found)r'   r(   rI   rE   rJ   rK   Ú
media_pathÚmedia_content_type)r:   r   r
   ÚHTTP_400_BAD_REQUESTÚidr   Úfilenamer    r   Úgetr   ÚHTTP_404_NOT_FOUNDr   r!   Úclose)r'   r(   rI   rE   rJ   rK   rL   Ú
name_cleanÚdescription_cleanÚcategory_cleanÚadmin_idrR   rS   Úwrite_dbÚ
admin_userr6   s                   r?   Ú
add_rewardr`   B   s  è ø€ ð —‘“€JØ#×)Ñ)Ó+ÐØ—^‘^Ó%€NÙÜ¬×(CÑ(CÐL^Ô_Ð_ÙÜ¬×(CÑ(CÐLbÔcÐcà�x‰x€HÜ˜"ÔØ!€JØ%)ÐÙ�—’Ü/@ÀÓ/G×)GÑ&ˆ
Ð&ä‹~€HðØ—\‘\¤$¨Ó1ˆ
ØÐÜ¬F×,EÑ,EÐN_Ô`Ð`ÜØØØØ)Ø+Ø#Ø!Ø1ô	
ˆô   Ó'à�‰Õð' *Hùð& 	�‰Õüs+   ‚B"D/Â$DÂ%D/Â7AD ÄD/ÄD,Ä,D/z/edit-rewardzRUpdate a reward (multipart: reward_id, name, description, points, category, media))rB   rD   zReward id to updatezNew reward imageFz4Set true to remove image without uploading a new oneÚ_Ú	reward_idÚremove_mediac	              ƒ   óÖ  K  — |j                  «       }	|j                  «       }
|	st        t        j                  d¬«      ‚|
st        t        j                  d¬«      ‚| j	                  t
        j                  «      j                  t
        j                  |k(  «      j                  «       }|st        t        j                  d¬«      ‚d}d }d }t        | «       |r$|j                  rt        |«      ƒ d {  –—† \  }}d}t        «       }	 |j	                  t
        «      j                  t        t
        j                   «      «      j                  t
        j                  |k(  «      j                  «       }|st        t        j                  d¬«      ‚t#        |||	|j                  «       ||
||||xr | ¬«
      }t%        |«      |j'                  «        S 7 ŒÝ# |j'                  «        w xY w­w)NrN   rO   rQ   úReward not foundFT)
r'   r6   rI   rE   rJ   rK   rR   rS   Úreplace_mediaÚclear_media)r:   r   r
   rT   Úqueryr   rU   ÚfilterÚfirstrX   r   rV   r    r   Úoptionsr   Ú
created_byr%   r!   rY   )r'   ra   rb   rI   rE   rJ   rK   rL   rc   rZ   r\   Úexistsrf   rR   rS   r^   r6   s                    r?   Úedit_rewardrn   t   s‘  è ø€ ð  —‘“€JØ—^‘^Ó%€NÙÜ¬×(CÑ(CÐL^Ô_Ð_ÙÜ¬×(CÑ(CÐLbÔcÐcà�X‰X”f—i‘iÓ ×'Ñ'¬¯	©	°YÑ(>Ó?×EÑEÓG€FÙÜ¬×(AÑ(AÐJ\Ô]Ð]à€MØ!€JØ%)ÐÜ˜"ÔÙ�—’Ü/@ÀÓ/G×)GÑ&ˆ
Ð&Øˆä‹~€Hðà�N‰Nœ6Ó"ß‰W”Z¤× 1Ñ 1Ó2Ó3ß‰V”F—I‘I Ñ*Ó+ß‰U‹Wð	 	ñ Ü¬F×,EÑ,EÐN`ÔaÐaÜØØØØ#×)Ñ)Ó+Ø+Ø#Ø!Ø1Ø'Ø$Ò:¨]Ð):ô
ˆô   Ó'à�‰Õð7 *Hùð6 	�‰Õüs+   ‚C2G)Ã4GÃ5G)Ä	B8G ÇG)ÇG&Ç&G)z/list-rewardszList all rewards (newest first)c                 ó~   — t        | «      }|D �cg c]  }t        |«      ‘Œ }}t        t        |«      |¬«      S c c}w )N)ÚtotalÚrewards)Úfetch_rewardsr!   r   Úlen)r'   ra   rq   ÚrÚ
serializeds        r?   r   r   ²   s>   € ô ˜BÓ€GÙ/6Ó7©w¨!Ô" 1Õ%¨w€JÐ7Ü¤C¨
£O¸ZÔHÐHùò 8s   �:z/delete-rewardzDelete a reward by idÚbodyc                 ó|   — t        || j                  «      st        t        j                  d¬«      ‚t        d¬«      S )Nre   rO   zReward deleted©r9   )Úremove_rewardrb   r   r
   rX   r   ©rv   r'   ra   s      r?   r   r   À   s2   € ô ˜˜TŸ^™^Ô,Ü¬×(AÑ(AÐJ\Ô]Ð]ÜÐ+Ô,Ð,rA   z/list-reward-claimsz2List member reward claim requests for admin reviewr
   z'Optional: pending | accepted | rejected)ÚaliasrE   Ústatus_filterc           	      óþ   — |r=|j                  «       j                  «       }|dvrt        t        j                  d¬«      ‚t        | |¬«      }t        t        |«      |D �cg c]  }t        |«      ‘Œ c}¬«      S c c}w )N>   Úpendingr-   r.   z2status must be one of: pending, accepted, rejectedrO   )r|   )rp   Úclaims)	r:   r;   r   r
   rT   r   r   rs   r"   )r'   ra   r|   r   r)   s        r?   Úlist_claimsr€   Ï   s}   € ñ Ø%×+Ñ+Ó-×3Ñ3Ó5ˆØÐ CÑCÜÜ"×7Ñ7ØKôð ô   °-Ô@€FÜ"Ü�&‹kÙ;AÓB¹6°%Ô& uÕ-¸6ÑBôð ùâBs   Á A:
z/update-reward-claim-statusz/Accept, reject, or reset a reward claim requestc                 óÄ   — t        || j                  | j                  «      }|st        t        j                  d¬«      ‚t        |||| j                  «       t        |«      S )NúReward claim not foundrO   )r$   Úclaim_idr
   r   rX   r@   r"   ©rv   r'   r(   r)   s       r?   Úupdate_claim_statusr…   ë   sN   € ô ' r¨4¯=©=¸$¿+¹+ÓF€EÙÜ¬×(AÑ(AÐJbÔcÐcÜ˜˜U E¨4¯;©;Ô7Ü! %Ó(Ð(rA   z/reject-reward-claimzReject one reward claim requestc                 óœ   — t        || j                  d«      }|st        t        j                  d¬«      ‚t        |||d«       t        |«      S )Nr.   r‚   rO   )r$   rƒ   r   r
   rX   r@   r"   r„   s       r?   Úreject_claimr‡   ü   sF   € ô ' r¨4¯=©=¸*ÓE€EÙÜ¬×(AÑ(AÐJbÔcÐcÜ˜˜U E¨:Ô6Ü! %Ó(Ð(rA   z/delete-reward-claimzDelete one reward claim requestc                 ó|   — t        || j                  «      st        t        j                  d¬«      ‚t        d¬«      S )Nr‚   rO   zReward claim deletedrx   )r   rƒ   r   r
   rX   r   rz   s      r?   Údelete_claimr‰     s2   € ô ˜r 4§=¡=Ô1Ü¬×(AÑ(AÐJbÔcÐcÜÐ1Ô2Ð2rA   )<Úfastapir   r   r   r   r   r   r	   r
   Úsqlalchemy.ormr   r   Úapp.databaser   r   r   Úapp.dependenciesr   Ú
app.modelsr   Úapp.models_adminr   Úapp.schemasr   r   r   r   r   r   r   r   Úapp.services.admin_servicer   r   ry   r   r   r   rr   r    r!   r"   r#   r$   r%   ÚrouterÚobjectÚstrr@   ÚpostÚHTTP_201_CREATEDr=   r`   Úboolrn   rW   r€   r…   r‡   r‰   © rA   r?   Ú<module>r™      sH  ðß \× \Ó \ß .ç DÑ DÝ 0Ý Ý #÷	÷ 	ó 	÷÷ ÷ ñ ñ 
˜Ð)Ô	*€ð˜Wð ¨Tð ¸.È6Ñ:Qð Ðadð Ðimó ð> ‡�ØØØ×'Ñ'ØUð	 ó ñ ˜&“/ÙÐ-Ó.Ù�S mÔ4Ù˜CÐ-AÔBÙ ¨Ð7OÔPÙ˜Ð*;Ô<Ù#¨D¸nÔMñ)Øð)àð)ð ð)ð ð	)ð
 ð)ð ð)ð ˜Ñò)óð)ðX ‡�ØØØ`ð ó ñ ˜&“/ÙÐ)Ó*Ù˜# !Ð1FÔGÙ�S mÔ4Ù˜CÐ-AÔBÙ ¨Ð7OÔPÙ˜Ð*;Ô<Ù#¨DÐ>PÔQÙ eÐ9oÔpñ6Øð6àð6ð ð6ð ð	6ð
 ð6ð ð6ð ð6ð ˜Ñð6ð ò6óð
6ðr ‡�ØØ%Ø-ð ó ñ ˜&“/ÙÐ)Ó*ñIØðIàòIóð
Ið ‡�ØØØ#ð ó ñ ˜&“/ÙÐ)Ó*ñ-Ø
ð-àð-ð ò-óð
-ð ‡�ØØ*Ø@ð ó ñ ˜&“/ÙÐ)Ó*Ù %ØØØ=ô!ñØðàðð ˜‘:òóð
ð. ‡�Ø!Ø!Ø=ð ó ñ ˜&“/ÙÐ-Ó.ñ	)Ø
"ð	)àð	)ð ò	)óð
	)ð ‡�ØØ!Ø-ð ó ñ ˜&“/ÙÐ-Ó.ñ	)Ø
ð	)àð	)ð ò	)óð
	)ð ‡�ØØØ-ð ó ñ ˜&“/ÙÐ)Ó*ñ3Ø
ð3àð3ð ò3óñ
3rA   