
    "i7                        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
 d dlmZmZ d dlmZmZ  G d d	ej"                        Z G d
 dej"                        Z G d dej"                        Z G d dej"                        Z G d dej"                        Z G d dej"                        Z G d dej"                        Z G d dej2                        Z G d dej2                        Z G d dej2                        Zy)    )serializers)LocalizedDateTimeField)ProfileServices)Customer)CallCallActivity)CompanyDealershipDepartment)DealershipCallSerializer"DealershipDepartmentCallSerializerc                        e Zd Z G d d      Zy)CompanySerializerc                       e Zd ZeZddgZy)CompanySerializer.MetaidnameN)__name__
__module____qualname__r	   modelfields     E/var/www/html/dp2/backend_v2.1/server/apps/calls/serializers/calls.pyMetar      s    r   r   Nr   r   r   r   r   r   r   r   r      s       r   r   c                        e Zd Z G d d      Zy)CallSerializerc                       e Zd ZeZg dZdgZy)CallSerializer.Meta)
r   caller_namefrom_number	to_numbercompanystatusdurationcostcall_idtwilio_call_sidr   Nr   r   r   r   r   r   read_only_fieldsr   r   r   r   r       s    
 !6r   r   Nr   r   r   r   r   r      s    " "r   r   c                      e Zd ZdZ e       Z ej                         Z e	d      Z
 ej                         Z ej                         Z ej                         Z ed      Z ej                         Z G d d      Zd Zd Zd Zd	 Zd
 Zy)CallDetailSerializerz Serializer for call detail view.T)	read_onlyc                       e Zd ZeZg dZdgZy)CallDetailSerializer.Meta)r   r!   r"   r#   r%   r&   r'   bot_type	sentimenttransfer_statuscall_time_category
created_atread_atr(   r)   customerr$   transfer_user
activities
dealershipsummary
transcriptr   Nr*   r   r   r   r   r0   4   s    
2 !6r   r   c                 V    t        |dd       }|r|S |j                  r|j                  S yN	sort_nameUnknowngetattrr!   selfobjvalues      r   get_caller_namez$CallDetailSerializer.get_caller_nameQ   ,    [$/L????"r   c                     t         j                  j                  |j                  |j                        j                         }|rt        |      j                  S y N)phoner$   r   objectsfilterr"   r$   firstCustomerSerializerdatarD   rE   r7   s      r   get_customerz!CallDetailSerializer.get_customer\   E    ##**#++*V\\^%h/444r   c                    |j                   }|s|j                  }|sy d ddS |j                  |j                        }t	        |dd       }|rt        j                  |      }|j                  |xs |j                  xs d |d    dS )NBDC)r   r   sort_advisor_namer@   suffix)	r8   transfer_numberstatus_for_companyr$   rB   r   capitalize_first_lettersr   username)rD   rE   advisor
bdc_numberr%   resolved_names         r   get_transfer_userz&CallDetailSerializer.get_transfer_userb   s    ##,,J 
 ++CKK8%8$?+DD]SM **$E(8(8EIFvhGWFXY
 	
r   c                 f    |j                   j                  d      }t        |d      j                  S z5Return activities ordered descending by performed_at.z-performed_atT)manyr9   order_byCallActivitySerializerrQ   rD   rE   r9   s      r   get_activitiesz#CallDetailSerializer.get_activitiesx   )    ^^,,_=
%jt<AAAr   c                     | j                   j                  d      r| j                   d   j                  dk(  ry|j                  xs dS )Nviewlist )contextgetactionr<   rD   rE   s     r   get_transcriptz#CallDetailSerializer.get_transcript   s<    <<F#V(<(C(Cv(M~~##r   N)r   r   r   __doc__r   r5   r   SerializerMethodFieldr!   r   r$   r7   r8   r9   r   r:   r<   r   rG   rS   r`   rh   rr   r   r   r   r-   r-   '   s    *')J3+335K$/G0{002H5K557M2224J)D9J2224J" ":	
,B"$r   r-   c                        e Zd Z G d d      Zy)rP   c                       e Zd ZeZdgZy)CustomerSerializer.Metar   N)r   r   r   r   r   r   r   r   r   r   rw      s    r   r   Nr   r   r   r   rP   rP      s     r   rP   c                   H    e Zd Z ej                         Z G d d      Zd Zy)rf   c                       e Zd ZeZg dZy)CallActivitySerializer.Meta)user_fullnamerp   performed_atduration_playedN)r   r   r   r   r   r   r   r   r   r   rz      s    Or   r   c                 l    t        |j                  dd       }|r|j                   d|j                   S y )Nprofile )rB   user
first_name	last_name)rD   rE   r   s      r   get_user_fullnamez(CallActivitySerializer.get_user_fullname   s9    #((It4(()7+<+<*=>>r   N)r   r   r   r   rt   r{   r   r   r   r   r   rf   rf      s#    5K557MP Pr   rf   c                        e Zd Z G d d      Zy)SalesCallDetailSerializerc                       e Zd ZeZg dZdgZy)SalesCallDetailSerializer.Meta)r   r!   r"   r2   r5   r   Nr*   r   r   r   r   r      s    
 !6r   r   Nr   r   r   r   r   r      s    	" 	"r   r   c                       e Zd Z ej                         Z ej                         Z ej                         Z ej                         Z ej                         Z	 G d d      Z
d Zd Zd Zd Zd Zy)	SalesCallSerializerc                       e Zd ZeZg dZdgZy)SalesCallSerializer.Meta)	r   r   r!   r"   r2   offtimer5   r7   r9   r   Nr*   r   r   r   r   r      s    

 !6r   r   c                 V    t        |dd       }|r|S |j                  r|j                  S yr>   rA   rC   s      r   rG   z#SalesCallSerializer.get_caller_name   rH   r   c                     t         j                  j                  |j                  |j                        j                         }|rt        |      j                  S y rJ   rL   rR   s      r   rS   z SalesCallSerializer.get_customer   rT   r   c                     |j                   j                         r$|j                   j                         j                  S d S )N)appointment_setrO   r   rq   s     r   get_namezSalesCallSerializer.get_name   s4    363F3F3L3L3Ns""((*//XTXXr   c                     |j                   j                         r$|j                   j                         j                  S dS )N   )r   rO   r   rq   s     r   get_offtimezSalesCallSerializer.get_offtime   s4    696I6I6O6O6Qs""((*22XWXXr   c                 f    |j                   j                  d      }t        |d      j                  S rb   rd   rg   s      r   rh   z"SalesCallSerializer.get_activities   ri   r   N)r   r   r   r   rt   r!   r   r   r7   r9   r   rG   rS   r   r   rh   r   r   r   r   r      sx    3+335K,;,,.D/k//1G0{002H2224J" " 	YYBr   r   c                       e Zd Z ej                  ddd      Z ej                  d      Z ej                  d      Z ej                  d      Z
d Zy	)
TopRepeatedCallersSerializer
   r   d   )default	min_value	max_valueTrequiredFc                 F    |d   |d   k  rt        j                  d      |S )Nend_date
start_datez!End date must be after start dater   ValidationError)rD   rQ   s     r   validatez%TopRepeatedCallersSerializer.validate   s+    
d<00--.QRRr   N)r   r   r   r   IntegerFieldlimitDateTimeFieldr   r   	CharFieldr(   r   r   r   r   r   r      sS    $K$$R1LE***D9J({(($7H#k##U3Gr   r   c                   ^    e Zd Z ej                  d      Z ej                  d      Zd Zy)DateRangeSerializerTr   c                 N    |d   }|d   }||kD  rt        j                  d      |S )Nr   r   zstart_date must be <= end_dater   )rD   rQ   startends       r   r   zDateRangeSerializer.validate   s4    \":3;--.NOOr   N)r   r   r   r   r   r   r   r   r   r   r   r   r      s+    ***D9J({(($7Hr   r   c                   <    e Zd ZdZ ej
                  d      Zd Zy)ReadCallSerializerz&Serializer for marking a call as read.Tr   c                 :    |dk  rt        j                  d      |S )Nr   zID must be a positive integerr   )rD   rF   s     r   validate_idzReadCallSerializer.validate_id  s     A:--.MNNr   N)r   r   r   rs   r   r   r   r   r   r   r   r   r      s    0	!	!	!4	0Br   r   N)rest_frameworkr   apps.core.fieldsr   apps.userprofile.servicesr   apps.customers.modelsr   apps.calls.modelsr   r   apps.companies.modelsr	   r
   apps.companies.serializersr   r   ModelSerializerr   r   r-   rP   rf   r   r   
Serializerr   r   r   r   r   r   <module>r      s    & 3 5 * 0 ? 33  "[00 "&f$;66 f$R44 [88 
" ; ; 
"2B+55 2Bj	;#9#9 	+00 // r   