
     h%&                        d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	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mZ d dlmZ d dlmZ d d	lmZ d d
lmZ  ede      Z e       ZejA                  de       ejA                  de       ejA                  de       ejA                  de       d Z!d Z"ejG                  ddg      d        Z$ejG                  d      d        Z%ejG                  ddg      d        Z&ejG                  ddg      d        Z'ejG                  ddg      d        Z(ejG                  ddg      d         Z)y)!    N)		Blueprintrequestsessionflashjsonify	send_filecurrent_appredirecturl_for)secure_filename)datetime	timedelta)get_db_connection)BankStatementService)PrivatBankPdfParser)TaskombankPdfParser)MonobankPdfParser)MTBBankPdfParserbank_bp
privat_pdftaskombank_pdfmonobank_pdfmtbbank_pdfc                  N   t        j                  d      } | syt               }|j                         5 }|j	                  d| f       |j                         }ddd       |j                          sy|d   dk(  rdd|fS t        |      }|d   d	k(  rd
d|fS t        j                         j                         }|j                  d      }|rJ||k\  rEt        j                  d   j                  |j                  d            }||d   dk  rd
d|fS dd|fS d
d|fS # 1 sw Y   xY w)u   
    Проверяет доступ текущего пользователя (session) к странице.
    Возвращает (ok: bool, err: str|None, user: dict|None).
    user_id)Fu"   Вы не авторизованыNzSELECT * FROM users WHERE id=%sN)Fu*   Пользователь не найденNroleadminTdisabledFu.   Учетная запись отключенаpayment_datePLAN_LIMITSsubscription_planparse_countr   .   Лимит генераций исчерпанu?   Оплата отсутствует или просрочена)r   getr   cursorexecutefetchoneclosecheck_and_reset_parse_countr   utcnowdater	   config)r   conncurusertodaypay_date
plan_limits          +/var/www/html/app/blueprints/bank/routes.pycheck_accessr4      s:   
 kk)$G@D	 #5zB||~ 	JJLHF|wT4 't,DF|z!FLLOO""$Exx'HH% ''6::488DW;XY
!d=&9Q&>JDPPT4WY]]]5 s   $DD$c                    t         j                  d   j                  | j                  d            }|| j                  d      rd }| j                  d      }t        j                         }|r||k  r||dn|}|t        d      z   }t               }|j                         5 }d}|j                  |||| d   f       d d d        |j                          |j                          || d	<   || d<   | S # 1 sw Y   5xY w)
Nr    r!   parse_reset_date?B    )daysz
                UPDATE users
                   SET parse_count=%s,
                       parse_reset_date=%s
                 WHERE id=%s
            idr"   )r	   r,   r$   r   r*   r   r   r%   r&   commitr(   )	r/   r2   r6   
current_dt	new_count	new_resetr-   r.   sqls	            r3   r)   r)   >   s    ##M266txx@S7TUJdhh':;
xx 23"J/*<(0Fj	!33	 "[[] 	AcC KKiDJ?@	A 	

']#, K	A 	As   "C11C:z/statusGET)methodsc                      t               \  } }}| st        d|d      dfS t        |      }t        d|j                  dd      d      S )Nerrorstatusmessage  OKr"   r   )rE   r"   )r4   r   r)   r$   )okerrr/   s      r3   bank_statusrK   [   sL     NMBT'c:;S@@&t,Dd488M13MNOO    /c                     t               \  } }}| s t        |d       t        t        d            S |d   dk(  rd}d}n$|j	                  dd      }|j	                  dd	      }|j	                  d
d      }|j                  d      D cg c]#  }|j                         s|j                         % }}d	dlm}  |d|||d   t        j                  d   |      S c c}w )Ndangerauth_bp.loginr   r   r7   r!   startr"   r   available_banks ,)render_templatezparsing_landing.html	ALL_BANKS)r!   r"   	user_role	all_banksavailable_banks_list)r4   r   r
   r   r$   splitstripflaskrU   r	   r,   )	rI   rJ   r/   plan
left_count	raw_banksbavailable_listrU   s	            r3   	bank_mainrb   c   s     NMBTc8011F|w
xx+W5XXmQ/
*B/I)2)=KAaggiKNK%v,$$[1+  Ls   CCz/uploadPOSTc            	         t               \  } }}| st        d|d      dfS t        j                  j	                  dd      }t        j                  j	                  dd      }t        j                  j	                  dd      }t        j
                  j                  d	      }d
t        vr	g t        d
<   t        d
   }|D ]  }|st        |j                        }	t        j                  j                  |	      d   j                         }
|
dk(  sQt        t        j                                }t        j                  j#                  t$        j&                  d   |dz         }|j)                  |       t+        j,                  d|       ||	||||d}|j/                  |        |t        d
<   t        d|D cg c]  }|d   |d   d c}d      S c c}w )NrC   rD   rG   	payer_innrS   bank_keysenderu   ФОП	pdf_filesupload_list   z.pdfUPLOAD_FOLDERzSaved PDF to: %s)r:   originalName	file_pathrf   re   rg   rH   r:   rl   r:   rl   rE   files)r4   r   r   formr$   rp   getlistr   r   filenameospathsplitextlowerstruuiduuid4joinr	   r,   saveloggingdebugappend)rI   rJ   r/   re   rf   sender_valuerh   ri   foriginal_nameextfile_id	save_pathitemxs                  r3   bank_uploadr   ~   s    NMBT'c:;S@@  b1I||
B/H<<##Hh7L%%k2IG#!#-(K %'

3gg}-a0668&=$**,'G[%7%7%H'TZJZ[IFF9MM,y9  -&$&&D t$'%* )GMNYZ4!N2CDZ  Zs   4G
z/deletec            	         t               \  } }}| st        d|d      dfS t        j                  j	                  dd      }t        j                  dg       }g }|D ]W  }|d   |k(  r<t        j                  j                  |d         s.t        j                  |d          G|j                  |       Y |t
        d<   t        d	|D cg c]  }|d   |d
   d c}d      S c c}w )NrC   rD   rG   r   rS   ri   r:   rm   rH   rl   rn   ro   )r4   r   r   rq   r$   r   rt   ru   existsremover   )rI   rJ   r/   r   ri   new_listr   ys           r3   bank_deleter      s     NMBT'c:;S@@lly"-G++mR0KH ": ww~~d;/0		${+,OOD!" &GMNVW4!N2CDW  Ws   C#
z	/generatec                  V   t               \  } }}| st        d|d      dfS |d   dk7  rKt        j                  d   j	                  |j	                  d            }||d   d	k  rt        dd
d      dfS t        j                  dg       }|st        ddd      S d}|D ]_  }|d   }t        j                  j                  |      s(	 t        j                  ||d   |d   |d         }||j                         dz   z  }a |j!                  d      s|dz  }dt#        j$                          d}
t        j                  j'                  t        j                  d   |
      }	 t)        |dd      5 }|j+                  |       d d d        |d   dk7  rYt-               }|j/                         5 }|j1                  d|d   f       d d d        |j3                          |j5                          g t
        d<   |t
        d <   t7        |d!d"#      S # t        $ r:}	t        j                  d       t        dt        |	      d      dfcY d }	~	c S d }	~	ww xY w# 1 sw Y   xY w# t        $ r8}	t        j                  d       t        dt        |	      d      dfcY d }	~	S d }	~	ww xY w# 1 sw Y   xY w)$NrC   rD   rG   r   r   r    r!   r"   r   r#   ri   u*   Нет загруженных файловrS   rm   rf   re   rg   
u%   Ошибка при парсинге.i  u   КонецФайлаu   
КонецФайлаresult_z.txtrk   wcp1251)encodingu4   Ошибка при сохранении файла.zGUPDATE users SET parse_count = GREATEST(parse_count - 1, 0) WHERE id=%sr:   last_generated_fileTresult_out.txtas_attachmentdownload_name)r4   r   r	   r,   r$   r   rt   ru   r   serviceprocess_filer[   	Exceptionr}   	exceptionrx   endswithry   rz   r{   openwriter   r%   r&   r;   r(   r   )rI   rJ   r/   r]   ri   combined_textr   ru   result_texteresult_filenamer   r   r-   r.   s                  r3   bank_generater      s    NMBT'c:;S@@ F|w!!-044TXX>Q5RS] 3q 8g:jklnqqq++mR0K'6bcddM HK ww~~d#
	H!..Z [!X	K [..0477MH  !!"8911

~T2O[//@/RID)S84 	#GGM"	# F|w "[[] 	cKKYd	
 	

GM%.G!"YdBRSS?  	HEFg#a&ABCGG	H	# 	# DPQ'c!f=>CCD	 	s`   7H	 I .I I *J		I-I?IIII 	J$-JJJJ(z
/last_filec                  *   t               \  } }}| s t        |d       t        t        d            S t	        j
                  d      }|rt        j                  j                  |      s t        dd       t        t        d            S t        |dd	      S )
u   
    Скачивание последнего сгенерированного файла, если есть в session["last_generated_file"].
    rO   rP   r   uH   Нет последнего файла или файл не найденwarningzbank_bp.bank_mainTr   r   )
r4   r   r
   r   r   r$   rt   ru   r   r   )rI   rJ   r/   ru   s       r3   bank_last_filer      s|    
 !NMBTc8011;;,-Drww~~d+XZcd 3455T=MNNrL   )*rt   ry   r}   r\   r   r   r   r   r   r   r	   r
   r   werkzeug.utilsr   r   r   app.databaser   #app.services.bank_statement_servicer   !app.parsers.privatbank_pdf_parserr   !app.parsers.taskombank_pdf_parserr   app.parsers.mono_pdf_parserr   app.parsers.mtbbank_pdf_parserr   __name__r   r   register_parserr4   r)   routerK   rb   r   r   r   r    rL   r3   <module>r      sj   	   h h h * ( * D A A 9 ;
Ix
( 
    ': ;   (*= >   (9 :   (8 9$^L: 	y5'*P +P 	s 4 	y6(+' ,'R 	y6(+ ,, 	{VH-;T .;Tz 	|eW-O .OrL   