
    }i2                         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mZ d dlmZ d dlmZ d dlmZmZmZmZ d d	lmZmZ d d
lmZ  eddg      Zd-dededefdZejA                  dee         dd ee      fdee!   dee   defd       Z"ejA                  de       ee      fde#defd       Z$ejK                  d       ee      fde#de!defd       Z&ejO                  dee          ee      fd ee   defd!       Z(ejO                  de       ee      fd edefd"       Z)ejK                  de       ee      fde#d edefd#       Z*ejW                  d$       ee      fdefd%       Z,ejW                  d       ee      fde#defd&       Z-ejO                  d'       ee      fde#defd(       Z.ejO                  d)       ee      fd ee   defd*       Z/ejO                  d+       ee      fdefd,       Z0y).    )
get_or_404)	APIRouterDependsHTTPException)Session)castString)ListOptional)get_db)Asim)
AsimCreate
AsimUpdateAsimResponseAsimImportPeriode)UserUserRole)get_password_hashz	/api/asimASIM)prefixtagsasiminclude_rolereturnc                     | j                   j                  D ci c]#  }|j                  t        | |j                        % }}|r'| j                  r| j                  j
                  |d<   |S |rd |d<   |S c c}w )N	user_role)	__table__columnsnamegetattruserrole)r   r   cdatas       1/var/www/html/asim.com/backend/app/routes/asim.pyasim_to_responser&      sr    37>>3I3IJ3IaAFFGD!&&))3IDJ		 IINN[ K 
 [K Ks   (A5/)response_modelNsearch	is_activedbc                    |j                  t              }| r|j                  t        j                  j	                  d|  d      t        j
                  j	                  d|  d      z  t        t        j                  t              j	                  d|  d      z        }|"|j                  t        j                  |k(        }|j                  t        j                        j                         }|D cg c]  }t        |       c}S c c}w )N%)queryr   filter	full_nameilikenicknamer   no_asimr	   r*   order_byallr&   )r)   r*   r+   r.   asimsas         r%   get_all_asimr8      s     HHTNENN  1VHA/MM!F81./v&,,q];<

 T^^y89NN4<<(,,.E)./AQ///s   5D
z
/{asim_id}asim_idc                 @    t        |t        | d      }t        |d      S )Nr   T)r   )r   r   r&   )r9   r+   r   s      r%   get_asimr;   (   s    b$0DDt44    z/{asim_id}/set-roler"   c                 
   t        |t        | d      }|j                  st        dd      	 t	        |      }|j                  t              j                  t        j                  |j                  k(        j                         }|st        dd      ||_        	 |j                          d| t        |      dS # t
        $ r t        dd| d      w xY w# t        $ r |j                          t        d	d
      w xY w)u=   Ubah role user ASIM (asim → pengurus → super_admin, dst).r     zASIM belum memiliki akun userstatus_codedetailzRole tidak valid: z&. Pilihan: asim, pengurus, super_admini  zUser tidak ditemukan  zGagal mengubah role penggunazRole berhasil diubah menjadi )messager"   )r   r   user_idr   r   
ValueErrorr.   r   r/   idfirstr"   commit	Exceptionrollbackstr)r9   r"   r+   r   new_roler!   s         r%   set_asim_rolerM   -   s     b$0D<<4STTwD> 88D>  DLL!89??AD4JKKDIT
		 7xjA3x=YY  w6HNt4uvvw  T
4RSSTs   B= C =C'Dz/bulk-importr$   c                 @   	 |j                  t              j                          g }| D ]?  }|j                         }t        di |}|j	                  |       |j                  |       A 	 |j                          |D ]  }|j                  |        	 |D cg c]  }t        |       c}S # t        $ r |j                          t        dd      w xY wc c}w # t        $ r  t        $ r.}|j                          t        ddt        |             d }~ww xY w)NrB   z Gagal menyimpan data import ASIMr?   r>   zImport gagal:  )r.   r   delete
model_dumpaddappendrH   refreshrI   rJ   r   r&   rK   )r$   r+   resultsitem	item_dictr   r7   es           r%   bulk_import_asimrY   B   s	   O
D)I$)$DFF4LNN4 	 
	\IIK

4   
 .55W #W55  	\KKMC8Z[[	\ 6  O
nSVH4MNNOs<   A)C ,(B. C C+C .'CC D/)DDc                    | j                         }|j                  t              j                  t        j                  | j                  k(        j                         }|rR|j                         D ]  \  }}t        |||        	 |j                          |j                  |       t        |      S t        di |}|j                  |       	 |j                          |j                  |       t        |      S # t        $ r |j                          t        dd      w xY w# t        $ r |j                          t        dd      w xY w)NrB   Gagal memperbarui data ASIMr?   zGagal menyimpan data ASIM barurO   )rQ   r.   r   r/   r3   rG   itemssetattrrH   rT   rI   rJ   r   r&   rR   )r$   r+   rW   existingkeyvaluer   s          r%   create_asimra   Z   s   !Ixx~$$T\\T\\%ABHHJH#//+JCHc5) ,	WIIKJJx   )))DFF4LV
		


4 D!!  	WKKMC8UVV	W  V
4TUUVs   !C; !D% ;'D"%'Ec                 B   t        |t        | d      }|j                  d      }|j                         D ]  \  }}t	        |||        	 |j                          |j                  |       t        |      S # t        $ r |j                          t        dd      w xY w)Nr   T)exclude_unsetrB   r[   r?   )r   r   rQ   r\   r]   rH   rT   rI   rJ   r   r&   )r9   r$   r+   r   rW   r_   r`   s          r%   update_asimrd   r   s    b$0Dd3Ioo'
Uc5! (S
		


4 D!!  S
4QRRSs   !A7 7'Bz/allc                     | j                  t              j                          	 | j                          ddiS # t        $ r | j                          t        dd      w xY w)NrB   zGagal menghapus semua data ASIMr?   rC   z Semua data ASIM berhasil dihapus)r.   r   rP   rH   rI   rJ   r   )r+   s    r%   delete_all_asimrf      s]    HHTNW
		 9::  W
4UVVWs	   9 'A c                    ddl m} ddlm} ddlm} t        |t        | d      }|j                  |      j                  |j                  | k(        j                  |j                  d i       |j                  |      j                  |j                  | k(        j                          |j                  |      j                  |j                  | k(        j                          |j                  rM|j                  t              j                  t        j                  |j                  k(        j                          |j                  |       	 |j!                          d	d
iS # t"        $ r |j%                          t'        dd      w xY w)Nr   )
Assignment)Unavailability)AsimAreaUnavailabilityr   rB   zGagal menghapus data ASIMr?   rC   zASIM berhasil dihapus)app.models.assignmentrh   app.models.unavailabilityri   app.models.area_unavailabilityrj   r   r   r.   r/   r9   updaterP   rD   r   rF   rH   rI   rJ   r   )r9   r+   rh   ri   rj   r   s         r%   delete_asimro      s1   08Eb$0DHHZ
 2 2g =>EEzGYGY[_F`aHH^##N$:$:g$EFMMOHH#$++,B,J,Jg,UV]]_||
dgg56==?IIdOQ
		 .//  Q
4OPPQs   E" "'F	z/{asim_id}/create-accountc                    t        |t        | d      }|j                  rt        dd      |j                   d}t        t        |j                        t        |      t        j                  dd      }|j                  |       |j                          |j                  |_        	 |j                          d
d|j                   d| iS # t        $ r |j                          t        dd	      w xY w)Nr   r>   zASIM sudah punya akunr?   	asimSMTB!Tusernamepasswordr"   r*   must_change_passwordrB   zGagal membuat akun ASIMrC   z Akun berhasil dibuat. Username: z, Password: )r   r   rD   r   r3   r   rK   r   r   r   rR   flushrF   rH   rI   rJ   )r9   r+   r   default_passwordr!   s        r%   create_asim_accountrx      s    b$0D||4KLL,,y1T\\""#34]]!D FF4LHHJ77DLO
		 9$,,|TdSefgg  O
4MNNOs   (C 'C3z/import-periodec                     	 | st        dd      | D cg c]  }|j                  j                          }}t        |      t        t	        |            k7  rt        dd      | D cg c]  }|j
                   }}t        |      t        t	        |            k7  rt        dd      t	        |      }|j                  t              j                         }|D ci c]  }|j                  |j
                   }}|D ]  }d|j                  z    |_         |j                          g }	g }
g }| D ]  }|j                  j                         }|j                         }|j                  t              j                  t        j                  |k(        j                         }|r7|j                   }|j                         D ]  \  }}t!        |||        d|_        |j                          |j"                  r|j                  t$              j                  t$        j                  |j"                  k(        j                         }|rW|j
                   d}t'        |j
                        |_        t+        |      |_        d|_        d|_        |j                          |r|
j1                  |j
                         |	j1                  |j
                         t        di |}d|_        |j3                  |       |j                          |j
                   d}t%        t'        |j
                        t+        |      t4        j6                  dd	      }|j3                  |       |j                          |j                  |_        |j                          |j1                  |j
                          g }|j                  t              j                         D ]  }|j
                  d
k  s|j9                  |j                  d
      }||_        |j                  rzd|_        |j"                  rV|j                  t$              j                  t$        j                  |j"                  k(        j                         }|rd|_        |j1                  |       |j                           	 |j;                          dt        |	      t        |
      t        |      t        |      dtA        |	      tA        |
      tA        |      tA        |      ddS c c}w c c}w c c}w # t<        $ r |j?                          t        dd      w xY w# t         $ r  t<        $ r.}|j?                          t        ddt'        |             d}~ww xY w)u9  
    Import data ASIM untuk pergantian periode baru.
    Matching by phone_hp (wajib ada).

    - phone_hp cocok di DB (aktif/nonaktif) → update data + reset password akun
    - phone_hp tidak ada di DB              → buat ASIM baru + akun baru
    - phone_hp tidak ada di list import     → nonaktifkan
    r>   zData import kosongr?   z$Ada duplikat No HP dalam file importz&Ada duplikat No ASIM dalam file importi@B Trq   rr   r   FrB   z#Gagal menyimpan data import periodezImport periode selesai)updatedreactivatedcreateddeactivated)updated_nosreactivated_noscreated_nosdeactivated_nos)rC   summaryrA   zImport periode gagal: NrO   )!r   phone_hpstriplensetr3   r.   r   r5   rF   rv   rQ   r/   rG   r*   r\   r]   rD   r   rK   rs   r   rt   ru   rS   rR   r   r   getrH   rI   rJ   sorted)r$   r+   rowphones_in_filenos_in_fileincoming_phonesall_asimr7   original_nosr~   r   r   phonerow_dictr^   was_inactiver_   r`   r!   new_passwordnew_asimnew_userr   original_norX   s                            r%   import_perioder      s   }WC8LMM ;??$3#,,,,.$?~#c.&9"::C8^__ /33dss{{d3{s3{#344C8`aan- 88D>%%'19:Aaii:A!ADD.)AI 

 CLL&&(E~~'Hxx~,,T]]e-CDJJLH#+#5#55 #+.."2JCHc51 #3%)"
 ##88D>00H<L<L1LMSSUD*-++i'@(+CKK(8(9,(G481)-
#**3;;7&&s{{3  +(+%)"x 
"%++i8 -.|<!")- x 
#+;; 
""3;;/g n $##%Ayy1}*..qttQ7'	;;"'AKyy!xx~44TWW		5IJPPR-2DN#**;7
 &	_IIK 0{+"?3{+"?3	  &k2#)/#:%k2#)/#:	
 	
G @
 4 ;d  	_KKMC8]^^	_(   W
6LSQRVH4UVVWsa   U !T3U )T<A!U T;K4U 0B;U ,T# <AU U #'U

U V)VVz/create-all-accountsc                    | j                  t              j                  t        j                  dk(  t        j                  d k(        j                         }g }|D ]  }|j                   d}t        t        |j                        t        |      t        j                  dd      }| j                  |       | j                          |j                  |_        |j                  |j                          	 | j!                          dt)        |       d|d	S # t"        $ r | j%                          t'        dd      w xY w)
NTrq   rr   rB   z#Gagal membuat akun untuk semua ASIMr?   zBerhasil membuat z akun)rC   asim_numbers)r.   r   r/   r*   rD   r5   r3   r   rK   r   r   r   rR   rv   rF   rS   rH   rI   rJ   r   r   )r+   r6   r|   r   rw   r!   s         r%   create_all_asim_accountsr   @  s   HHTN!!$..D"8$,,$:NOSSUEG"ll^95&&'78!%
 	t

wwt||$ [
		 +3w<.>PWXX  [
4YZZ[s   6D 'D?)F)1app.helpers.crudr   fastapir   r   r   sqlalchemy.ormr   
sqlalchemyr   r	   typingr
   r   app.databaser   app.models.asimr   app.schemas.asimr   r   r   r   app.models.userr   r   app.core.securityr   routerbooldictr&   r   rK   r8   intr;   putrM   postrY   ra   rd   rP   rf   ro   rx   r   r   rO   r<   r%   <module>r      s   ' 5 5 " # !    T T * /	+VH	54 t   C\ 23  $&/0SM0~0 	0 40" L6)0 5c 5w 5 75 !"9@ Z3 Zc Zw Z #Z( ^D,>?;B6? O4
+ O O @O. S.07 "j "g " /". L6>Efo " "J "G " 7" v")&/ ; ; ; |,3FO 0 0' 0 0& ()4;FO h h' h *h. @G FW/0 FWg FW  FWR #$+26? Y Y %Yr<   