
    iG                        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mZmZ d d	lmZ d
dlmZmZ d
dlmZmZ  edgdeee ed       ed       ed      d eddddg ddgddddddddgddd        ed!dddg d"dgddddgddd#      g$       G d% d&e             Z edgd' ed(       ed      d) ed*ddd+dddd+ddd,d-dgd#       ed.g d#      g/       G d0 d1e             Zy2)3    )APIView)ListAPIView)Response)IsAuthenticatedstatus)get_object_or_404)transaction)extend_schemaOpenApiExampleOpenApiResponse)	Structure   )StructureCityTaxSettingsCityTaxMonthlyRate)"StructureCityTaxSettingsSerializer"CityTaxMonthlyRateNestedSerializerzCity Taxz7Get, create or update city tax settings for a structurezValidation error)descriptionzStructure not foundzCity tax settings already exist)      i    i  zCreate / Update Payload         )MedicalStudentRefugeeResidentairbnbi     )yearmonthratei  T)default_ratemax_taxable_nightsminor_age_limitexemption_reasonsplatform_exemptions
city_taxes	is_active)namevaluerequest_onlyzSuccess Response)r   r   r   r   Minor)r+   r,   response_only)tagssummaryrequest	responsesexamplesc                   $    e Zd ZegZd Zd Zd Zy)StructureCityTaxSettingsAPIViewc                    t        t        |      }	 |j                  }t        |      }t        j                  j                  | j                  d         j                  dd      }t        |d      j                  }|j                  }||d	<   t        |t        j                        S # t        j                  $ r t        i t        j                        cY S w xY w)
Nidr   structure_idr:   r!   r"   Tmanyr)   )r	   r   city_tax_settingsr   DoesNotExistr   r   HTTP_200_OKr   r   objectsfilterkwargsorder_byr   data)	selfr2   r:   	structuresettings
serializerr)   city_taxes_datarE   s	            %/backend/structures/views_city_tax.pygetz#StructureCityTaxSettingsAPIView.getW   s    %iLA		; 22H
 8A
'//66^4 7 

(67
# 	 =
 $ 	
 ,\V%7%788% (44 	;Bv'9'9::	;s   B* *.CCc                    t        t        |      }t        |d      rt        ddit        j
                        S t        |j                  d|i      }|j                  d	       t        j                         5  |j                         }d d d        t        t              j                  t        j                        S # 1 sw Y   7xY w)
Nr8   r>   detailz3City tax settings already exist for this structure.r   rG   rE   contextTraise_exception)r	   r   hasattrr   r   HTTP_409_CONFLICTr   rE   is_validr
   atomicsaveHTTP_201_CREATED)rF   r2   r:   rG   rI   rH   s         rK   postz$StructureCityTaxSettingsAPIView.postp   s    %iLA	912PQ// 
 8 ),

 	D1!!(H " .x8==**
 	
 "!s   :CC
c                 l   t        t        |      }t        t        |      }t        ||j                  d|i      }|j                  d       t        j                         5  |j                         }d d d        t        t        |      j                  t        j                        S # 1 sw Y   7xY w)Nr8   )rG   rG   rO   TrQ   r   )r	   r   r   r   rE   rU   r
   rV   rW   r   r   r@   )rF   r2   r:   rG   rH   rI   s         rK   putz#StructureCityTaxSettingsAPIView.put   s    %iLA	$$

 8 ),


 	D1!!(H " .x8==%%
 	
 "!s   #B**B3N)__name__
__module____qualname__r   permission_classesrL   rY   r[        rK   r6   r6   !   s    h **92
.
ra   r6   z*Get monthly city tax rates for a structurer<   )r   r   u   GET – Monthly Ratesg      @	   g      @u   GET – No Rates Configured)r0   r1   r3   r4   c                       e Zd ZegZeZd Zy)CityTaxRatesAPIViewc                     t        t        | j                  d          t        j                  j                  | j                  d         j                  dd      S )Nr:   r8   r;   r!   r"   )r	   r   rC   r   rA   rB   rD   )rF   s    rK   get_querysetz CityTaxRatesAPIView.get_queryset   sK    )N(CD!))00^4 1 

(67
#	$ra   N)r\   r]   r^   r   r_   r   serializer_classrf   r`   ra   rK   rd   rd      s    6 **9$ra   rd   N)rest_framework.viewsr   rest_framework.genericsr   rest_framework.responser   rest_framework.permissionsr   rest_frameworkr   django.shortcutsr	   	django.dbr
   drf_spectacular.utilsr   r   r   structures.modelsr   modelsr   r   serializers_city_taxr   r   r6   rd   r`   ra   rK   <module>rs      s   ) / , 6 ! . !  ( 
E.//);<)>?)JK 	* !&'#%%R(0z!Aq9!Aq9 " 	
  	# !&'#%& )1z!Aq9 "" '	
#&2fH
g H
g2fH
b 
8/T:)>? 	(484848
 	
 	.	
4
$+ 
$54
$ra   