
    j                     n    d dl mZ d dlmZ d dlmZ d dlmZ d Zde	defdZ
d	ed
e	ddfdZd	eddfdZy)    )select)db)Category)Transactionc                      t         j                  j                  d      j                  t         j                  j                         t         j                        j                         S )z7All active categories: system first, then alphabetical.T)	is_active)r   query	filter_byorder_by	is_systemdescnameall     9/var/www/html/financials/app/services/category_service.pyget_all_activer      s@    NNYY&Xh((--/?SUr   r   returnc                 F   | j                         } | st        d      t        |       dkD  rt        d      t        j                  j                  |       j                         rt        d|  d      t        | dd	      }t        j                  j                  |       |S )
zCAdd a new custom category. Raises ValueError on validation failure.Category name is required.2   z,Category name must be 50 characters or less.r   A category named '' already exists.FT)r   r   r   )
strip
ValueErrorlenr   r	   r
   firstr   sessionadd)r   cats     r   create_customr"      s    ::<D566
4y2~GHH~~T*002-dV3DEFF

>CJJNN3Jr   categorynew_nameNc                 .   |j                         }|st        d      t        |      dkD  rt        d      t        j                  j                  |      j                         }|r(|j                  | j                  k7  rt        d| d      || _        y)z;Rename a category. Raises ValueError on validation failure.r   r   z#Name must be 50 characters or less.r   r   r   N)	r   r   r   r   r	   r
   r   idr   )r#   r$   conflicts      r   renamer(      s    ~~H566
8}r>??~~''X'6<<>HHKK8;;.-hZ7HIJJHMr   c                 X   | j                   rt        d      t        j                  j	                  t        t        j                        j                  t        j                  | j                  k(        j                  d            j                         du}|rt        d      d| _        y)zESoft-delete a custom category. Raises ValueError if system or in use.z$System categories cannot be deleted.   Nu&   Category in use — cannot be deleted.F)r   r   r   r   executer   r   r&   wherecategory_idlimitr   r   )r#   has_txnss     r   soft_deleter0   *   s    ?@@zz!!{~~$$[%<%<%KLRRSTUegTH ABBHr   )
sqlalchemyr   app.extensionsr   app.models.categoryr   app.models.transactionr   r   strr"   r(   r0   r   r   r   <module>r6      sV      ( .  
X 
 
 
	( 	t 	r   