
    (@j                        d dl Z d dlmZmZ d dl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 d dlmZmZmZ d dlmc 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jD                  d      d        Z# ejD                  dddg      d        Z$ ejD                  dddg      d        Z% ejD                  dddg      d        Z& ejD                  ddg      d        Z' ejD                  dddg      d        Z( ejD                  dddg      d        Z) ejD                  d      d        Z* ejD                  ddg      d         Z+y)!    N)DecimalInvalidOperation)render_templateredirecturl_forflashrequestabort	send_filecurrent_app)select)settings_bp)AccountFormCategoryForm
IncomeForm)Category)db)Account)Settings)Transaction/c                  Z    t         j                  j                         } t        dd|       S )Nzsettings/index.htmlsettings)active_pager   )r   queryfirstr   )r   s    :/var/www/html/financials/app/blueprints/settings/routes.pyindexr      s)    ~~##%H0j$,. .    z/incomeGETPOST)methodsc                  x   t         j                  j                         } t               }t        j
                  dk(  r@| r0| j                  $t        | j                        |j                  _        t        d|d      S |j                         r|j                  j                  xs dj                         }	 t        |      }|dk  r3|j                  j                  j                  d       t        d|d      S | -t        d	|
      } t         j"                  j%                  |        n|| _        t         j"                  j'                          t)        dd       t+        t-        d            S t        d|d      S # t        $ r6 |j                  j                  j                  d       t        d|d      cY S w xY w)Nr    zsettings/income.htmlr   )formr    zEnter a valid numeric amount.r   zIncome must be zero or greater.   )idmonthly_incomezMonthly income updated.successzsettings.income)r   r   r   r   r	   methodr(   strdatar   validate_on_submitstripr   r   errorsappendr   sessionaddcommitr   r   r   )r   r$   rawamounts       r   incomer6      s   ~~##%H<D~~//;'*8+B+B'CD$5D+57 	7  ""''-2446	;S\F A:&&--.OP"#9/9; ; 1V<HJJNN8$&,H#


'3 12331'13 3'   	;&&--.MN"#9/9; ;	;s   5E: :<F98F9z	/accountsc                     t               } | j                         rt        | j                  j                  j                         | j                  j                  | j                  j                  xs dj                         xs d d      }t        j                  j                  |       t        j                  j                          t        dd       t        t        d            S t        j                  j!                  d      j#                  t        j                        j%                         }t'        d|| d	
      S )Nr%   T)nametypeinstitution_name	is_activezAccount added.r)   settings.accounts)r;   zsettings/accounts.htmlr   )accountsr$   r   )r   r-   r   r8   r,   r.   r9   r:   r   r1   r2   r3   r   r   r   r   	filter_byorder_byallr   )r$   acctall_accountss      r   r=   r=   >   s    =D %%'"3388>BEEGO4	
 	

t


	* 3455==**T*:CCGLLQUUWL 	 r   z/accounts/<int:account_id>/editc                    t         j                  j                  |       }t        |      }|j	                         r|j
                  j                  j                         |_        |j                  j                  |_        |j                  j                  xs dj                         xs d |_	        t        j                  j                          t        dd       t        t        d            S t!        d||d      S )	Nobjr%   zAccount updated.r)   r<   zsettings/account_edit.htmlr   )r$   accountr   )r   r   
get_or_404r   r-   r8   r,   r.   r9   r:   r   r1   r3   r   r   r   r   )
account_idrA   r$   s      r   account_editrI   V   s    ==##J/D4 D IINN((*	IINN	!%!6!6!;!;!Ar H H J Rd


 ), 3455$	 r   z!/accounts/<int:account_id>/deletec                 <   t         j                  j                  |       }t        j                  j                  t        t        j                        j                  t        j                  |j                  k(        j                  d            j                         d u}|r t        dd       t        t        d            S t        j                  j!                  |       t        j                  j#                          t        dd       t        t        d            S )Nr&   u%   Account in use — cannot be deleted.errorr<   zAccount deleted.r)   )r   r   rG   r   r1   executer   r   r'   whererH   limitr   r   r   r   deleter3   )rH   rA   has_txnss      r   account_deleterQ   j   s    ==##J/Dzz!!{~~$$[%;%;tww%FGMMaPegTH 5w? 3455JJdJJ	
i(G/011r   z/categoriesc                     t               } | j                         rh	 t        j                  | j                  j
                         t        j                  j                          t        dd       t        t        d            S t        j                         }t        d|| d      S # t        $ r}t        t        |      d       Y d }~Fd }~ww xY w)NzCategory added.r)   settings.categoriesrK   zsettings/categories.htmlr   )
categoriesr$   r   )r   r-   category_servicecreate_customr8   r,   r   r1   r3   r   r   r   
ValueErrorr+   get_all_activer   )r$   eall_categoriess      r   rT   rT   {   s    >D 	#**499>>:JJ#Y/G$9:;; &446N"!	 	  	##a&'""	#s   A&B& &	C/C		Cz"/categories/<int:category_id>/editc                    t         j                  j                  |       }t        |      }|j	                         ri	 t        j                  ||j                  j                         t        j                  j                          t        dd       t        t        d            S t#        d||d      S # t        $ r}t        t!        |      d       Y d }~2d }~ww xY w)	NrD   zCategory updated.r)   rS   rK   zsettings/category_edit.htmlr   )r$   categoryr   )r   r   rG   r   r-   rU   renamer8   r,   r   r1   r3   r   r   r   rW   r+   r   )category_idcatr$   rY   s       r   category_editr`      s    
..
#
#K
0CC D 	###C8JJ%y1G$9:;; %	   	##a&'""	#s   A'B4 4	C=CCz/backupc                     t         j                  j                  dd      } | j                  d      r<t        j
                  j                  t         j                  d| t        d      d       }n@| j                  d      r| t        d      d }n t        dd       t        t        d	            S t        j
                  j                  |      }t        j
                  j                  |      s t        d
d       t        t        d	            S ddlm} d|j!                         j#                          d}t%        |d|d      S )u8   NFR-3 — Download the SQLite database file as a backup.SQLALCHEMY_DATABASE_URIr%   z
sqlite:///z..Nzsqlite:////z7Database backup is only available for SQLite databases.rK   zsettings.indexzDatabase file not found.r   )datefinancials_backup_z.dbTzapplication/octet-stream)as_attachmentdownload_namemimetype)r   configget
startswithospathjoin	root_pathlenr   r   r   normpathexistsdatetimerc   today	isoformatr   )db_uridb_pathrc   filenames       r   backuprx      s    ##$=rBF&'',,{44dF3|CTCU<VW			=	)]+,-GQ 0122ggw'G77>>'"('2 0122#DJJL$:$:$<#=SAHWD8: :r   z$/categories/<int:category_id>/deletec                 `   t         j                  j                  |       }	 t        j                  |       t
        j                  j                          t        dd       t        t        d            S # t        $ r0}t        |      }d|v rt        d       t        |d       Y d }~Hd }~ww xY w)NzCategory deleted.r)   Systemi  rK   rS   )r   r   rG   rU   soft_deleter   r1   r3   r   rW   r+   r
   r   r   )r^   r_   rY   msgs       r   category_deleter}      s    
..
#
#K
0C$$S)


!9- G1233  !fs?#Jc7	s   ?A4 4	B-=&B((B-),rk   decimalr   r   flaskr   r   r   r   r	   r
   r   r   
sqlalchemyr   app.blueprints.settingsr   app.blueprints.settings.formsr   r   r   app.services.category_serviceservicesrU   app.models.categoryr   app.extensionsr   app.models.accountr   app.models.settingsr   app.models.transactionr   router   r6   r=   rI   rQ   rT   r`   rx   r}    r   r   <module>r      s   	 - c c c  / O O 8 8 (  & ( . 3. . 9ufo6"3 7"3J ;8 9. 4ufoN O& 6I2 J2  =5&/: ;( 7%Q R( 9: :0 9F8L4 M4r   