
    p{i%                     D    d dl mZmZmZ d dlmZmZmZmZ  G d d      Z	y)    )Value	CharFieldF)ConcatCoalesceNullIfTrimc                   $    e Zd ZdZdZdZd Zd Zy)FullNameSearchMixinz
    Adds a `full_name` annotation and enables searching against it.
    Assumes:
        User -> OneToOne -> UserProfile (related_name='profile')
        profile.first_name
        profile.last_name
    search	full_namec                     |j                   di | j                  t        t        t	        t        t        t        d      t        d            t        d      t        t        d      t        d                        t        d            t        t        d      t        d            t        d      t                     iS )	zs
        full_name priority:
        1. Profile first + last name
        2. Username
        3. "Unknown"
        profile__first_name  profile__last_nameusernameUnknown)output_field )	annotatefull_name_annotationr   r   r	   r   r   r   r   )selfquerysets     J/var/www/html/dp2/backend_v2.1/server/apps/core/mixins/full_name_search.pyannotate_full_namez&FullNameSearchMixin.annotate_full_name   s     !x   
))8" (+@)A59 M %c
 (+?)@%) L b		 1Z=%)4)$!*,
 	
    c                     | j                   j                  j                  | j                        }|s|S  |j                  di | j
                   d|iS )N__icontainsr   )requestquery_paramsgetsearch_paramfilterr   )r   r   r   s      r   apply_full_name_searchz*FullNameSearchMixin.apply_full_name_search-   sZ    **..t/@/@AOx (()5v"
  	r   N)__name__
__module____qualname____doc__r#   r   r   r%   r   r   r   r   r      s     L&
8r   r   N)
django.db.modelsr   r   r   django.db.models.functionsr   r   r   r	   r   r   r   r   <module>r,      s    0 0 E E. .r   