
    +Gh#/              
       R   d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	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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)m*Z*m+Z+  e       Z, e         ejZ                  dd      Z.e,j_                  d       ee#      fde0fd       Z1e,j_                  d      d ee#      fde2de0fd       Z3e,j_                  d      dg  ee#      fde0fd       Z4e,j_                  d      d ee#      fde0fd       Z5e,j_                  de       ee#      fde0fd        Z6e,j_                  d!       ee#      fd"e2de0fd#       Z7e,jq                  d$       ed%       ed       ee#      fd&e2d'e2d(ede0fd)       Z9e,jq                  d*       ee#      fd+e2de0fd,       Z:e,jw                  d-       ee#      fde0fd.       Z<e,jq                  d/       ee#      fd&e2d0ede0fd1       Z=e,j_                  d2e	e          ee#      fde0fd3       Z>e,j_                  d4e	e          ee#      fde0fd5       Z?e,j_                  d6       ee#      fde0fd7       Z@e,j_                  d8       ee#      fd9e2de0fd:       ZAy);    N)	APIRouterDependsHTTPExceptionFile
UploadFile)Pagepaginate)"disable_installed_extensions_check)descfunc)
joinedload)	EmojiType)CodeScan)Notification)Role)User)UserBase
UserUpdateUserPasswordUpdate)send_otp_email)check_token_validitypwd_context)get_random_intgenerate_otp)filter_by_periodget_enterprise_statsget_start_date_for_periodFILE_STORAGE_PATHfilesz/particular-dashboard-infodependenciesc                    | \  }}|j                  t              j                  t        j                  |j                  k(        }|j                  t        t        j                        t        t        j                              j                  t        t        j                              j                  d      j                         }d}t        ||      }|j                         }|j                  t        j                   t        j"                              j                  t        j                  |j                  k(  t        j$                  t'        |      k\        j)                         xs d}|j                  t*              j                  t*        j,                  |j                  k(  t*        j$                  t'        |      k\        j                         }|dz  }	d|||||	dS )N    r   
   T)statusreviewstotal_scanstotal_pointssponsorshipssponsorships_points)queryr   filteruser_ididoptionsr   usercompanyorder_byr   limitallr   countr   sumpoints
created_atr   scalarr   
sponsor_id)
r    dbr0   scans_queryscansperiodr'   r(   r)   r*   s
             H/Users/theessential/Documents/Github/Lekema-Backend/app/routers/users.pyparticular_dashboard_infor@      s}   HB((8$++H,<,<,GHK 	Jx}}5z(BRBR7ST	$x{{#	$	q		 
 F #;7K ##%K 88DHHX__56==DGG#8@@ fh   88D>((477"4V<< eg  '+ "$$2     z/entreprise-dashboard-infor#   r>   c                    |\  }}|j                  t              j                  t        j                  |j                  k(        }|j                  t        t        j                        t        t        j                              j                  t        t        j                              j                  d      j                         }t        | ||      S )Nr"   )r>   r=   r    )r+   r   r,   
company_idr.   r/   r   r0   r1   r2   r   r3   r4   entreprise_stats)r>   r    r;   r0   r<   r=   s         r?   entreprise_dashboard_inforE   M   s    HB((8$++H,?,?477,JKK 	Jx}}5z(BRBR7ST	$x{{#	$	q		 
 6\RRrA   z/entreprise-statsc                 (    |\  }}t        ||| |      S N)r   )r>   r=   r    r;   r0   s        r?   rD   rD   ^   s    HBD&%88rA   z/particular-statsc                    |\  }}|j                  t              j                  t        j                  |j                  k(        }t        ||       }|j                         }|j                  t        j                  t        j                              j                  t        j                  |j                  k(  t        j                  t        |       k\        j                         xs d}|j                  t              j                  t        j                  |j                  k(  t        j                  t        |       k\        j                         }|dz  }d||||dS )Nr   r$   T)r%   r'   r(   r)   r*   )r+   r   r,   r-   r.   r   r5   r   r6   r7   r8   r   r9   r   r:   )	r>   r    r;   r0   r<   r'   r(   r)   r*   s	            r?   particular_statsrI   e   s'   HB ((8$++H,<,<,GHK #;7K ##%K 88DHHX__56==DGG#8@@ fh   88D>((477"4V<< eg  '+ "$$2 rA   z/show)response_modelc                     | \  }}|j                  t              j                  t        j                  |j                  k(        j	                         }|S rG   )r+   r   r,   r.   firstr    r;   r0   db_users       r?   	read_userrO      s>    HBhhtn##DGGtww$67==?GNrA   z/get-user-by-qrcode/{qrcode}qrcodec                    |\  }}|j                  t              j                  t        j                  | k(        j	                         }|sdddS |j                  t
              j                  t
        j                  |j                  k(        j                  t
        j                  j                               j	                         }|rGt        j                  j                         |j                  z
  t        j                  d      k  rdddS t        j                  j                         t        j                  t        j                  j                         j                               z
  }|j                  t
              j                  t
        j                  |j                  k(  t
        j                  | k(  t
        j                  |k\        j                         }|dk\  rdd	dS d
|dS )NF   Utilisateur non trouvér%   messager   )hoursz<Vous devez attendre 1 heure avant de scanner un nouveau code)days   ua   Vous avez déjà scanné ce code deux fois cette semaine. Veuillez attendre la semaine prochaine.T)r%   r0   )r+   r   r,   qr_coderL   r   r-   r.   r2   r8   r   datetimenow	timedeltaweekdayr5   )rP   r    r;   r0   rN   	last_scanstart_of_weekscans_this_weeks           r?   get_user_by_qr_coder`      s   HB hhtn##DLLF$:;AACG,EFF "))(*:*:dgg*EFOOPXPcPcPhPhPjkqqsIh''++-	0D0DDHZHZabHcc,jkk %%))+h.@.@""$,,./0 0Mhhx(//DGG#F"}, eg	  "~@ 	@
  rA   z
/{user_id}.r-   	user_dataavatarc                   K   |\  }}t        j                  |      }	 |j                  t              j	                  t        j
                  | k(        j                         }|t        dd      |j                         j                         D ]  \  }}	|		t        |||	        |r|j                  j                  d      d   }
t        j                  j                  t         t#        d       d|
       }t%        |d      5 }|j'                  |j)                          d {          d d d        ||_        |j-                          |j/                  |       |j                  t0              j	                  t0        j
                  |j2                  k(        j                         }||_        dd	|d
S 7 # 1 sw Y   xY w# t6        $ r}dt9        |      dcY d }~S d }~ww xY ww)N  User not foundstatus_codedetail.r$   wbTu%   Utilisateur mis à jour avec succès!)r%   rT   r0   FrS   )r   model_validate_jsonr+   r   r,   r.   rL   r   
model_dumpitemssetattrfilenamesplitospathjoinr   r   openwritereadrb   commitrefreshr   role_idrole	Exceptionstr)r-   ra   rb   r    r;   r0   user_updaterN   keyvaluefile_extensionavatar_pathf	role_useres                  r?   update_userr      s     HB00;K 
((4.''7(:;AAC?C8HII%00288: 	-JC e,	- #__2237;N'',,'8^B=O<PPQR`Qa:bcKk4( -Afkkm+,-(GN
		


7HHTN))$''W__*DEKKM	  >
 	
 ,- -   
1v
 	

sg   G(A8G A-G F8#F6
$F8,B	G 5G(6F88G=G 	G%G G%G( G%%G(z/verify-emailemailc                 j   |\  }}|j                  t              j                  t        j                  |j                  k(        j	                         }|t        dd      t               }| |_        d|_        ||_	        t        | |       |j                          |j                  |       d|ddS )Nrd   re   rf   F)to_emailotpu   Otp envoyé avec succès!)r%   r   rT   )r+   r   r,   r.   rL   r   r   r   email_verifyr   r   rx   ry   )r   r    r;   r0   rN   r   s         r?   verify_emailr      s    HBhhtn##DGGtww$67==?G4DEE
.CGM GGKEs+IIKJJw . rA   z/delete-accountc                 n   | \  }}|j                  t              j                  t        j                  |j                  k(        j	                         }|t        dd      d|_        |j                  dz   |_        |j                  dz   |_        |j                          |j                  |       dddS )	Nrd   re   rf   r   _oldTu   Compte supprimé avec succès!rS   )r+   r   r,   r.   rL   r   r%   r   phonerx   ry   rM   s       r?   delete_accountr      s    HBhhtn##DGGtww$67==?G4DEEGNMMF*GMMMF*GMIIKJJw 3 rA   z/update-password/{user_id}user_update_passwordc                   K   |\  }}	 |j                  t              j                  t        j                  | k(        j	                         }|t        dd      t        j                  |j                  |j                        sdddS t        j                  |j                        }||_	        |j                          |j                  |       dddS # t        $ r}dt        |      dcY d }~S d }~ww xY ww)	Nrd   re   rf   FzMot de passe incorrect!rS   Tu&   Mot de passe mis à jour avec succès!)r+   r   r,   r.   rL   r   r   verifyold_passwordpasswordhashnew_passwordrx   ry   r|   r}   )r-   r   r    r;   r0   rN   hashed_passwordr   s           r?   update_passwordr   	  s      HB
((4.''7(:;AAC?C8HII!!"6"C"CT]]S4 
 &**+?+L+LM*
		


7 ?
 	

  
1v
 	

sB   C:B C 	C:
AC C:	C7C2,C7-C:2C77C:z/get-all-particularsc                 f   | \  }}|j                  t              j                  t        j                  dk(        j	                         }|j                  t
              j                  t
        j                  |j                  k(  t
        j                  dk(        j                         }t        |      S )NParticulier   r+   r   r,   labelrL   r   rz   r.   r%   r4   r	   )r    r;   r0   r{   db_particularss        r?   get_all_particularsr   *  sz    HB88D>  }!<=CCEDXXd^**4<<477+BDKKSTDTUYY[NN##rA   z/get-all-enterprisesc                 f   | \  }}|j                  t              j                  t        j                  dk(        j	                         }|j                  t
              j                  t
        j                  |j                  k(  t
        j                  dk(        j                         }t        |      S )N
Entrepriser   r   )r    r;   r0   r{   db_enterprisess        r?   get_all_enterprisesr   3  sz    HB88D>  |!;<BBDDXXd^**4<<477+BDKKSTDTUYY[NN##rA   z/admin-statsc                    | \  }}|j                  t              }|j                         }t        |d      j                         }|j                  t              j                  t        j                  dk(        j                         }|j                  t              j                  t        j                  |j                  k(        j                         }|j                  t              j                  t        j                  dk(        j                         }|j                  t              j                  t        j                  |j                  k(        j                         }	d||||	dS )Nmonthr   r   T)r%   r'   monthly_scansenterprisesparticulars)r+   r   r5   r   r   r,   r   rL   r   rz   r.   )
r    r;   r0   r<   r'   r   enterpriseRoler   particularRoler   s
             r?   admin_statsr   ;  s   HB((8$K ##%K %[':@@BM XXd^**4::+EFLLNN((4.''8I8I(IJPPRK XXd^**4::+FGMMON((4.''9J9J(JKQQSK "&"" rA   z/get-enterprise-by-id/{id}r.   c                     |\  }}|j                  t              j                  t        j                  | k(        j	                         }|sdddS t        ||dg       }d||dS )NFrR   rS   r#   T)r%   r0   stats)r+   r   r,   r.   rL   r   )r.   r    r;   r0   rN   r   s         r?   get_enterprise_by_idr   Y  sl    HB hhtn##DGGrM288:G,EFF !Wb"5E  rA   )BrY   rr   fastapir   r   r   r   r   fastapi_paginationr   r	   fastapi_pagination.utilsr
   
sqlalchemyr   r   sqlalchemy.ormr   app.enums.emoji_typer   app.models.code_scanr   app.models.notificationr   app.models.roler   app.models.userr   app.schemas.userr   r   r   app.services.emailr   app.utils.authentificationr   r   app.utils.helpersr   r   app.utils.statsr   r   r   routergetenvr   gettupler@   r}   rE   rD   rI   rO   r`   putr   r   deleter   r   r   r   r   r    rA   r?   <module>r      s[    	 G G - G ! % * ) 0     E E - H : ] ]	 " $BII17;  (+4;<P4Q ,E , ,,` (),.gNbFc Sc Se S *S   bH\@] 9 9 !9  g>R6S !e ! !!H GH-$+,@$A E  . *+;BCW;X  5  ,B L59#YUYZ^U_,34H,I%
s %
s %

 %
$)%
 %
P O3:;O3P  5  .  !)01E)F   "& ()078L0M
3 
>P 
(-
 *
@ "4>B.56J.K $e $ C$ "4>B.56J.K $e $ C$ N&-.B&C e  : ()8?@T8U S   *rA   