
    *h.                        S SK JrJrJrJr  S SKJr  S SKJr  S SK	J
r
Jr  S SKrS SKrS SKJr  \R                  " \R                   S\R"                  " S5      \R$                  " \R&                  5      /S	9  \R(                  " \5      rS
 r\" 5       rS r\R5                  S5      S 5       r\R5                  S5      S 5       r\R5                  S5      S 5       r\R<                  S 5       r\RA                  S5      S 5       r!\RA                  S5      S 5       r"\R5                  SS/S9S 5       r#\R5                  SS/S9S 5       r$\R5                  SS/S9S 5       r%\R5                  S S!/S9S" 5       r&\R5                  S#S/S9S$ 5       r'\S%:X  an  \(" S&5        \(" S'5        \(" S(5         \" 5         \(" S)5        \(" S*\RR                   S+\RT                   35        \(" S,5        \RW                  \RX                  S-S.S/9  gg! \- aE  r.\(" S0\. 35        \(" S15        \(" S25        \(" S35        \(" S45        \(" S55        \/" S65         Sr.C.gSr.C.ff = f)7    )Flaskrequestjsonifyrender_template)CORS)Config)dbClienteN)datetimez4%(asctime)s - %(name)s - %(levelname)s - %(message)szapp.log)levelformathandlersc                      [        [        5      n U R                  R                  [        5        [        U 5        [        R                  " U 5        U $ )N)r   __name__configfrom_objectr   r   r	   init_app)apps    =C:\Users\Juancito\Desktop\PROYECTOS\ActivarClientesMIG\app.py	crear_appr      s9    
/CJJ6" 	I KKJ    c                      [         R                  5          [        R                  " 5         [        R                  S5        [        R                  S5        [        R                  R                  5       n [        R                  SU  35        [        SU  S35        S S S 5        g ! , (       d  f       g = f! [         a  n[        R                  SU 35        [        SS 35        [        S	5        [        S 5        [        S
U 35        [        S5        [        S5        [        S5        [        S5        [        S S35        e S nAff = f)Nu%   ✅ Conexión a base de datos exitosau,   ✅ Tablas creadas/verificadas correctamenteu    📊 Clientes en base de datos: u.   
✅ Sistema listo - Base de datos conectada (z clientes registrados)u)   ❌ Error conectando a la base de datos: 
z2==================================================u&   ❌ ERROR DE CONEXIÓN A BASE DE DATOSzError: z
Verifique:u%   1. Que SQL Server esté ejecutándosez&2. Las credenciales en el archivo .envz03. Que la base de datos 'GestionClientes' exista)r   app_contextr	   
create_allloggerinfor
   querycountprint	Exceptionerror)r   es     r   verificar_conexion_bdr$   $   s   __MMOKK?@KKFG MM'')EKK:5'BCCE7J`ab   @DE6(m67smn5667@Ams6   B5 BB$B5 $
B2.B5 2B5 5
E
?BEE
z/testc                      [        SSS.5      $ )Nokz"Servidor funcionando correctamente)statusmessage)r    r   r   testr*   ?   s    d/STUUr   /c                  B    [         R                  S5        [        S5      $ )u   Página principalu   Acceso a página principal
index.html)r   r   r   r)   r   r   indexr.   C   s     KK,-<((r   z/static/<path:filename>c                 ,    [         R                  U 5      $ )u   Servir archivos estáticos)r   send_static_file)filenames    r   static_filesr2   I   s     ))r   c                     [         R                  S[        R                   S[        R                   35        [        R                  S:X  aB  [        R
                  (       a,  [         R                  S[        R                  " 5        35        g g g )Nu   🔍  POSTu   📝 Datos recibidos: )r   r   r   methodurlis_jsonget_jsonr)   r   r   log_request_infor:   O   s\    
KK%'q67~~GOO,W-=-=-?,@AB %4r     c                     [         R                  S[        R                   35        [        R                  R	                  S5      (       a$  [        SS[        R                   3/ SQS.5      S4$ [        S5      S4$ )	Nu   ❌ 404 - Ruta no encontrada: z/api/FzRuta no encontrada: )z/api/clientes [GET, POST]z /api/clientes/<id> [PUT, DELETE]z!/api/clientes/<id>/estado [PATCH]z/api/verificar-cliente [POST])successr"   available_routesr;   r-   )r   r"   r   r7   
startswithr   r   r"   s    r   	not_foundrA   V   ss    
LL1'++?@{{g&&+GKK=9!	
 	 	 		 <(#--r     c                     [         R                  SU  35        [        R                  R	                  5         [        SS[        U 5      S.5      S4$ )Nu    ❌ Error interno del servidor: FzError interno del servidor)r=   r"   detailsrB   )r   r"   r	   sessionrollbackr   strr@   s    r   internal_errorrH   g   sO    
LL3E7;<JJ-u:  		 r   z/api/clientesGET)methodsc                      [         R                  S5        [        R                  R	                  S5      n [        R                  R	                  S5      n[        R                  R	                  S5      nU (       d  U(       d  U(       a6  [         R                  SU  SU SU 35        [
        R                  " XU5      nO[
        R                  R                  5       n[         R                  S[        U5       S	35        [        S
U Vs/ s H  oDR                  5       PM     snS.5      $ s  snf ! [         a;  n[         R                  SU 35        [        S[        U5      S.5      S4s SnA$ SnAff = f)u4   Obtener todos los clientes o filtrar por parámetrosu!   📋 Obteniendo lista de clientesnitrazon_socialnombre_comercialu!   🔍 Buscando con filtros - NIT: 
   , Razón: 
, Nombre: u   ✅ Se encontraron z	 clientesT)r=   clientesu   ❌ Error obteniendo clientes: Fr=   r"   rB   N)r   r   r   argsgetr
   buscar_por_datosr   alllenr   to_dictr!   r"   rG   )rL   rM   rN   rQ   clienter#   s         r   obtener_clientesrZ   q   s+   A78llu%||''7"<<++,>?,"2KK;C5
<.Xbcsbtuv//CSTH}}((*H)#h-	BC:BC(w*(C
  	C A6qc:;53q6:;S@@As0   DD0 	D+
"D0 +D0 0
E5:0E0*E50E5r5   c                  l    [         R                  " 5       n [        R                  SU R	                  S5       35        U R	                  S5      (       a,  U R	                  S5      (       a  U R	                  S5      (       d%  [        R                  S5        [        SSS.5      S	4$ [        R                  R                  U S   S
9R                  5       nU(       a1  [        R                  SU S    35        [        SSU S    3S.5      S	4$ [        U S   U S   U S   U R	                  SS5      U R	                  SS5      U R	                  SS5      S9n[        R                  R                  U5        [        R                  R                  5         [        R                  SUR                   35        [        SUR!                  5       SS.5      S4$ ! ["         aY  n[        R                  R%                  5         [        R'                  SU 35        [        S[)        U5      S.5      S4s SnA$ SnAff = f)zCrear un nuevo clienteu#   ➕ Creando nuevo cliente con NIT: NITRazonSocialNombreComercialu(   ❌ Datos incompletos para crear clienteFz1NIT, RazonSocial y NombreComercial son requeridosrR     )r\   u   ❌ Ya existe cliente con NIT: zYa existe un cliente con NIT EstadoActivoTUsuarioModificacionSistemaObservaciones )r\   r]   r^   r`   ra   rc   u!   ✅ Cliente creado exitosamente: zCliente creado exitosamente)r=   rY   r(      u   ❌ Error creando cliente: rB   N)r   r9   r   r   rT   warningr   r
   r   	filter_byfirstr	   rE   addcommitr\   rX   r!   rF   r"   rG   )datoscliente_existentenuevo_clienter#   s       r   crear_clientern      s   ,A  "9%))E:J9KLM yyuyy'?'?uyyQbGcGcNNEF L    $MM33e3EKKMNN<U5\NKL 8uG     em,!"34>48 %		*? K))OR8
 	

}%


78I8I7JKL$,,.4
  	 	  A


21#6753q6:;S@@As-   B"G %A%G CG 
H3AH.(H3.H3z/api/clientes/<int:cliente_id>PUTc                     [         R                  SU  35        [        R                  R	                  U 5      n[
        R                  " 5       nSU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul	        SU;   a
  US   Ul
        SU;   a
  US   Ul        [        R                  " 5       Ul        [        R                   R#                  5         [         R                  SUR$                   35        ['        SUR)                  5       S	.5      $ ! [*         aY  n[        R                   R-                  5         [         R/                  S
U 35        ['        S[1        U5      S.5      S4s SnA$ SnAff = f)zActualizar un cliente existenteu    ✏️ Actualizando cliente ID: r]   r^   r`   ra   rc   u   ✅ Cliente actualizado: Tr=   rY   u    ❌ Error actualizando cliente: FrR   rB   N)r   r   r
   r   
get_or_404r   r9   r]   r^   r`   ra   rc   r   utcnowFechaModificacionr	   rE   rj   r\   r   rX   r!   rF   r"   rG   )
cliente_idrY   rk   r#   s       r   actualizar_clienterv      sR   A6zlCD--**:6  " E!"'"6G%&+,=&>G#U"#(#8G  E)*/0E*FG'e#$)/$:G!$,OO$5!


/}=>(
  	
  A


7s;<53q6:;S@@As   DD 
E7AE2,E72E7z%/api/clientes/<int:cliente_id>/estadoPATCHc                 F    [         R                  SU  35        [        R                  R	                  U 5      n[
        R                  " 5       nUR                  nUR                  SUR                  (       + 5      Ul        UR                  SS5      Ul	        [        R                  " 5       Ul        UR                  S5      (       a
  US   Ul        [        R                  R!                  5         [         R                  SUR"                   SU SUR                   35        [%        S	UR'                  5       S
.5      $ ! [(         aY  n[        R                  R+                  5         [         R-                  SU 35        [%        S[/        U5      S.5      S4s SnA$ SnAff = f)zActivar o desactivar un clienteu&   🔄 Cambiando estado del cliente ID: r`   ra   rb   rc   u   ✅ Estado cambiado - Cliente: z, z -> Trq   u(   ❌ Error cambiando estado del cliente: FrR   rB   N)r   r   r
   r   rr   r   r9   r`   rT   ra   r   rs   rt   rc   r	   rE   rj   r\   r   rX   r!   rF   r"   rG   )ru   rY   rk   estado_anteriorr#   s        r   cambiar_estado_clienterz      sR   A<ZLIJ--**:6  "!..$yyW=Q=Q9QR&+ii0Ey&Q#$,OO$5!99_%%$)/$:G!


5gkk]"_DUUYZaZnZnYopq(
  	
  A


?sCD53q6:;S@@As   D:D= =
F AFF F z/api/verificar-clientec                      [         R                  " 5       n U R                  S5      nU R                  S5      nU R                  S5      n[        R	                  SU SU SU 35        U(       d  U(       d  U(       d  [        SSS	.5      S
4$ [        R                  " XU5      nU(       d%  [        R	                  S5        [        SSSSS.5      $ US   n[        R	                  SUR                   SUR                   35        [        SSUR                  5       UR                  (       a  SOSUR                  S.5      $ ! [         a;  n[        R                  SU 35        [        S[        U5      S	.5      S4s SnA$ SnAff = f)uJ   Verificar estado de un cliente por NIT, Razón Social y/o Nombre Comercialr\   r]   r^   u    🔍 Verificando cliente - NIT: rO   rP   Fz=Debe proporcionar al menos NIT, RazonSocial o NombreComercialrR   r_   u   🔍 Cliente no encontradoTNO_ENCONTRADOz)Cliente no encontrado en la base de datos)r=   
encontradoestadomensajer   u   ✅ Cliente encontrado: z - Estado: ACTIVO	BLOQUEADO)r=   r}   rY   r~   puede_accederu   ❌ Error verificando cliente: rB   N)r   r9   rT   r   r   r   r
   rU   r\   r`   rX   r!   r"   rG   )rk   rL   rM   rN   rQ   rY   r#   s          r   verificar_clienter      s{   'A  "iiyy/ 99%676se:l^S]^n]opq|'7 X   
 ++C?OPKK45#)F	   1+.w{{m;wG[G[F\]^(")"6"6hK$11
  	  A6qc:;53q6:;S@@As,   B
E  AE  A/E   
F
0F :F F__main__z=
============================================================u.   🚀 INICIANDO SISTEMA DE GESTIÓN DE CLIENTESz<============================================================u$   🌐 Servidor: http://localhost:5000u   🗄️ Base de datos: \z=============================================================
z0.0.0.0i  )debughostportu   
❌ Error iniciando servidor: z
Pasos para solucionar:u/   1. Verifique que SQL Server esté ejecutándosez$2. Confirme las credenciales en .envu>   3. Asegúrese de que la base de datos 'GestionClientes' existauB   4. Instale el driver ODBC 17 para SQL Server si no está instaladoz
Presione Enter para salir...)0flaskr   r   r   r   
flask_corsr   r   r   modelsr	   r
   loggingsysr   basicConfigINFOFileHandlerStreamHandlerstdout	getLoggerr   r   r   r   r$   router*   r.   r2   before_requestr:   errorhandlerrA   rH   rZ   rn   rv   rz   r   r    	DB_SERVERDB_DATABASErunDEBUGr!   r#   inputr)   r   r   <module>r      s   : :     
    
,,AI&cjj) 
		8	$
 k6 7V V 3) )
 $%* &*
 C C #. .  #  ?UG,A -A. ?VH-.A ..A` +eW= A > AD 2WIFA GA8 #fX6)A 7)AV z	-	
:;	&M046'(8(8'9F<N<N;OPQmfll>   0045()?@45NORS.//0s   -AH I	;I		I