
    }ib                     	   d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dl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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-m.Z.m/Z/  eddg      Z0dede	e/   fdZ1de	e-   fdZ2dede+fdZ3dede(fdZ4e0jk                  de	e(          ee      fdefd        Z6e0jk                  d!e(       ee      fd"e7defd#       Z8e0js                  de(       ee       ee      fd$e&ded%e:fd&       Z;e0jy                  d!e(       ee       ee      fd"e7d$e'ded%e:fd'       Z=e0j}                  d!       ee       ee      fd"e7ded%e:fd(       Z?e0js                  d)e+       ee       ee      fd"e7d$e)ded%e:fd*       Z@e0jy                  d+e+       ee       ee      fd"e7d,e7d$e*ded%e:f
d-       ZAe0j}                  d+       ee       ee      fd"e7d,e7ded%e:fd.       ZB G d/ d0e      ZCe0jy                  d1       ee       ee      fd"e7d,e7d$e	eC   ded%e:f
d2       ZDe0jy                  d3       ee       ee      fd"e7d,e7d$e	e.   ded%e:f
d4       ZEe0js                  d5e-       ee       ee      fd"e7d,e7d$e,ded%e:f
d6       ZFe0jy                  d7e-       ee       ee      fd"e7d,e7d8e7d$e,ded%e:fd9       ZGe0j}                  d7       ee       ee      fd"e7d,e7d8e7ded%e:f
d:       ZHe0jk                  d;       ee      fd"e7d,e7defd<       ZI G d= d>e      ZJe0js                  d?       ee       ee      fd"e7d,e7d$eJdefd@       ZKe0j}                  dA       ee       ee      fd"e7d,e7dBe7defdC       ZL G dD dEe      ZMe0js                  d; ee      gF       ee      fd"e7d,e7d$eMdefdG       ZNe0j}                  dH ee      gF       ee      fd"e7d,e7dBe7defdI       ZOe0js                  dJ       ee       ee      fd"e7ded%e:fdK       ZPe0js                  dL       ee       ee      fd"e7ded%e:fdM       ZQe0jk                  dN       ee      fd"e7d,e7defdO       ZR G dP dQe      ZSe0jy                  dN       ee       ee      fd"e7d,e7d$eSded%e:f
dR       ZTy)S    )
get_or_404)	APIRouterDependsHTTPException)Session)ListOptional)	BaseModelN)get_db)require_pengurusget_current_user)SpecialEvent)SpecialMass)SpecialPosition)SpecialSubscription)Asim)
Assignment)MassSchedule)Unavailability)AsimAreaUnavailability)
SpecialEventCreateSpecialEventUpdateSpecialEventResponseSpecialMassCreateSpecialMassUpdateSpecialMassResponseSpecialPositionCreateSpecialPositionResponseReorderItemSubscriberResponsez/api/special-eventszSpecial Events)prefixtagsmassreturnc           
          | j                   D cg c]t  }t        |j                  |j                  |j                  r|j                  j
                  nd |j                  r|j                  j                  nd |j                        v c}S c c}w )N)idasim_id	asim_nameasim_nois_admin_assigned)subscriptionsr    r&   r'   asim	full_nameno_asimr*   )r#   ss     4/var/www/html/asim.com/backend/app/routes/special.py_enrich_subscribersr1      sw     ##	 $A 	ttII*+&&aff&&d&'ffAFFNN$11	
 $	 	 	s   A9Bc                 8   | D cg c]  }t        |j                  |j                  |j                  |j                  r|j                  j
                  nd |j                  r|j                  j                  nd |j                  |j                         c}S c c}w )N)r&   position_numberposition_type_codeposition_type_labelposition_type_color
sort_order	posisi_id)	r   r&   r3   r4   position_typelabelcolorr7   r8   )	positionsps     r0   enrich_positionsr>   *   s      A 	 tt-- 339: 5 5d9: 5 5d||kk	
   s   BBc                 ,   t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  t        | j                        | j                  t        | j                        t        |             S )N)r&   event_idnamedatetime	mass_typemax_subscriberssubscriber_count	is_activer<   subscribers)r   r&   r@   rA   rB   rC   rD   rE   lenr+   rG   r>   r<   r1   r#   s    r0   _mass_responserK   9   sk    77YYYYYY..,,T//0.."4>>2'-     eventc                     t        | j                  | j                  | j                  | j                  | j
                  | j                  D cg c]  }t        |       c}      S c c}w )N)r&   rA   yearrG   is_publishedmasses)r   r&   rA   rO   rG   rP   rQ   rK   )rM   ms     r0   enrich_eventrS   I   sT    88ZZZZ//''+0<<8<aq!<8  9s   A%/)response_modeldbc                    | j                  t              j                  t        j                  j	                         t        j
                  j	                               j                         }|D cg c]  }t        |       c}S c c}w N)queryr   order_byrO   descr&   allrS   )rV   eventses      r0   get_allr_   U   s^    XXl#,,\->->-C-C-E|G[G[G]^bbdF%+,VLOV,,,s   0Bz/{event_id}r@   c                 <    t        |t        | d      }t        |      S )NEvent)r   r   rS   )r@   rV   rM   s      r0   get_onerb   Z   s    r<7;ErL   data_c                    t        | j                  | j                        }|j                  |       	 |j	                          |j                  |       t        |      S # t        $ r |j                          t        dd      w xY w)N)rA   rO     zGagal membuat eventstatus_codedetail)
r   rA   rO   addcommitrefresh	Exceptionrollbackr   rS   )rc   rV   rd   rM   s       r0   create_eventro   _   ss    diidii8EFF5MK
		


5   K
4IJJKs   !A   'Bc                 *   t        |t        | d      }|j                  d      }d|v rp|d   dk(  rh|j                  D ]Y  }|j	                  t
              j                  t
        j                  |j                  k(        j                         }|sSd|_
        [ |j                         D ]  \  }}	t        |||	        	 |j                          |j                  |       t%        |      S # t        $ r |j!                          t#        dd      w xY w)	Nra   Texclude_unsetrP   Frf   zGagal mengupdate eventrg   )r   r   
model_dumprQ   rY   r   filterspecial_mass_idr&   firstrP   itemssetattrrk   rl   rm   rn   r   rS   )
r@   rc   rV   rd   rM   update_datar#   schedulekeyvalues
             r0   update_eventr}   k   s    r<7;E///5K$^)D)MLLDxx-44,,7eg  (-% ! "'')
UsE" *N
		


5   N
4LMMNs   ?!C+ +'Dc                    t        |t        | d      }|j                  D ]`  }|j                  t              j                  t        j                  |j                  k(        j                          |j                  |       b |j                  |       	 |j                          ddiS # t        $ r |j                          t        dd      w xY w)Nra   rf   zGagal menghapus eventrg   messagezEvent dihapus)r   r   rQ   rY   r   rt   ru   r&   deleterk   rm   rn   r   )r@   rV   rd   rM   r#   s        r0   delete_eventr      s    r<7;E
!(()H)HDGG)ST[[]
		$  IIeM
		 ''  M
4KLLMs   B( ('Cz/{event_id}/massesc           	      z   t        |t        | d       t        | |j                  |j                  |j
                  |j                  |j                  dk(  r|j                  nd       }|j                  |       	 |j                          |j                  dk(  rOt        d|j                  dz         D ]3  }|j                  t        |j                  t        |      d|             5 |j                          |j!                  |       t)        |      S # t"        $ r |j%                          t'        dd	
      w xY w)Nra   	subscribe)r@   rA   rB   rC   rD   rE   generate   regularru   r3   r4   r7   rf   zGagal menambahkan acararg   )r   r   r   rA   rB   rC   rD   rE   rj   flushrangenum_positionsr   r&   strrk   rl   rm   rn   r   rK   )r@   rc   rV   rd   r#   is         r0   add_massr      s	   r<73YYYYYY..04+0M,,SWD FF4LO

>>Z'1d00145$(GG$'F'0 	  6 			


4 $  O
4MNNOs   9BD 'D:z/{event_id}/masses/{mass_id}mass_idc                    |j                  t              j                  t        j                  |k(  t        j                  | k(        j                         }|st        dd      |j                  d      j                         D ]  \  }}t        |||        	 |j                          |j                  |       t        |      S # t        $ r |j                          t        dd      w xY w)N  Acara tidak ditemukanrg   Trq   rf   zGagal mengupdate acara)rY   r   rt   r&   r@   rv   r   rs   rw   rx   rk   rl   rm   rn   rK   )r@   r   rc   rV   rd   r#   r{   r|   s           r0   update_massr      s    88K '''!( eg 	 4KLLooDo9??A
Uc5! BN
		


4 $  N
4LMMNs   !C 'C.c                 j   |j                  t              j                  t        j                  |k(  t        j                  | k(        j                         }|st        dd      |j                  |       	 |j                          ddiS # t        $ r |j                          t        dd      w xY w)Nr   r   rg   rf   zGagal menghapus acarar   zAcara dihapus)rY   r   rt   r&   r@   rv   r   r   rk   rm   rn   )r@   r   rV   rd   r#   s        r0   delete_massr      s    88K '''!( eg 	 4KLLIIdOM
		 ''  M
4KLLM   7B 'B2c                   T    e Zd ZU dZee   ed<   eed<   eed<   eed<   dZee   ed<   y)PositionSyncItemNr&   r3   r4   r7   r8   )	__name__
__module____qualname__r&   r	   int__annotations__r   r8    rL   r0   r   r      s/    BO#Ix}#rL   r   z+/{event_id}/masses/{mass_id}/positions/syncc           
         t        |t        |d       |j                  t              j	                  t        j
                  |k(        j                          |D ]I  }|j                  t        ||j                  |j                  |j                  |j                               K 	 |j                          ddiS # t        $ r |j                          t        dd      w xY w)NAcara)ru   r3   r4   r7   r8   rf   zGagal menyinkronkan posisirg   r   zPosisi berhasil disinkronkan)r   r   rY   r   rt   ru   r   rj   r3   r4   r7   r8   rk   rm   rn   r   )r@   r   rc   rV   rd   items         r0   sync_positionsr      s    r;1HH_$$_%D%D%OPWWY
# 00#66nn
 	 R
		 566  R
4PQQRs   %B9 9'C z./{event_id}/masses/{mass_id}/positions/reorderc                 4   |sddiS |D cg c]  }|j                    }}|j                  t              j                  t        j                   j	                  |      t        j
                  |k(        j                         D ci c]  }|j                   | }}t        |      D ]*  \  }	}|j                  |j                         }|s$|	|_	        , 	 |j                          ddiS c c}w c c}w # t        $ r |j                          t        dd      w xY w)Nr   zReorder berhasilrf   zGagal mereorder posisirg   )r&   rY   r   rt   in_ru   r\   	enumerategetr7   rk   rm   rn   r   )
r@   r   rc   rV   rd   r   idsr=   positions_mapidxs
             r0   reorder_positionsr      s   -..#
$tt477tC
$/299""3'++w6
 #%Aa    t_	Tdgg&AL %N
		 )**! %  N
4LMMNs   C&C+C0 0'Dz&/{event_id}/masses/{mass_id}/positionsc                 J   t        |t        |d      }t        |j                        }t	        ||j
                  |j                  |      }|j                  |       	 |j                          |j                  |       t        |j                  |j
                  |j                  |j                  r|j                  j                   nd |j                  r|j                  j"                  nd |j$                        S # t        $ r |j                          t        dd      w xY w)Nr   r   rf   zGagal menambahkan posisirg   r&   r3   r4   r5   r6   r7   )r   r   rI   r<   r   r3   r4   rj   rk   rl   rm   rn   r   r   r&   r9   r:   r;   r7   )r@   r   rc   rV   rd   r#   max_sortr=   s           r0   add_positionr     s    b+w8D4>>"H,,22		A FF1IP
		


1 #44))//56__AOO11$56__AOO11$<<   P
4NOOPs   !C; ;'D"z4/{event_id}/masses/{mass_id}/positions/{position_id}position_idc                    |j                  t              j                  t        j                  |k(  t        j                  |k(        j                         }|st        dd      |j                         j                         D ]  \  }}t        |||        	 |j                          |j                  |       t        |j                  |j                  |j                   |j"                  r|j"                  j$                  nd |j"                  r|j"                  j&                  nd |j(                        S # t        $ r |j                          t        dd      w xY w)Nr   Posisi tidak ditemukanrg   rf   zGagal mengupdate posisir   )rY   r   rt   r&   ru   rv   r   rs   rw   rx   rk   rl   rm   rn   r   r3   r4   r9   r:   r;   r7   )	r@   r   r   rc   rV   rd   r=   r{   r|   s	            r0   update_positionr      s   
!((k)''72	 eg  4LMMoo'--/
U3 0O
		


1 #44))//56__AOO11$56__AOO11$<<   O
4MNNOs   !D7 7'Ec                 j   |j                  t              j                  t        j                  |k(  t        j                  |k(        j                         }|st        dd      |j                  |       	 |j                          ddiS # t        $ r |j                          t        dd      w xY w)Nr   r   rg   rf   zGagal menghapus posisir   zPosisi dihapus)rY   r   rt   r&   ru   rv   r   r   rk   rm   rn   )r@   r   r   rV   rd   r=   s         r0   delete_positionr   9  s    
!((k)''72	 eg  4LMMIIaLN
		 '((  N
4LMMNr   z(/{event_id}/masses/{mass_id}/subscribersc                     |j                  t              j                  t        j                  |k(  t        j                  | k(        j                         }|st        dd      t        |      S )Nr   r   rg   )rY   r   rt   r&   r@   rv   r   r1   )r@   r   rV   r#   s       r0   get_subscribersr   K  s_    88K '''!( eg 	 4KLLt$$rL   c                       e Zd ZU eed<   y)SelfSubscribeRequestr'   Nr   r   r   r   r   r   rL   r0   r   r   V      LrL   r   z&/{event_id}/masses/{mass_id}/subscribec                    |j                  t              j                  t        j                  |k(  t        j                  | k(  t        j
                  dk(        j                         }|st        dd      |j                  r/t        |j                        |j                  k\  rt        dd      |j                  t              j                  t        j                  |k(  t        j                  |j                  k(        j                         }|rt        dd      t        ||j                  d	      }|j                  |       	 |j                          ddiS # t         $ r |j#                          t        d
d      w xY w)Nr   r   r   rg     Slot penuh!zSudah terdaftar!Fru   r'   r*   rf   zGagal subscriber   zBerhasil subscribe!rY   r   rt   r&   r@   rD   rv   r   rE   rI   r+   r   ru   r'   rj   rk   rm   rn   )r@   r   rc   rV   current_userr#   existingsubs           r0   self_subscriber   Z  sT   88K '''!(, eg	 	
 4KLLD$6$6 74;O;O OMBBxx+,33++w6##t||3 eg  4FGG
C
 FF3KG
		 ,--  G
4EFFG   
E 'Fz0/{event_id}/masses/{mass_id}/subscribe/{asim_id}r'   c                 j   |j                  t              j                  t        j                  |k(  t        j                  |k(        j                         }|st        dd      |j                  |       	 |j                          ddiS # t        $ r |j                          t        dd      w xY w)Nr   Tidak ditemukanrg   rf   zGagal unsubscriber   zUnsubscribe berhasilrY   r   rt   ru   r'   rv   r   r   rk   rm   rn   )r@   r   r'   rV   r   r   s         r0   self_unsubscriber   y  s    
((&
'
.
.++w6##w. eg  4EFFIIcNI
		 -..  I
4GHHIr   c                       e Zd ZU eed<   y)AdminAssignRequestr'   Nr   r   rL   r0   r   r     r   rL   r   )dependenciesc                    |j                  t              j                  t        j                  |k(  t        j                  | k(  t        j
                  dk(        j                         }|st        dd      |j                  r/t        |j                        |j                  k\  rt        dd      |j                  t              j                  t        j                  |k(  t        j                  |j                  k(        j                         }|rt        dd      t        ||j                  d	      }|j                  |       	 |j                          ddiS # t         $ r |j#                          t        d
d      w xY w)Nr   r   r   rg   r   r   zASIM sudah terdaftar!Tr   rf   zGagal menambahkan ASIMr   zASIM berhasil ditambahkanr   )r@   r   rc   rV   r#   r   r   s          r0   admin_assignr     sT   88K '''!(, eg	 	
 4KLLD$6$6 74;O;O OMBBxx+,33++w6##t||3 eg  4KLL
C
 FF3KN
		 233  N
4LMMNr   z2/{event_id}/masses/{mass_id}/subscribers/{asim_id}c                 j   |j                  t              j                  t        j                  |k(  t        j                  |k(        j                         }|st        dd      |j                  |       	 |j                          ddiS # t        $ r |j                          t        dd      w xY w)Nr   r   rg   rf   zGagal menghapus ASIM dari acarar   zASIM dihapus dari acarar   )r@   r   r'   rV   r   s        r0   admin_remover     s    
((&
'
.
.++w6##w. eg  4EFFIIcNW
		 011  W
4UVVWr   z/{event_id}/generatec                    t        |t        | d      }|j                  t              j	                  t        j
                  dk(        j                         i D ]  }t        |d      rpt        |j                  t              rV|j                  j                  d      D cg c]#  }|j                         s|j                         % c}|j                  <   t        |d      rHt        |j                  d      r2|j                  D cg c]  }|j                   c}|j                  <   g |j                  <    |j                  t              j	                  t        j                   dk(        j                         |j                  t"              j	                  t"        j
                  dk(  t"        j                   dk(        j                         }i |D ]?  }j%                  |j&                  t)                     j+                  |j,                         A |j.                  D cg c]  }|j0                  dk(  s| }	}	 |	D ]  |j                  t2              j	                  t2        j4                  j                  k(  t2        j6                  dk(        j9                         }
|
se|j                  t:              j	                  t:        j<                  |
j                  k(        j?                          |j?                  |
        |jA                          tC        |	d	 
      }i |D ]I  t3        j                  jD                  d      }|j+                  |       |jA                          tC        jF                  d 
      }t)               |D ]  j                  jH                  r"jJ                  rjJ                  j,                  nd jL                  rJjL                  jN                  s4|j+                  t;        |j                  d jP                  d             f	d} |       }|s4|j+                  t;        |j                  d jP                  d             |jS                  fd
       jU                  |d   j                  d      }|D cg c]$  }jU                  |j                  d      |k(  s#|& }}tW        jX                  |      }|j+                  t;        |j                  |j                  jP                  d             j+                  |j                         jU                  |j                  d      dz   |j                  <    L |j[                          ddtc        |       d|jd                   iS c c}w c c}w c c}w c c}w # t\        $ r  t^        $ r |ja                          t]        dd      w xY w)Nra   Teligibilities,__iter__approvedr   Fc                 2    | j                   | j                  fS rX   )rB   rC   )rR   s    r0   <lambda>z generate_event.<locals>.<lambda>  s    qvvqvv>NrL   )r{   )ru   rB   rP   c                     | j                   S rX   )r7   )r=   s    r0   r   z generate_event.<locals>.<lambda>  s    Q\\rL   )schedule_idr'   r3   r4   is_overridec                    	 g } D ]  }|j                   v rddlm}  G fdd      } ||j                   j                   |             rI	j                  r5	j                  j
                  rj                  |j                   g       vr
r'
j                  |j                   t                     v r| j                  |        | S )Nr   )is_unavailablec                   ^    e Zd ZW  j                  ZW  j                  j                         Zy)@generate_event.<locals>.get_candidates.<locals>.FakeMassTemplateN)r   r   r   rC   rB   weekdayday_of_weekrJ   s   r0   FakeMassTemplater     s    #'99D*.))*;*;*=KrL   r   )	r&   app.routes.scheduler   rB   r9   requires_eligibilityr   setappend)resultr,   r   r   all_asimarea_unavail_mapassigned_this_masseligible_mapr#   pospos_area_idpt_codeunavailabilitiess       r0   get_candidatesz&generate_event.<locals>.get_candidates  s    F (77&88$F> > *$''499>N>PRbc$,,1B1B1W1W&l.>.>tww.KK (&;:J:N:NtwwX[X]:^+^$d+ !) "MrL   c                 <    j                  | j                  d      S )Nr   )r   r&   )aassignment_countss    r0   r   z generate_event.<locals>.<lambda>$  s    .?.C.CADD!.LrL   r   r   rf   zGagal generate jadwal eventrg   r   z
Generated z acara untuk event )3r   r   rY   r   rt   rG   r\   hasattr
isinstancer   r   splitstripr&   r4   r   statusr   
setdefaultr'   r   rj   area_idrQ   rD   r   ru   rP   rv   r   r   r   r   sortedrB   r<   r8   posisir9   requires_asimr3   sortr   randomchoicerk   r   rm   rn   rI   rA   )r@   rV   rd   rM   r,   r^   area_unavailsaurR   generate_massesexisting_schedulesorted_massesrz   r<   r   
candidates	min_countr   top_candidateschosenr   r   r   r   r   r#   r   r   r   r   s                       @@@@@@@@@@r0   generate_eventr    s   r<7;Exx~$$T^^t%;<@@BHL4)j9K9KS.Q8<8J8J8P8PQT8U$c8U1YZY`Y`YbQWWY8U$cL!T?+8J8JJ0WCGCUCU$VCUaQ%9%9CU$VL!$&L!  xx/66+	ce  HH34;;((D0%%3 
ce  ##BJJ6::2::F  #(,,L,Q!++2Kq,OL\S#D " 6 = =,,7))U2! eg  !$++J,B,BFWFZFZ,Z[bbd		+, $ 	
4NO!D# $YY"H
 FF8HHJt~~3IJI!$ 0047MMcjjcjj00VZ$$S->->-L-LFF:$,KK $(+(;(;+2$)  " "& ,-
!FF:$,KK $(+(;(;+2$)  $LM-11*Q-2B2BAF	-7!gZ;L;P;PQRQUQUWX;Y]f;f!Z!g~6z ("II$'$7$7'. %  #&&vyy1/@/D/DVYYPQ/RUV/V!&)),w ! "R 			 C$6#77J5::,WXXg %d$V" MV "h   S
4QRRSsK   *V3 V3V84V=	V=A&W 7HW <$W!W%B1W W 0W7z/{event_id}/publishc                    t        |t        | d      }|j                  D cg c]  }|j                  dk(  s|j                    }}i }|ri|j                  t              j                  t        j                  j                  |            j                         }|D ci c]  }|j                  | }}|j                  D ]7  }	|	j                  dk7  r|j                  |	j                        }
|
s1d|
_        9 d|_        	 |j                          dd|j"                   d	iS c c}w c c}w # t        $ r |j                          t!        dd      w xY w)
Nra   r   Trf   zGagal mempublish eventrg   r   zEvent z berhasil dipublish)r   r   rQ   rD   r&   rY   r   rt   ru   r   r\   r   rP   rk   rm   rn   r   rA   )r@   rV   rd   rM   rR   mass_idsschedules_map	schedulesr/   r#   rz   s              r0   publish_eventr  >  sB   r<7;E $llHlakkZ.GlHHMHH\*11((,,X6

#% 	 8AAy!**A-yA>>Z' $$TWW-$(H!  EN
		 

|+>?@@+ I B  N
4LMMNs   D#D#D(D- -'Ez(/{event_id}/masses/{mass_id}/assignmentsc                    |j                  t              j                  t        j                  |k(        j	                         }|sg S |j                  t
              j                  t
        j                  |j                  k(        j                         }|D cg c]&  }|j                  |j                  |j                  d( c}S c c}w )N)r3   r'   r   )rY   r   rt   ru   rv   r   r   r&   r\   r3   r'   r   )r@   r   rV   rz   assignmentsr   s         r0   get_mass_assignmentsr  [  s    xx%,,$$/eg  	((:&--(++-	ce  q||p{kl 1 1aiiXYXeXefp{|||s   +Cc                   ,    e Zd ZU eed<   dZee   ed<   y)MassAssignmentUpdater3   Nr'   )r   r   r   r   r   r'   r	   r   r   rL   r0   r  r  h  s    !GXc]!rL   r  c                 D   |j                  t              j                  t        j                  |k(        j	                         }|st        dd      |j                  t              j                  t        j                  |j                  k(  t        j                  |j                  k(        j	                         }|st        dd      |j                  |_
        d|_        	 |j                          d	d
iS # t        $ r |j                          t        dd      w xY w)Nr   z-Jadwal belum di-generate! Klik Generate dulu.rg   r   zAssignment tidak ditemukanTrf   zGagal mengupdate assignmentr   zAssignment diupdate)rY   r   rt   ru   rv   r   r   r   r&   r3   r'   r   rk   rm   rn   )r@   r   rc   rV   rd   rz   r   s          r0   update_mass_assignmentr  m  s    xx%,,$$/eg  4cdd
##(++-""d&:&::	 eg  4PQQAIAMS
		 ,--  S
4QRRSs   $C8 8'D)Uapp.helpers.crudr   fastapir   r   r   sqlalchemy.ormr   typingr   r	   pydanticr
   r   app.databaser   app.core.securityr   r   app.models.special_eventr   app.models.special_massr   app.models.special_positionr   app.models.special_subscriptionr   app.models.asimr   app.models.assignmentr   app.models.mass_scheduler   app.models.unavailabilityr   app.models.area_unavailabilityr   app.schemas.specialr   r   r   r   r   r   r   r   r   r    routerr1   r>   rK   rS   r   r_   r   rb   postobjectro   putr}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   rL   r0   <module>r)     s   ' 5 5 " !    @ 1 / 7 ?   , 1 4 A   
/7G6H	I
k 
d3E.F 
4(?#@  )<   )=  C%9 :;!&/ - - <- M*>?)0 c w  @ S!569@V]^nVo 	) 	w 	V 	 7	 M*>?HOPVelm}e~ 3 &8 g \b  @0 }.5fo7ScKd (3 (G (& ( ( !2EFCJ6?`ghx`y  s  "3    W]   G 8 *;NOT[\bTcqx  zJ  rK  #    3D  '  hn   P " -.;B6?X_`pXq (# ( ( (v ( /("$y $ 9:\cdj\k  zA  BR  zS 7S 73 7d;K6L 7RY 7pv 7 ;7$ <=ZabhZiw~  @P  xQ + +c +k9J +PW +nt + >+, 5F]^Y`agYhv}  O  wP 3  4I w ms  _2 BSjknuv|n}  LS  Td  Le c C c I^ dk   CI  l0 EFQXY_Q`nu  wG  oH )c )C )c )w )ek ) G)" 67?Fv %c %C %W % 8%9  56ZabhZix  AQ  yR .S .3 .6J .PW . 7.< ABNUV\ols  uE  mF /s /S /3 /G / C/   7wO_G`FabV]^dVe 43 4 44F 4G 4 c4< CSZ[kSlRmnJQRX/ 23 2 2s 2 2 o2" #$07WUeMf {YS {Yg {YF {Y %{Y| "#/6vGTdLe AC AW A6 A $A8 67DKFO 	}3 	} 	}' 	} 8	}"9 "
 67bijpbq  @G  HX  @Y .S .3 .>R .X_ .v| . 8.rL   