§
    ÓƒÆiG  ã            
       óÐ  — d dl mZmZ 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 d dlm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mZ  eddg¬¦  «        Zdededefd„Z dededefd„Z!e "                    de#e         ¬¦  «         ee¦  «         ee¦  «        fdedefd„¦   «         Z$e %                    ded¬¦  «         ee¦  «         ee¦  «        fdededefd„¦   «         Z&e "                    de¬¦  «         ee¦  «         ee¦  «        fde'dedefd „¦   «         Z(e )                    de¬¦  «         ee¦  «         ee¦  «        fde'dededefd!„¦   «         Z*e %                    d"e¬¦  «         ee¦  «         ee¦  «        fde'dedefd#„¦   «         Z+e ,                    dd$¬%¦  «         ee¦  «         ee¦  «        fde'dedefd&„¦   «         Z-d'S )(é    )ÚdateÚ	timedelta)ÚOptional)Ú	APIRouterÚDependsÚHTTPExceptionÚQuery)ÚAsyncSession)Úselect)Úget_db)ÚRecurringTask)ÚTask)ÚUser)ÚRecurringTaskCreateÚRecurringTaskUpdateÚRecurringTaskOut)Úget_current_user)Úget_next_due_datez/recurring-taskszrecurring-tasks)ÚprefixÚtagsÚrtÚdbÚreturnc              ƒ   óÎ  ‡ K  — d }‰ j         rg|                     t          t          ¦  «                             t          j        ‰ j         k    ¦  «        ¦  «        ƒ d {V —†}|                     ¦   «         }|                     t          t          ¦  «                             t          j        ‰ j        k    ¦  «        ¦  «        ƒ d {V —†}|                     ¦   «         }	 ‰ j        p#t          j
        ¦   «         t          d¬¦  «        z
  }t          ‰ j        ‰ j        |¦  «        }n# t          $ r d }Y nw xY wi ˆ fd„‰ j        j        D ¦   «         ¥|r|j        nd |r|j        nd|dœ¥S )Né   ©Údaysc                 óF   •— i | ]}|j         t          ‰|j         ¦  «        “ŒS © )ÚnameÚgetattr)Ú.0Úcr   s     €úC/var/www/html/jarvis.com/web/backend/app/routers/recurring_tasks.pyú
<dictcomp>z_enrich.<locals>.<dictcomp>"   s)   ø€ Ð
EÐ
EÐ
E¨1ˆ1Œ6•7˜2˜qœvÑ&Ô&Ð
EÐ
EÐ
Eó    Ú )Úassigned_usernameÚcreated_by_usernameÚnext_due_date)Úassigned_toÚexecuter   r   ÚwhereÚidÚscalar_one_or_noneÚ
created_byÚlast_generated_duer   Útodayr   r   Úrecurrence_typeÚrecurrence_configÚ	ExceptionÚ	__table__ÚcolumnsÚusername)r   r   Úassigned_userÚrÚ	creator_rÚcreatorÚafterÚnext_dues   `       r$   Ú_enrichr?      sz  øè è € Ø€MØ	„~ð /Ø—*’*�V¥D™\œ\×/Ò/µ´¸2¼>Ò0IÑJÔJÑKÔKÐKÐKÐKÐKÐKÐKˆØ×,Ò,Ñ.Ô.ˆØ—j’j¥­¡¤×!3Ò!3µD´G¸r¼}Ò4LÑ!MÔ!MÑNÔNÐNÐNÐNÐNÐNÐN€IØ×*Ò*Ñ,Ô,€GðØÔ%ÐK­$¬*©,¬,½ÈÐ9JÑ9JÔ9JÑ*JˆÝ$ RÔ%7¸Ô9MÈuÑUÔUˆˆøÝð ð ð ØˆˆˆðøøøðØ
EÐ
EÐ
EÐ
E°´Ô0DÐ
EÑ
EÔ
Eðà9FÐP˜}Ô5Ð5ÈDØ3:ÐB˜wÔ/Ð/ÀØ'ð	ð ð ð s   ÃAD# Ä#D2Ä1D2Úduec              ƒ   ó^  K  — |                      t          t          ¦  «                             t          j        | j        k    t          j        |k    ¦  «        ¦  «        ƒ d{V —†}|rdS t          | j        | j        | j	        || j        ¬¦  «        }| 
                    |¦  «         || _        |S )zJCreate a task instance for a recurring task and update last_generated_due.N)Útitler+   r0   Údue_dateÚrecurring_task_id)Úscalarr   r   r-   rD   r.   rC   rB   r+   r0   Úaddr1   )r   r@   r   ÚexistingÚtasks        r$   Ú_create_task_instancerI   )   s¹   è è € à—Y’YÝ�t‰Œ×Ò�4Ô1°R´UÒ:½D¼MÈSÒ<PÑQÔQñô ð ð ð ð ð ð €Hð ð ØˆtÝØŒhØ”NØ”=ØØœ%ðñ ô €Dð ‡F‚Fˆ4�L„L€LØ€BÔØ€Kr&   r'   )Úresponse_modelÚcurrent_userc              ƒ   óL  ‡ K  — |j         dk    r]‰                      t          t          ¦  «                             t          j                             ¦   «         ¦  «        ¦  «        ƒ d {V —†}n‚‰                      t          t          ¦  «                             t          j        |j	        k    ¦  «                             t          j                             ¦   «         ¦  «        ¦  «        ƒ d {V —†}ˆ fd„| 
                    ¦   «                              ¦   «         D ¦   «         ƒ d {V —†S )NÚadminc              “   ó@   •K  — g | ]}t          |‰¦  «        ƒ d {V —†‘ŒS )N)r?   )r"   r   r   s     €r$   ú
<listcomp>z(list_recurring_tasks.<locals>.<listcomp>K   s7   øè è € ÐCÐCÐC b•'˜"˜b‘/”/Ð!Ð!Ð!Ð!Ð!Ð!ÐCÐCÐCr&   )Úroler,   r   r   Úorder_byÚ
created_atÚdescr-   r0   r.   ÚscalarsÚall)r   rK   Úresults   `  r$   Úlist_recurring_tasksrW   >   s  øè è € ð
 Ô˜GÒ#Ð#Ø—z’z¥&­Ñ"7Ô"7×"@Ò"@ÅÔAY×A^ÒA^ÑA`ÔA`Ñ"aÔ"aÑbÔbÐbÐbÐbÐbÐbÐbˆˆà—z’zÝ•=Ñ!Ô!ßŠU•=Ô+¨|¬Ò>Ñ?Ô?ßŠX•mÔ.×3Ò3Ñ5Ô5Ñ6Ô6ñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
 DÐCÐCÐC¨F¯NªNÑ,<Ô,<×,@Ò,@Ñ,BÔ,BÐCÑCÔCÐCÐCÐCÐCÐCÐCÐCr&   éÉ   )rJ   Ústatus_codeÚbodyc              ƒ   óF  K  — t          di |                      ¦   «         ¤d|j        i¤Ž}|                     |¦  «         	 |                     ¦   «         ƒ d {V —† t          |j        |j        t          j	        ¦   «         t          d¬¦  «        z
  ¦  «        }t          |||¦  «        ƒ d {V —† |                     ¦   «         ƒ d {V —† |                     |¦  «        ƒ d {V —† n)# t          $ r |                     ¦   «         ƒ d {V —† ‚ w xY wt!          ||¦  «        ƒ d {V —†S )Nr0   r   r   r   )r   Ú
model_dumpr.   rF   Úflushr   r3   r4   r   r2   r   rI   ÚcommitÚrefreshr5   Úrollbackr?   )rZ   r   rK   r   r>   s        r$   Úcreate_recurring_taskra   P   se  è è € õ 
Ð	GÐ	G˜ŸšÑ*Ô*Ð	GÐ	G°|´Ð	GÐ	GÐ	G€BØ‡F‚Fˆ2�J„J€JðØ�hŠh‰jŒjÐÐÐÐÐÐÐõ % RÔ%7¸Ô9MÝ%)¤Z¡\¤\µIÀ1Ð4EÑ4EÔ4EÑ%EñGô Gˆå# B¨°"Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5à�iŠi‰kŒkÐÐÐÐÐÐÐØ�jŠj˜‰nŒnÐÐÐÐÐÐÐÐøÝð ð ð Ø�kŠk‰mŒmÐÐÐÐÐÐÐØðøøøõ ˜˜R‘”Ð Ð Ð Ð Ð Ð Ð s   Á B#C$ Ã$&D
z/{rt_id}Úrt_idc              ƒ   óî   K  — |                      t          | ¦  «        ƒ d {V —†}|st          dd¦  «        ‚|j        |j        k    r|j        dk    rt          dd¦  «        ‚t          ||¦  «        ƒ d {V —†S ©Né”  úRecurring task not foundrM   é“  úNot allowed)Úgetr   r   r0   r.   rP   r?   ©rb   r   rK   r   s       r$   Úget_recurring_taskrk   j   s’   è è € ð �vŠv•m UÑ+Ô+Ð	+Ð	+Ð	+Ð	+Ð	+Ð	+€BØð =Ý˜CÐ!;Ñ<Ô<Ð<Ø	„}˜œÒ'Ð'¨LÔ,=ÀÒ,HÐ,HÝ˜C Ñ/Ô/Ð/Ý˜˜R‘”Ð Ð Ð Ð Ð Ð Ð r&   c              ƒ   ó,  K  — |                      t          | ¦  «        ƒ d {V —†}|st          dd¦  «        ‚|j        |j        k    r|j        dk    rt          dd¦  «        ‚|                     d¬¦  «                             ¦   «         D ]\  }}t          |||¦  «         Œ	 | 	                    ¦   «         ƒ d {V —† | 
                    |¦  «        ƒ d {V —† n)# t          $ r |                     ¦   «         ƒ d {V —† ‚ w xY wt          ||¦  «        ƒ d {V —†S )Nre   rf   rM   rg   rh   T)Úexclude_unset)ri   r   r   r0   r.   rP   r\   ÚitemsÚsetattrr^   r_   r5   r`   r?   )rb   rZ   r   rK   r   ÚkÚvs          r$   Úupdate_recurring_taskrr   z   s^  è è € ð �vŠv•m UÑ+Ô+Ð	+Ð	+Ð	+Ð	+Ð	+Ð	+€BØð =Ý˜CÐ!;Ñ<Ô<Ð<Ø	„}˜œÒ'Ð'¨LÔ,=ÀÒ,HÐ,HÝ˜C Ñ/Ô/Ð/à—’¨d�Ñ3Ô3×9Ò9Ñ;Ô;ð ð ‰ˆˆ1Ý��A�qÑÔÐÐðØ�iŠi‰kŒkÐÐÐÐÐÐÐØ�jŠj˜‰nŒnÐÐÐÐÐÐÐÐøÝð ð ð Ø�kŠk‰mŒmÐÐÐÐÐÐÐØðøøøõ ˜˜R‘”Ð Ð Ð Ð Ð Ð Ð s   Â!5C Ã&C=z/{rt_id}/pausec              ƒ   óÈ  K  — |                      t          | ¦  «        ƒ d {V —†}|st          dd¦  «        ‚|j        |j        k    r|j        dk    rt          dd¦  «        ‚|j         |_        	 |                     ¦   «         ƒ d {V —† |                     |¦  «        ƒ d {V —† n)# t          $ r | 
                    ¦   «         ƒ d {V —† ‚ w xY wt          ||¦  «        ƒ d {V —†S rd   )ri   r   r   r0   r.   rP   Ú	is_activer^   r_   r5   r`   r?   rj   s       r$   Útoggle_pauseru   •   s(  è è € ð �vŠv•m UÑ+Ô+Ð	+Ð	+Ð	+Ð	+Ð	+Ð	+€BØð =Ý˜CÐ!;Ñ<Ô<Ð<Ø	„}˜œÒ'Ð'¨LÔ,=ÀÒ,HÐ,HÝ˜C Ñ/Ô/Ð/à”|Ð#€B„LðØ�iŠi‰kŒkÐÐÐÐÐÐÐØ�jŠj˜‰nŒnÐÐÐÐÐÐÐÐøÝð ð ð Ø�kŠk‰mŒmÐÐÐÐÐÐÐØðøøøõ ˜˜R‘”Ð Ð Ð Ð Ð Ð Ð s   Á/5B% Â%&CéÌ   )rY   c              ƒ   ó„  K  — |                      t          | ¦  «        ƒ d {V —†}|st          dd¦  «        ‚|j        |j        k    r|j        dk    rt          dd¦  «        ‚	 |                     |¦  «        ƒ d {V —† |                     ¦   «         ƒ d {V —† d S # t          $ r | 	                    ¦   «         ƒ d {V —† ‚ w xY wrd   )
ri   r   r   r0   r.   rP   Údeleter^   r5   r`   rj   s       r$   Údelete_recurring_taskry   ­   sý   è è € ð �vŠv•m UÑ+Ô+Ð	+Ð	+Ð	+Ð	+Ð	+Ð	+€BØð =Ý˜CÐ!;Ñ<Ô<Ð<Ø	„}˜œÒ'Ð'¨LÔ,=ÀÒ,HÐ,HÝ˜C Ñ/Ô/Ð/ðØ�iŠi˜‰mŒmÐÐÐÐÐÐÐØ�iŠi‰kŒkÐÐÐÐÐÐÐÐÐøÝð ð ð Ø�kŠk‰mŒmÐÐÐÐÐÐÐØðøøøs   Á"5B Â&B?N).Údatetimer   r   Útypingr   Úfastapir   r   r   r	   Úsqlalchemy.ext.asyncior
   Ú
sqlalchemyr   Úapp.databaser   Úapp.models.recurring_taskr   Úapp.models.taskr   Úapp.models.userr   Úapp.schemas.recurring_taskr   r   r   Úapp.depsr   Úapp.services.recurrencer   ÚrouterÚdictr?   rI   ri   ÚlistrW   Úpostra   Úintrk   Úpatchrr   ru   rx   ry   r   r&   r$   ú<module>rŒ      s  ðØ $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø  Ð  Ð  Ð  Ð  Ð  Ø  Ð  Ð  Ð  Ð  Ð  Ø aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aØ %Ð %Ð %Ð %Ð %Ð %Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5à	ˆÐ,Ð4EÐ3FÐ	GÑ	GÔ	G€ð�mð ¨ð ¸$ð ð ð ð ð, Mð ¸ð À,ð ð ð ð ð* ‡‚ˆB˜tÐ$4Ô5€Ñ6Ô6à�w˜v‘”Ø ˜Ð!1Ñ2Ô2ðDð DØðDàðDð Dð Dñ 7Ô6ðDð" ‡‚ˆRÐ 0¸c€ÑBÔBð �w˜v‘”Ø ˜Ð!1Ñ2Ô2ð!ð !Ø
ð!àð!ð ð!ð !ð !ñ CÔBð!ð2 ‡‚ˆJÐ'7€Ñ8Ô8ð �w˜v‘”Ø ˜Ð!1Ñ2Ô2ð
!ð 
!Øð
!àð
!ð ð
!ð 
!ð 
!ñ 9Ô8ð
!ð ‡‚ˆjÐ)9€Ñ:Ô:ð �w˜v‘”Ø ˜Ð!1Ñ2Ô2ð	!ð !Øð!à
ð!ð 	ð!ð ð	!ð !ð !ñ ;Ô:ð!ð4 ‡‚ÐÐ.>€Ñ?Ô?ð �w˜v‘”Ø ˜Ð!1Ñ2Ô2ð!ð !Øð!àð!ð ð!ð !ð !ñ @Ô?ð!ð. ‡‚ˆz s€Ñ+Ô+ð �w˜v‘”Ø ˜Ð!1Ñ2Ô2ðð Øðàðð ðð ð ñ ,Ô+ðð ð r&   