
    si                         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 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)reverse)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 G d 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                   ,    e Zd Z ed      Z ed      Zy)PayrollSettings.MetazPayroll SettingsN)__name__
__module____qualname___verbose_nameverbose_name_plural     =/var/www/python-projects/worksol/payroll/models/tax_models.pyMetar   '   s    +, 23r$   r&   c                      d| j                    S )NzPayroll Settings )currency_symbolselfs    r%   __str__zPayrollSettings.__str__+   s    "4#7#7"899r$   N)r   r   r   __doc__r    r   r   	CharFieldr(   position
ForeignKeyr	   PROTECTr   r   objectsr&   r+   r#   r$   r%   r   r      s    
 
1X;	AiL!G
 'f&&D#!LOvD'9H #""7PJ#L1G4 4:r$   r   c                   J    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d Zd Z fdZ xZS )
TaxBracketz
    TaxBracket model
    zFiling status)r   r!   FzMin. Income)r   blankr!   TzMax. Incomeg        zTax Rate)r   r4   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__B   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)r6   r7   r8   r)   s    r%   get_display_max_incomez!TaxBracket.get_display_max_incomeN   s!     ??dhh&??"r$   c                 4    t        dd| j                  i      S )?
        Returns the URL for updating the tax bracket.
        ztax-bracket-updatepkkwargsr   r@   r)   s    r%   get_update_urlzTaxBracket.get_update_urlX   s    
 +T477ODDr$   c                 4    t        dd| j                  i      S )r?   ztax-bracket-deletetax_bracket_idrA   rC   r)   s    r%   get_delete_urlzTaxBracket.get_delete_url_   s    
 +5Etww4OPPr$   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)r9   r;   r6   r:   )r@   zThis tax bracket already existsr6   z3Maximum income must be greater than minimum income.)r9   )max_income__gter;   zuThe minimum income of this tax bracket must be                                 greater than the maximum income of {}.)supercleanr3   r1   filterr9   r;   r6   r:   excluder@   existsr   r    r7   r8   firstr   )r*   existing_bracketexisting_bracketstax_bracket	__class__s       r%   rK   zTaxBracket.cleanf   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    r9   
FloatFieldr;   r6   r:   Managerr1   r+   r=   rD   rG   rK   __classcell__)rS   s   @r%   r3   r3   /   s     )v((..'
 #""%a.>J #""DqGWXJ v  %1Z=H fnnG

EQ$ $r$   r3   )r,   r7   django.core.exceptionsr   	django.dbr   django.urlsr   django.utils.textr   django.utils.translationr   r    base.horilla_company_managerr   base.modelsr	   horilla.modelsr
   payroll.models.modelsr   r   r3   r#   r$   r%   <module>ra      sD     2   ) 6 >  ' .:l :4[ [r$   