
    vg                     @    d dl mZ d dlmZ d dlmZ ddZd Z	 d	dZy)
    )	Paginator)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        $/var/www/horilla/horilla/group_by.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           	         ddl m}  |       dk7  r |       }|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
    r   )get_pagination2   __   Nr
   T)r!   )flatF)id__in)base.methodsr(   splitlenmodel
isinstancegetattrr   r   _meta	get_fieldrelated_modelobjectsallr&   	enumeratevalues_listr   r   r	   )r   r    r   r   r   r(   fields_splitsplittedr1   r!   
model_copy	field_objr
   fieldr   r"   indexitemr6   s                      r   group_by_querysetrB   9   s-    ,2)+$$T*L< 1$H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   2$G,
$G2)
   )Nr   rC   )	django.core.paginatorr   +django.db.models.fields.related_descriptorsr   horilla.horilla_middlewaresr   r   r&   rB   r   r   r   <module>rG      s&    + R 6%R JL@!r   