
    vg                         d Z ddl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 dd	lmZ dd
lmZ  G d de      Z G d de      Zy)z[
tax_models.py

This module contains the models for the tax calculation of taxable income.
    N)ValidationError)models)format_lazy)gettext_lazy)HorillaCompanyManager)Company)HorillaModel)FilingStatusc                       e Zd ZdZd ed      fd ed      fgZ ej                  ddd	      Z ej                  d
ded      Z	 ej                  edej                        Z ed      Zd Zy)PayrollSettingsz 
    Payroll settings model
    prefixPrefixpostfixPostfixT$   )nulldefault
max_length   )r   r   choicesr   )r   	on_delete
company_idc                      d| j                    S )NzPayroll Settings )currency_symbolselfs    -/var/www/horilla/payroll/models/tax_models.py__str__zPayrollSettings.__str__&   s    "4#7#7"899    N)__name__
__module____qualname____doc___r   r   	CharFieldr   position
ForeignKeyr   PROTECTr   r   objectsr    r    r   r   r      s    
 
1X;	AiL!G
 'f&&D#!LOvD'9H #""7PJ#L1G:r    r   c                   >    e Zd ZdZ ej
                  eej                   ed            Z	 ej                  dd ed            Z ej                  dd ed            Z ej                  ddd	 ed
            Z ej                         Zd Zd Z fdZ xZS )
TaxBracketz
    TaxBracket model
    zFiling status)r   verbose_nameFzMin. Income)r   blankr.   TzMax. Incomeg        zTax Rate)r   r/   r   r.   c                     | j                   t        j                  k7  r4| j                   | j                   d| j
                   d| j                    S | j                   d| j
                   d| j                   S )Nz% tax rate on z and z,% tax rate on taxable income equal or above z for )
max_incomemathinffiling_status_idtax_rate
min_incomer   s    r   r   zTaxBracket.__str__=   sw    ??dhh&(()==/??#5(9; }}oIuT%:%:$;=	
r    c                 V    | j                   t        j                  k7  r| j                   S y)z
        Retrieves the maximum income.
        Returns:
            float or None: The maximum income if it is a finite value, otherwise None.
        N)r1   r2   r3   r   s    r   get_display_max_incomez!TaxBracket.get_display_max_incomeI   s!     ??dhh&??"r    c                 f   t         |           t        j                  j	                  | j
                  | j                  | j                  | j                        j                  | j                        }|j                         rt        t        d            | j                  t        j                  | _        | j                  | j                  k\  rt        dt        d      i      t        j                  j	                  | j
                        j                  | j                        }|j	                  | j                        j                         r[|j	                  | j                        j!                         }|j                  | j                  k  rt        dt#        d	|      i      y y )
N)r4   r6   r1   r5   )pkzThis tax bracket already existsr1   z3Maximum income must be greater than minimum income.)r4   )max_income__gter6   zuThe minimum income of this tax bracket must be                                 greater than the maximum income of {}.)supercleanr-   r*   filterr4   r6   r1   r5   excluder:   existsr   r%   r2   r3   firstr   )r   existing_bracketexisting_bracketstax_bracket	__class__s       r   r=   zTaxBracket.cleanS   s|   %--44!22]]	 5 

 'TWW'
 	 ""$!!$E"FGG??""hhDO??doo-!q!VWX  '..55!22 6 

'TWW'
 	 ##DOO#DKKM+22 $ 3 eg  %%8%$kH''  9	 Nr    )r!   r"   r#   r$   r   r(   r
   CASCADEr%   r4   
FloatFieldr6   r1   r5   Managerr*   r   r8   r=   __classcell__)rE   s   @r   r-   r-   *   s     )v((..'
 #""%a.>J #""DqGWXJ v  %1Z=H fnnG

$ $r    r-   )r$   r2   django.core.exceptionsr   	django.dbr   django.utils.textr   django.utils.translationr   r%   base.horilla_company_managerr   base.modelsr   horilla.modelsr	   payroll.models.modelsr
   r   r-   r+   r    r   <module>rR      sA     2  ) 6 >  ' .:l :,M Mr    