
    vg                     \    d 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Z
d Z	 dd
Zy	)zE
pipeline_grouper.py

This module is used to make queryset by groups
    )datetime)	Paginator)models)ForwardManyToOneDescriptor)_thread_localsc                 v    | j                   j                  |      }t        ||      }|j                  |      }|S )z=
    This method is used to return the paginator entries
    )GETgetr   get_page)requestqueryset	page_namerecords_per_pagepages        0/var/www/horilla/recruitment/pipeline_grouper.pyrecord_queryset_paginatorr      s8     ;;??9%D#34H  &HO    c           
         g }|rx|D ]q  } |j                   di ||j                  i}|j                         s2|t        | |d| |j                         d| |j                   d}	|j	                  |	       s |S |D ]s  } |j                   di ||i}|j                         s(|t        | |d| | j                  dd            d| | j                  dd      d}
|j	                  |
       u |S )z"
    groups generating method
    dynamic_page_)grouperlistdynamic_name _ )filteridcountr   appendreplace)r   groupersr   r   group_fieldis_fk_fieldgroupsr   group_queryset
group_infogroups              r   generate_groupsr(      s3    F 	*G,X__IWZZ/HIN##%&5&'	{7::,?
 '4I;wzzl$K
 j)	*> M!   	%G,X__FW/EFN##%&5&'	{7)<DDS#N
 '4I;wi$H$P$PS%
 e$	%  Mr   Nc           	         |j                  d      }t        |      dkD  }| j                  }t        t	        ||d      t
              }|}	d}
t	        t        dd      }|s|r|D ])  }|	j                  j                  |      }
|
j                  }	+ |	r,|	j                  j                         }t        ||| ||d      }nt        | j                  |d            D cg c]  \  }}|| j                  |d      d| vr|! }}}t        ||| ||d      }nt        | j                  |d            D cg c]  \  }}|| j                  |d      d| vr|! }}}| j                  j                  j                  |      j                  }|r|j                  j                  |	      }t        ||| ||d      }t!        ||      }|j#                  |      S c c}}w c c}}w )
zT
    This method is used to make group-by and split groups by nested pagination
    __   Nr   T)r#   )flatF)id__in)splitlenmodel
isinstancegetattrr   r   _meta	get_fieldrelated_modelobjectsallr(   	enumeratevalues_listr   r   r   )r   r"   r   r   r   fields_splitsplitedr0   r#   
model_copy	field_objr   fieldr!   r$   indexitemr5   s                     r   group_by_querysetrA   B   s    $$T*L,!#GNNE{D)+EK JI ni6G+! 	1E"((2259I"00J	1 !))--/H$ F $-((4(@$E4 x33Kd3KFUSS	 H  %8YQVF  ))=)=kPT)=)UV
t8//$/GOO 
 

 !,,66{CQQ$,,3383DH XxKU

 v/0F??4  7
s   $G3$G)
   )Nr   2   )__doc__r   django.core.paginatorr   	django.dbr   +django.db.models.fields.related_descriptorsr   horilla.horilla_middlewaresr   r   r(   rA   r   r   r   <module>rI      s2     +  R 6%R JL;!r   