@ -1,10 +1,14 @@ 
			
		
	
		
		
			
				
					import  logging  
			
		
	
		
		
			
				
					from  django . conf  import  settings from  django . conf  import  settings  
			
		
	
		
		
			
				
					from  django . core . exceptions  import  MultipleObjectsReturned ,  ObjectDoesNotExist  
			
		
	
		
		
			
				
					from  django . db . models  import  F ,  Q  
			
		
	
		
		
			
				
					from  rest_framework  import  serializers from  rest_framework  import  serializers  
			
		
	
		
		
			
				
					from  rest_framework . relations  import  StringRelatedField from  rest_framework . relations  import  StringRelatedField  
			
		
	
		
		
			
				
					from  sapl . parlamentares . models  import  Parlamentar ,  Mandato ,  Filiacao ,  Legislatura from  sapl . parlamentares . models  import  Parlamentar ,  Mandato ,  Filiacao ,  Legislatura  
			
		
	
		
		
			
				
					from  sapl . base . models  import  Autor ,  CasaLegislativa from  sapl . base . models  import  Autor ,  CasaLegislativa  
			
		
	
		
		
			
				
					from  sapl . utils  import  filiacao_data from  sapl . utils  import  filiacao_data  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					class  IntRelatedField ( StringRelatedField ) : class  IntRelatedField ( StringRelatedField ) :  
			
		
	
		
		
			
				
					    def  to_representation ( self ,  value ) :     def  to_representation ( self ,  value ) :  
			
		
	
		
		
			
				
					        return  int ( value )         return  int ( value )  
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -60,24 +64,77 @@ class CasaLegislativaSerializer(serializers.ModelSerializer): 
			
		
	
		
		
			
				
					class  ParlamentarResumeSerializer ( serializers . ModelSerializer ) : class  ParlamentarResumeSerializer ( serializers . ModelSerializer ) :  
			
		
	
		
		
			
				
					    titular  =  serializers . SerializerMethodField ( ' check_titular ' )     titular  =  serializers . SerializerMethodField ( ' check_titular ' )  
			
		
	
		
		
			
				
					    partido  =  serializers . SerializerMethodField ( ' check_partido ' )     partido  =  serializers . SerializerMethodField ( ' check_partido ' )  
			
		
	
		
		
			
				
					    logger  =  logging . getLogger ( __name__ )  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					    def  check_titular ( self , obj ) :     def  check_titular ( self , obj ) :  
			
		
	
		
		
			
				
					        is_titular  =  None         is_titular  =  None  
			
		
	
		
		
			
				
					
					        if  Legislatura . objects . exists ( ) :         if  not  Legislatura . objects . exists ( ) :  
			
				
				
			
		
	
		
		
			
				
					
					            legislatura  =  self . context . get ( ' legislatura ' )             self . logger . error ( " Não há legislaturas cadastradas. " )  
			
				
				
			
		
	
		
		
			
				
					
					            if  not  legislatura :             return  " "  
			
				
				
			
		
	
		
		
			
				
					
					                legislatura  =  Legislatura . objects . first ( )          
			
				
				
			
		
	
		
		
			
				
					
					            mandato  =  Mandato . objects . filter ( legislatura = legislatura , parlamentar = obj ) . first ( )         try :  
			
				
				
			
		
	
		
		
			
				
					
					            is_titular  =  mandato . titular  if  mandato  else  False             legislatura  =  Legislatura . objects . get ( id = self . context . get ( ' legislatura ' ) )  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					        except  ObjectDoesNotExist :  
			
		
	
		
		
			
				
					            legislatura  =  Legislatura . objects . first ( )  
			
		
	
		
		
			
				
					        mandato  =  Mandato . objects . filter (  
			
		
	
		
		
			
				
					            parlamentar = obj ,  
			
		
	
		
		
			
				
					            data_inicio_mandato__gte = legislatura . data_inicio ,  
			
		
	
		
		
			
				
					            data_fim_mandato__lte = legislatura . data_fim  
			
		
	
		
		
			
				
					        ) . order_by ( ' -data_inicio_mandato ' ) . first ( )  
			
		
	
		
		
			
				
					        if  mandato :  
			
		
	
		
		
			
				
					            is_titular  =  ' Sim '  if  mandato . titular  else  ' Não '  
			
		
	
		
		
			
				
					        else :  
			
		
	
		
		
			
				
					            is_titular  =  ' - '          
			
		
	
		
		
			
				
					        return  is_titular         return  is_titular  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					    def  check_partido ( self , obj ) :     def  check_partido ( self , obj ) :  
			
		
	
		
		
			
				
					
					        legislatura_id  =  self . context . get ( ' legislatura ' )         # Coloca a filiação atual ao invés da última  
			
				
				
			
		
	
		
		
			
				
					
					        if  not  legislatura_id :         # As condições para mostrar a filiação são:  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					        # A data de filiacao deve ser menor que a data de fim  
			
		
	
		
		
			
				
					        # da legislatura e data de desfiliação deve nula, ou maior,  
			
		
	
		
		
			
				
					        # ou igual a data de fim da legislatura  
			
		
	
		
		
			
				
					         
			
		
	
		
		
			
				
					        username  =   self . context [ ' request ' ] . user . username  
			
		
	
		
		
			
				
					        if  not  Legislatura . objects . exists ( ) :  
			
		
	
		
		
			
				
					            self . logger . error ( " Não há legislaturas cadastradas. " )  
			
		
	
		
		
			
				
					            return  " "  
			
		
	
		
		
			
				
					        try :  
			
		
	
		
		
			
				
					            legislatura  =  Legislatura . objects . get ( id = self . context . get ( ' legislatura ' ) )  
			
		
	
		
		
			
				
					        except  ObjectDoesNotExist :  
			
		
	
		
		
			
				
					            legislatura  =  Legislatura . objects . first ( )             legislatura  =  Legislatura . objects . first ( )  
			
		
	
		
		
			
				
					     
			
		
	
		
		
			
				
					        try :  
			
		
	
		
		
			
				
					            self . logger . debug ( " user= "  +  username  +  " . Tentando obter filiação do parlamentar com (data<= {}  e data_desfiliacao>= {} )  "  
			
		
	
		
		
			
				
					                              " ou (data<= {}  e data_desfiliacao=Null)). "  
			
		
	
		
		
			
				
					                              . format ( legislatura . data_fim ,  legislatura . data_fim ,  legislatura . data_fim ) )  
			
		
	
		
		
			
				
					            filiacao  =  obj . filiacao_set . get ( Q (  
			
		
	
		
		
			
				
					                data__lte = legislatura . data_fim ,  
			
		
	
		
		
			
				
					                data_desfiliacao__gte = legislatura . data_fim )  |  Q (  
			
		
	
		
		
			
				
					                data__lte = legislatura . data_fim ,  
			
		
	
		
		
			
				
					                data_desfiliacao__isnull = True ) )  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					        # Caso não exista filiação com essas condições  
			
		
	
		
		
			
				
					        except  ObjectDoesNotExist :  
			
		
	
		
		
			
				
					            self . logger . error ( " user= "  +  username  +  " . Parlamentar com (data<= {}  e data_desfiliacao>= {} )  "  
			
		
	
		
		
			
				
					                              " ou (data<= {}  e data_desfiliacao=Null)) não possui filiação. "  
			
		
	
		
		
			
				
					                              . format ( legislatura . data_fim ,  legislatura . data_fim ,  legislatura . data_fim ) )  
			
		
	
		
		
			
				
					            filiacao  =  ' Não possui filiação '  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					        # Caso exista mais de uma filiação nesse intervalo  
			
		
	
		
		
			
				
					        # Entretanto, NÃO DEVE OCORRER  
			
		
	
		
		
			
				
					        except  MultipleObjectsReturned :  
			
		
	
		
		
			
				
					            self . logger . error ( " user= "  +  username  +  " . O Parlamentar com (data<= {}  e data_desfiliacao>= {} )  "  
			
		
	
		
		
			
				
					                              " ou (data<= {}  e data_desfiliacao=Null)) possui duas filiações conflitantes "  
			
		
	
		
		
			
				
					                              . format ( legislatura . data_fim ,  legislatura . data_fim ,  legislatura . data_fim ) )  
			
		
	
		
		
			
				
					            filiacao  =  ' O Parlamentar possui duas filiações conflitantes '  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					        # Caso encontre UMA filiação nessas condições  
			
		
	
		
		
			
				
					        else :         else :  
			
		
	
		
		
			
				
					
					            legislatura  =  Legislatura . objects . get ( id = legislatura_id )             self . logger . debug ( " user= "  +  username  +  
			
				
				
			
		
	
		
		
			
				
					
					        filiacao  =  filiacao_data ( obj ,  legislatura . data_inicio ,  legislatura . data_fim )                               " . Filiação encontrada com sucesso. " )  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					            filiacao  =  filiacao . partido . sigla  
			
		
	
		
		
			
				
					         
			
		
	
		
		
			
				
					        return  filiacao         return  filiacao  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					    class  Meta :     class  Meta :