
    iy                        S SK J r   S SKJr  S SKJr  S SKrS SKrS SKrS SKJ	r	J
r
JrJrJr  S SKJrJr  S SKJrJrJrJrJrJrJr  S SKJr  S SK J r   S SKrS SKrS SKJr  S S	KJr  S SKr\R<                  " \5      r S
r!S
q"S
q#S
q$Sr%S r&g)    )datetime)generate_password_hash)_N)	Blueprintrender_templatejsonifyrequestsession)Flaskrender_template_string)get_companiesget_divisions_by_company'get_departments_by_company_and_divisionget_RequestTypeinsert_user_requestget_Correo_Solicitud_de_altaget_divisions_by_id)MIMEMultipart)MIMEText z7marisol.garcia@igsa.com.mx,markjisol.garcia@igsa.com.mxc                    ^	^
^^^  " U
4S jS5      m	[         R                  " [         R                  S9  [         R                  " [        5      m
U R                  S5      S 5       nU R                  S5      S 5       nU R                  S5      S	 5       nU R                  S
5      S 5       nU R                  S5      S 5       nU R                  S5      S 5       n[        S[        5      nS mS mS mU R                  SS/S9U	UUU4S j5       ng )Nc                   6   > \ rS rSrSS jrSU 4S jjrS rSrg)	(PreRegister_routes.<locals>.EmailService*   Nc                 b   U=(       d     [         R                  R                  SS5      U l        U=(       d     [         R                  R                  SS5      U l        [         R                  R                  SS5      U l        [        [         R                  R                  SS5      5      U l        g	)
u   
Inicializa el servicio de correo electrónico.

Args:
    sender_email (str): Correo electrónico del remitente
    sender_password (str): Contraseña del correo electrónico
EMAIL_SENDERzelephantSyC@igsa.com.mxEMAIL_PASSWORDz	5lEph@n12SMTP_SERVERzsmtp.office365.com	SMTP_PORTiK  N)osenvirongetsender_emailsender_passwordsmtp_serverint	smtp_port)selfr#   r$   s      NC:\Users\victor.barrera\Documents\proyectos\elepV3\Elep\src\App\PreRegister.py__init__1PreRegister_routes.<locals>.EmailService.__init__+   sr     !- i

~Oh0iD#2#cbjjnnEUWb6cD !zz~~m=QRD S!ABDN    c                 *  > Sn[        U5      nSR                  U Vs/ s H  oUS   PM	     sn5      nSn[        U5      nSR                  U Vs/ s H  oUS   PM	     sn5      nSn[        U5      n	SR                  U	 Vs/ s H  oUS   PM	     sn5      n
U(       d  / nU(       a   UR                  UR                  S5      5        U(       a   UR                  UR                  S5      5        U
(       a   UR                  U
R                  S5      5        [        (       a$  UR                  [        R                  S5      5        U Vs/ s H)  oR                  5       (       d  M  UR                  5       PM+     nnUR                  SS5      nS	S
SSS.nUR                  US5      nUnU R                  U5      n U(       d  TR                  S5        g[        5       nU R                  US'   SR                  U5      US'   UUS'   UR                  [        US5      5        [        R                  " U R                  U R                   5       nUR#                  5         UR%                  U R                  U R&                  5        UR)                  U5        SSS5        TR+                  SSR                  U5       35        gs  snf s  snf s  snf s  snf ! , (       d  f       NF= f! [,         a'  nTR                  S[/        U5       35         SnAgSnAff = f)u>  
Envía una notificación por correo electrónico sobre una nueva solicitud de alta.

Args:
    request_data (dict): Datos de la solicitud
    recipients (list): Lista de correos electrónicos a los que enviar la notificación
    
Returns:
    bool: True si el correo se envió correctamente, False en caso contrario
   , Correos      ,RequestTypeIDr   #Nueva solicitud de alta de empleadoz#Nueva solicitud de distribuidor EUAu'   Nueva solicitud de distribuidor Canadá'   Nueva solicitud de distribuidor MéxicoEMPLEADODISEUADISCAN   DISMÉXNueva solicitud de altaz*No hay destinatarios para enviar el correoFFromToSubjecthtmlNzCorreo enviado exitosamente a TError al enviar correo: )r   joinextendsplitvar_correo_mexstripr"   _build_email_bodyerrorr   r#   attachr   smtplibSMTPr%   r'   starttlsloginr$   send_messageinfo	Exceptionstr)r(   request_data
recipientsidcorreos_empitemvar_correo_empleados
correos_EUvar_correo_norteamerica_EUcorreos_CANvar_correo_norteamerica_CAN
email_listemailrequest_typesubject_mappingsubjectTitulo	html_bodymessageservereloggers                        r)   send_registration_notificationGPreRegister_routes.<locals>.EmailService.send_registration_notification8   s    B6r:K#'99+-V+$9o+-V#W B5b9J)-PZ3[PZOPZ3[)\&B6r:K*.))Q\4]Q\)_Q\4]*^' 
'%%&:&@&@&EF-%%&@&F&Fs&KL.%%&A&G&G&LM!>%%n&:&:3&?@ :DU{{}mekkm
U'++OR@L B?CD	O &)),8QRGF..|<I!LL!MN  (/"&"3"3 $		* 5%,	" x	6:; \\$"2"2DNNCvOO%LL!2!2D4H4HI''0 D
 <TYYz=R<STU .W 4\ 5^  VB DC  7Ax@AsU   J<K KK"K7K! A8K! AK+K! 
KK! !
L+LLc                 j   UR                  SS5      nUR                  SS5      nUR                  SS5      n[        U5      nU(       aF  [        U5      S:  a7  US   S   nUR                  S5      R                  S	5      R                  S
5      nSSSSS.nUR                  US5      nUn	SU	 S3n
US:X  a  U
SUR                  SS5       SUR                  SS5       SUR                  SS5       SUR                  SS5       SUR                  SS5       SUR                  SS5       SUR                  SS5       SUR                  S S5       S!W S"UR                  S#S5       S$3-  n
OU
S%UR                  S&S5       S'UR                  S(S5       S)UR                  SS5       S*UR                  S+S5       S,3	-  n
US-:X  a  U
S.UR                  S/S5       S03-  n
US1:X  a  U
S2UR                  S3S5       S03-  n
US4:X  a  U
S5UR                  S3S5       S03-  n
U
S6UR                  S7S5       S83-  n
U
$ )9u   
Construye el cuerpo del correo electrónico en HTML.

Args:
    request_data (dict): Datos de la solicitud

Returns:
    str: Cuerpo del correo en HTML
	RequestIDzN/Ar4   r   
DivisionIDr   Divisionz()z''z""r5   z-Nueva solicitud de distribuidor Norte Americar6   r7   r<   a<  
            <!DOCTYPE html>
            <html>
            <head>
                <style>
                html, body { 
                margin: 0;
                padding: 0;
                width: 100%;
                font-family: 'Montserrat', sans-serif;
            }
            .container { 
            width: 600px;  /* Ancho fijo en lugar de max-width */
            margin: 0 auto;
            padding: 20px;
            box-sizing: border-box;
            }
            body { 
                display: flex;
                justify-content: center;
                align-items: center;
                flex-direction: column;
                text-align: center;
            }
            .main-content {
                width: 100%;
                max-width: 600px;
                margin: 0 auto;
                text-align: center;
            }
            .title { 
                color: #2a5885; 
                font-size: 16px; 
                margin: 15px 0;
                font-weight: 600;
                text-align: center;
                width: 100%;
            }
            .message { 
                font-size: 12px; 
                margin: 0 auto 15px auto;
                text-align: center;
                max-width: 450px;
            }
            .data-table { 
                width: 100%;
                max-width: 600px;
                margin: 0 auto;
                border-collapse: collapse;
                border-spacing: 0;
                table-layout: fixed; /* Fija el ancho de la tabla */
            }
        
                
            .data-table th { 
                text-align: left; 
                padding: 8px 10px; 
                font-size: 10px; 
                margin: 0;
                line-height: 1.3;
                vertical-align: top;
                width: 10%
                overflow: hidden;
                background-color: #f2f2f2; 
                font-weight: 600;
            }
            .data-table td { 
                text-align: left; 
                padding: 8px 10px; 
                font-size: 10px; 
                margin: 0;
                line-height: 1.3;
                vertical-align: top;
                width: 70%;
                word-wrap: break-word; /* Permite que las palabras se corten */
                overflow-wrap: break-word; /* Para navegadores modernos */
                hyphens: auto; /* Permite guiones para palabras largas */
                word-break: break-word;
            }
                .data-table { 
        width: 100%;      /* Ocupa el 100% del contenedor */
        table-layout: fixed;  /* Crucial para controlar el ancho */
        border-collapse: collapse;
    }
            p {
                font-size: 12px; 
                margin-bottom: 8px; 
                text-align: center;
            }
            .data-table tr { height: auto; margin: 0; padding: 0; }
            .footer { 
                font-size: 10px; 
                color: #777; 
                margin: 15px auto;
                text-align: center;
                width: 100%;
            }
            .color1 { background-color: rgb(192, 197, 228); }
            .color2 { background-color: rgb(238, 238, 241); }
        .color3 { background-color: rgb(238, 238, 241); }
        
        
            td { 
                font-size: 12px;  
                }
                
            th { 
                font-size: 12px;  
                }
                
                
            </style>
            </head>
            <body>
                <div class="container">
                    <h2>u    </h2>
                    <p>Se ha registrado un nuevo usuario en la plataforma de elephant.  Por favor, revise la información .</p>
                    <br>
                    <table>
                        
                    
            r8   a  
                        <tr>
                        <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left; width: 10%; ">Nombre</th>
                            <td class="color1" style="text-align: left; width: 30%;">	FirstName 
MiddleNameLastNameSecondLastNameuz  </td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                        <tr>
                        <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left;  width: 10%;">Correo Electrónico</th>
                            <td class="color2" style="text-align: left;  width: 30%;">CorporateEmailut  </td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left;  width: 10%;">Teléfono</th>
                            <td class="color1" style="text-align: left;  width: 30%;">ContactPhoneu|  </td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left; width: 10%;">Número de Empleado</th>
                            <td class="color2" style="text-align: left; width: 30%;">EmployeeNumberus  </td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left; width: 10%;">Compañía</th>
                            <td class="color1" style="text-align: left; width: 30%;">	CompanyIDur  </td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left; width: 10%;">División</th>
                            <td class="color2" style="text-align: left; width: 30%;">a  </td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                        
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left; width: 10%;">Puesto</th>
                            <td class="color1" style="text-align: left; width: 30%;">Positionz</td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                        
                        
                u  
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left;  width: 10%;">Razón Social</th>
                            <td class="color1" style="text-align: left;  width: 30%;">BusinessNameu  </td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                    
                    
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left; width: 10%;">Correo Electrónico</th>
                            <td class="color2" style="text-align: left; width: 30%;">ContactEmailur  </td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left; width: 10%;">Teléfono</th>
                            <td class="color1" style="text-align: left; width: 30%;">a  </td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                    
                        
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left; width: 10%;">Estado</th>
                            <td class="color2" style="text-align: left; width: 30%;">Statezp</td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                r;   a  
                        <tr>
                        <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left;  width: 10%; ">RFC</th>
                            <td class="color1" style="text-align: left;  width: 30%;">RFCzt</td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                    r9   a  
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left; width: 10%;">Ciudad</th>
                            <td class="color1" style="text-align: left;width: 30%; ">Cityr:   a  
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left; width: 10%;">Ciudad</th>
                            <td class="color1" style="text-align: left; width: 30%;">a  
                        <tr>
                            <th style=" width: 30%;" ></th>
                            <th class="color3" style="text-align: left; width: 10%;">Comentarios</th>
                            <td class="color2" style="text-align: left;   width: 30%;">Commentsu  </td>
                            <th style=" width: 30%;" ></th>
                        </tr>
                    </table>
                    
                    
                    
                    <div class="footer">
                        <p style ="font-size: 8px; ">Este es un correo automático. Por favor no responda a este mensaje.</p>
                    </div>
                </div>
            </body>
            </html>
            )r"   r   lenrF   )r(   rR   
request_idr^   rk   	Division_rl   r_   r`   ra   r@   s              r)   rG   :PreRegister_routes.<locals>.EmailService._build_email_body   s    &))+u=J'++OR@L%)),;J+Z8IS^a/$Q<
3#>>$/55d;AA$G
 BIID	O &)),8QRGFsf   !gyDx z) V WcVfVfgrtvVwUxxy  {G  {K  {K  LX  Z\  {]  z^  ^_  `l  `p  `p  q{  }  `@  _A  AB  CO  CS  CS  Td  fh  Ci  Bj jW XdWgWghxz|W}V~ W XdWgWghvxzW{V| }V WcVfVfgwy{V|U} ~V WcVfVfgrtvVwUx yV W_U_ `V WcVfVfgqsuVvUw xS. .`  W XdWgWghvxzW{V| }V WcVfVfguwyVzU{ |V WcVfVfguwyVzU{ |V WcVfVfgnprVsUt u5 @  9, !W XdWgWghmoqWrVs t	 D  8+ !V WcVfVfgmoqVrUs t	 D  8+ !V WcVfVfgmoqVrUs t	 D  X YeXhXhisuwXxWy z	 D& Kr,   )r#   r$   r'   r%   )NN)N)__name__
__module____qualname____firstlineno__r*   rg   rG   __static_attributes__)rf   s   r)   EmailServicer   *   s    	CQ	f^	r,   r   )levelz/registrationc                       [        5       n U (       d
  [        SSS9$ [        SU / / S9$ ! [         a"  n[        SU 35        [        SSS9s SnA$ SnAff = f)uM   
Renderiza la página de registro principal con las compañías disponibles.
registration.html*   No se encontraron compañías disponibles.rH   )	companies	divisionsdepartmentsz[Error en /registration]: u1   Ocurrió un error inesperado. Intenta más tarde.N)r   r   rP   print)r   re   s     r)   registration(PreRegister_routes.<locals>.registration  sm    
	s%I&':Bnoo"##	   	s.qc23"#6>qrr	ss   ) ) 
AA
AAz"/get_divisions/<string:company_id>c                      [        U 5      nU(       d  [        SS05      S4$ [        U5      $ ! [         a'  n[        SU 35        [        SS05      S4s SnA$ SnAff = f)u@   
Obtiene divisiones por compañía ID y las devuelve como JSON.
rH   u2   No se encontraron divisiones para esta compañía.  z[Error en /get_divisions]: u3   Ocurrió un error inesperado al obtener divisiones.  N)r   r   rP   r   )
company_idr   re   s      r)   get_divisions_Preregister5PreRegister_routes.<locals>.get_divisions_Preregister  sp    
	b0<I)]^_addd9%% 	b/s34G%Z[\^aaa	b    . 
. 
AAAAz9/get_departments/<string:company_id>/<string:division_id>c                      [        X5      nU(       d  [        SS05      S4$ [        U5      $ ! [         a'  n[        SU 35        [        SS05      S4s SnA$ SnAff = f)uY   
Obtiene departamentos filtrados por compañía y división ID y los devuelve como JSON.
rH   u4   No se encontraron departamentos para esta división.r   z[Error en /get_departments]: u6   Ocurrió un error inesperado al obtener departamentos.r   N)r   r   rP   r   )r   division_idr   re   s       r)   get_departments_Preregister7PreRegister_routes.<locals>.get_departments_Preregister  sp    
	eA*ZK)_`acfff;'' 	e1!56G%]^_addd	er   z/registrationMXc                  x     [        S5      $ ! [         a"  n [        SU  35        [        SSS9s Sn A $ Sn A ff = f)uB   
Renderiza la página de registro para distribuidores en México.
zregistrationDistMX.htmlz[Error en /registrationMX]: AccessDened.html'   Ocurrió un error al cargar la página.r   Nr   rP   r   re   s    r)   registrationMX*PreRegister_routes.<locals>.registrationMX  sE    
	h"#<== 	h045"#5=fgg	h   
 
9499z/solicitud_de_altac                       [        5       n [        5       nU(       d
  [        SSS9$ U (       d
  [        SSS9$ [        SUU / / S9$ ! [         a"  n[	        SU 35        [        SSS9s SnA$ SnAff = f)	uC   
Renderiza la página de registro para hacer la solicitud de alta.
r   r   r   z$No se encontraron datos disponibles.zsolicitud_de_alta.html)r   RequestTypesr   r   z[Error en /solicitud_de_alta]: N)r   r   r   rP   r   )r   r   re   s      r)   solicitud_de_alta-PreRegister_routes.<locals>.solicitud_de_alta  s    
	l*,L%I&':Bnoo&':Bhii"(#)   	l3A378"#6>jkk	ls'   $A A A 
A1A,&A1,A1z/registrationEXPc                  x     [        S5      $ ! [         a"  n [        SU  35        [        SSS9s Sn A $ Sn A ff = f)uG   
Renderiza la página de registro para distribuidores internacionales.
zregistrationDistExport.htmlz[Error en /registrationEXP]: r   r   r   Nr   r   s    r)   registrationEXP+PreRegister_routes.<locals>.registrationEXP  sE    
	h"#@AA 	h1!56"#5=fgg	hr   formsc                 6    Sn[         R                  " X5      SL$ )zValidar formato de emailz0^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$N)rematch)r]   patterns     r)   validate_email*PreRegister_routes.<locals>.validate_email  s    Exx't33r,   c                 |    [         R                  " SSU 5      nUR                  5       =(       a    [        U5      S:  $ )u+   Validar formato de teléfono más permisivoz[\s\-\(\)\.]r      )r   subisdigitr}   )phoneclean_phones     r)   validate_phone*PreRegister_routes.<locals>.validate_phone   s6     ff_b%8 ""$>[)9Q)>>r,   c                     / nU H;  nX0;  d"  [        X   5      R                  5       (       a  M*  UR                  U5        M=     U$ )zValidar campos requeridos)rQ   rF   append)datarequired_fieldsmissing_fieldsfields       r)   validate_required_fields4PreRegister_routes.<locals>.validate_required_fields(  sB    $E DK(8(>(>(@(@%%e, % r,   z/submit-formPOST)methodsc                  4  > Sq SqSq [        R                  n U R                  S5      nUS:X  a2  Sn[        U5      nSR                  U Vs/ s H  oDS   PM	     sn5      q O|US:X  a2  Sn[        U5      nSR                  U Vs/ s H  oDS   PM	     sn5      nODUS	:X  a2  S
n[        U5      nSR                  U Vs/ s H  oDS   PM	     sn5      nOUS:X  a  [        qU(       d  [        SSS.5      S4$ / SQ/ SQ/ SQ/ SQS.n	X;  a  [        SSS.5      S4$ T" X	U   5      n
U
(       a.  [        SSR                  SR                  U
5      5      S.5      S4$ US:X  aA  T" U S   5      (       d  [        SSS.5      S4$ T" U S   5      (       d  [        SSS.5      S4$ OUS;   aC  SnT" X   5      (       d  [        SSS.5      S4$ SnT" X   5      (       d  [        SSS.5      S4$ OvUS:X  ap  T" U S   5      (       d  [        SSS.5      S4$ T" U S   5      (       d  [        SSS.5      S4$ S n[        R                  " XS!   5      (       d  [        SS"S.5      S4$ S#S$S$S%S.R                  U5      nU(       a%  U R                  U5      S&;  a  [        SS'S.5      S4$ US(S).nUS:X  a  UR                  U R                  S*S5      U R                  S+S5      U R                  S,S5      U R                  SS5      U R                  S-S5      U R                  S.S5      U R                  S/S5      U R                  S0S5      U R                  S!S5      U R                  SS5      U R                  S1S5      U R                  S%5      S2;   a  SOS3S4.5        GOUS;   a  UR                  U R                  S5S5      U R                  S6S5      U R                  S7S5      U R                  SS5      U R                  S8S5      U R                  S9S5      U R                  S:S5      U R                  S;S5      U R                  SS5      U R                  S<S5      U R                  S$5      S2;   a  SOS3S=.5        GOUS:X  Ga  UR                  U R                  S>S5      U R                  S?S5      U R                  S@S5      U R                  SAS5      U R                  SS5      U R                  SS5      U R                  SBS5      U R                  SCS5      U R                  SDS5      U R                  SES5      U R                  SFS5      U R                  SGS5      U R                  SHS5      U R                  SIS5      U R                  S#5      S2;   a  SOS3SJ.5        [        SKU 35        [        U5      u  nnU(       Ga  SLU;   a  UR!                  SL5      SM   OS nU(       a  UUSN'    T" 5       n/ nSn[        U5      nSR                  U Vs/ s H  oDS   PM	     sn5      q Sn[        U5      nSR                  U Vs/ s H  oDS   PM	     sn5      nS
n[        U5      nSR                  U Vs/ s H  oDS   PM	     sn5      n[         (       aZ  UR#                  [         R!                  SO5       Vs/ s H*  nUR%                  5       (       d  M  UR%                  5       PM,     sn5        U(       aV  UR#                  UR!                  SO5       Vs/ s H*  nUR%                  5       (       d  M  UR%                  5       PM,     sn5        U(       aV  UR#                  UR!                  SO5       Vs/ s H*  nUR%                  5       (       d  M  UR%                  5       PM,     sn5        [        (       aZ  UR#                  [        R!                  SO5       Vs/ s H*  nUR%                  5       (       d  M  UR%                  5       PM,     sn5        UR'                  UU5      nU(       a  [        SPU 35        O[        SQU 35         [        SSUS.5      $ [        SUS.5      S4$ s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf ! [(         a!  n[        SR[+        U5       35         S nANvS nAff = f! [(         a]  n[        ST[+        U5       35        S3S KnUR/                  5         [        SSUR                  [+        U5      5      S.5      SV4s S nA$ S nAff = f)WNr   RequestTyper8   r.   r/   r0   r9   r1   r:   r2   r;   FzTipo de usuario no especificado)successrc   i  )EMPFirstNameEMPLastNameEMPSecondLastNameEMPCorporateEmailEMPContactPhoneEMPEmployeeNumberEMPCompanyIDEMPDivisionIDEMPDepartamentIDEMPPositionEMPDirectSupervisorEMPPermissionType)	EU_BusinessNameEU_FiscalAddressEU_StateEU_CityEU_PostalCodeEU_LegalRepresentativeEU_PrimaryContactEU_ContactEmailEU_ContactPhone)
MX_BusinessNameMX_RFCMX_FiscalAddressMX_StateMX_CityMX_PostalCodeMX_LegalRepresentativeMX_PrimaryContactMX_ContactEmailMX_ContactPhoner7   u   Tipo de usuario no válidozCampos requeridos faltantes: {}r   u   Email corporativo no válidor   u   Número de teléfono no válido)r9   r:   r   u   Email de contacto no válidor   r   r   u-   ^[A-ZÑ&]{3,4}[0-9]{6}[A-V1-9][A-Z1-9][0-9A]$r   u   RFC no válidoEMPTermsEU_TermsMX_Terms)1trueonTu(   Debe aceptar los términos y condiciones	PENDIENTE)r4   Statusr   r   r   r   r   r   r   MX_Comments)r   r   r   Tr   )rw   LegalRepresentativePrimaryContactrx   FiscalAddress
PostalCodery   r{   rz   rs   r|   Termsr   r   r   r   r   r   r   EU_Comments)rw   r   r   rx   r   r   ry   r{   rs   r|   r   r   EMPMiddleNamer   r   r   r   r   r   r   r   r   EMPComments)rm   ro   rp   rq   rr   rs   rt   ru   rk   DepartamentIDrv   DirectSupervisorPermissionTyper|   r   zDatos procesados: zID: rj   r3   u6   Correo de notificación enviado para la solicitud ID: z2No se pudo enviar el correo para la solicitud ID: rA   TzError en submit_form: z#Error al procesar el formulario: {}r   )rW   var_correo_norteamericarE   r	   formr"   r   rB   correos_mexr   formatr   r   updater   r   rD   rC   rF   rg   rP   rQ   	traceback	print_exc)r   r^   rT   rU   rV   rX   rY   rZ   r[   r   missingemail_fieldphone_fieldrfc_patternterms_fieldprocessed_datar   rc   r~   email_servicerS   r]   
email_sentemail_errorre   r  r   r   r   r   s                             r)   submit_form'PreRegister_routes.<locals>.submit_form2  s	     ""$M	<<D  88M2L
 z):2>'+yyk1Zkdy/k1Z'[$)9"=
-1YYT^7_T^DYT^7_-`*):2>.2iiU`8aU`TiU`8a.b+*!,$@    

#O4 2$;    
 /t\5RSG$@GG		RYHZ[     z)%d+>&?@@"#(#A$    &d+<&=>>"#(#D$    ? !55/%d&788"#(#A$    0%d&788"#(#D$    9 *%d+<&=>>"#(#A$    &d+<&=>>"#(#D$    Oxx(^<<"#(#3$    '$$%	
 c,  txx4<UU$I     ".%N
 y(%%$(HH->$C+/884Lb+Q&*hh/BB&G$(HH->$C%)XX.@"%E"&((?B"?!XXj"5 HHY388Hb1$(HH->$C $ ;"&((:"6:S"SQYZ'  !55%%$(HH->$C+/884Lb+Q&*hh/BB&G$(HH->$C%)XX.@"%E"&((?B"?!XXj"5 HHY3$(HH->$C $ ;"&((:"6:S"SQYZ'  +%%!%."!="&((?B"? $ ;&*hh/BB&G&*hh/BB&G$(HH->$C&*hh/BB&G!%."!="&((?B"?%)XX.@"%E $ ;(,1F(K&*hh/BB&G $ ;"&((:"6:S"SQYZ' $ &~&678  3>BGW:@G:KW]]6226QU
2<N;/%I$0NM "$J B">r"BK+/99R]5^R]$9oR]5^+_(B!=b!AJ15Xb;cXbPTOXb;c1d. B">r"BK26))Yd<eYdQU)_Yd<e2f/++"))FZF`F`adFe*wFeUinititiv=5;;=Fe*wx1"))F`FfFfgjFk*}FkUotozozo|=5;;=Fk*}~2"))FaFgFghkFl*~FlUpup{p{p}=5;;=Fl*~%~"))nFZFZ[^F_*qF_Uchcncncp=5;;=F_*qr "/!M!Mn^h!iJ! VWaVbcd RS]R^_` #&   
 $&    i 2[ 8` 9bJ 6_ <d
 =f +x*}*~*q ! I4S5E4FGHHI  	*3q6(34! @GGAO   		s;  Ab0 a*b0 a*b0 <a
*b0 5#b0 ?b0 %b0 ?b0 'b0  b0 (&b0 b0 //b0 Ab0 !L9b0 %b  a#b 1a$?#b "a)04b $a.a.,b a3a32,b a8;a84b a= a=4.b "b0 #b 1b0  b0 b0 #b 
b-b(#b0 (b--b0 0
d:Addd)loggingbasicConfigINFO	getLoggerr   router   )appr   r   r   r   r   r   r   r  r   rf   r   r   r   s            @@@@@r)   PreRegister_routesr  )   s6    F gll+x(F
 	YYs  s* 	YY34b 5b 	YYJKe Le 	YY !h "h 	YY#$l %l2 	YY!"h #h gx(E4
? 	YY~xY0W 1Wr,   )'r   werkzeug.securityr   flask_babelr   r   pyodbcr  flaskr   r   r   r	   r
   r   r   Consultas_SQL.registrationr   r   r   r   r   r   r   rJ   r    email.mime.multipartr   email.mime.textr   r  r   rf   ra   rW   r   rE   r   r   r,   r)   <module>r     s{     4  	   G G /      	 . $ 			8	$
   Gar,   