
    vg&                     p   d dl Z d dlZd dl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lmZ d dlmZmZ d d	lmZmZmZ d d
lmZm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l#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP d dlQmRZRmSZSmTZT d dlUmVZVmWZWmXZXmYZY d dlZm[Z[ d dl\m]Z]  ej                  e_      Z`eWd        ZaeWeV eYd      d                       ZbeWeV eYd!      d"                      ZceW eYd#      d$               ZdeWeVd%               ZeeWd&        ZfeWeV eYd'      d(                      ZgeWeV eYd)      d*                      ZheWeVd+               ZieWeVd,               ZjeWd-        ZkeW eYd.      d/               ZleWd0        ZmeWeVd1               ZneWeVd2               ZoeWd3        ZpeWd4        ZqeW e4d5eO6      d7               Zrd8 ZseWeVd9               ZteWd:        ZueWd;        ZveWd<        ZweWd=        ZxeWeVd>               ZyeWeVd?               ZzeWd@        Z{eWdA        Z|eWeVdB               Z}eWeVdC               Z~eWdD        ZeWdE        ZeW eYdF      dG               ZeWdH        ZeWdI        ZeWdJ        ZeWdK        ZeW eYdL      dM               ZeW eYd5      dN               ZeWdO        ZeWeVdP               ZeWeVdQ               ZeW eYdR      dS               ZeWdT        ZeW eYdU      dV               ZeW eYdW      dX               ZeWeV eYdY      dZ                      ZeW e d[d\g       eYd]      d^                      ZeW eYd_      d`               ZeW eYda      db               Zy)c    N)datetime)	strtobool)
itemgetter)parse_qs)messages)	Paginator)ProtectedErrorQ)HttpResponseHttpResponseRedirectJsonResponse)redirectrender)render_to_string)reverse)gettext)require_http_methods)SearchQuerySet)TagsForm)filtersubordinatesget_key_instancesis_reportingmanagerpaginator_qrysortby)
DepartmentJobPositionTags)Employee)get_content_type)ticket_owner_can_enter)FAQCategoryFilter	FAQFilterTicketFilterTicketReGroup)
AttachmentFormCommentFormDepartmentManagerCreateFormFAQCategoryFormFAQFormTicketAssigneesForm
TicketFormTicketRaisedOnFormTicketTagFormTicketTypeForm)is_department_manager)	FAQTICKET_STATUS
AttachmentClaimRequestCommentDepartmentManagerFAQCategoryTicket
TicketType)AddAssigneeThreadRemoveAssigneeThreadTicketSendThread)hx_request_requiredlogin_requiredmanager_can_enterpermission_required)group_by_queryset)notifyc                     t         j                  j                         }|t        | j                        d}t        | d|      S )z
    This function is responsible for rendering the FAQ category view.

    Parameters:
        request (HttpRequest): The HTTP request object.
    )faq_categoriesfzhelpdesk/faq/faq_view.htmlcontext)r6   objectsallr"   GETr   )requestrC   rF   s      "/var/www/horilla/helpdesk/views.pyfaq_category_viewrL   H   s@     !((,,.N(w{{#G
 '7II    zhelpdesk.add_faqcategoryc                    t               }| j                  dk(  r^t        | j                        }|j                         r9|j	                          t        j                  | t        d             t               }d|i}t        | d|      S )z
    This function is responsible for creating the FAQ Category.

    Parameters:
        request (HttpRequest): The HTTP request object.

    Returns:
    GET : return faq category create form template
    POST : return faq category view
    POSTz&The FAQ Category created successfully.form%helpdesk/faq/faq_category_create.html)	r(   methodrO   is_validsaver   success_r   rJ   rP   rF   s      rK   faq_category_createrX   Z   sv     D~~w||,==?IIKWa(P&QR"$D 	G 'BGLLrM   zhelpdesk.change_faqcategoryc                 H   t         j                  j                  |      }t        |      }| j                  dk(  rVt        | j
                  |      }|j                         r/|j                          t        j                  | t        d             ||d}t        | d|      S )
    This function is responsible for updating the FAQ.

    Parameters:
        request (HttpRequest): The HTTP request object.
        id : id of the faq to update.

    Returns:
    GET : return faq create form template
    POST : return faq view
    idinstancerO   z&The FAQ category updated successfully.)rP   faq_categoryrQ   )r6   rG   getr(   rR   rO   rS   rT   r   rU   rV   r   )rJ   r\   r_   rP   rF   s        rK   faq_category_updatera   w   s      &&**b*1LL1D~~w||lC==?IIKWa(P&QR $G 'BGLLrM   zhelpdesk.delete_faqcategoryc                 (   	 t         j                  j                  |      }|j                          t	        j
                  | t        d             t        d      S # t        $ r, t	        j                  | t        d             Y t        d      S w xY w)Nr[   z/The FAQ category has been deleted successfully. z$You cannot delete this FAQ category.)<script>window.location.reload()</script>)
r6   rG   r`   deleter   rU   rV   r   r	   error)rJ   r\   faqs      rK   faq_category_deleterh      s|    K!!%%%,

!$U"VWB Kw"H IJCDDKs   AA (BBc                     | j                   j                         }t        | j                         j                  }t	        |      }t        t        |       |t        | j                         ||d}t        | d|      S )
    This function is responsible for search and filter the FAQ.

    Parameters:
        request (HttpRequest): The HTTP request object.

    Returns:
    GET : return faq filter form template
    POST : return faq view
    )rC   rD   pdfilter_dictz#helpdesk/faq/faq_category_list.html)rI   	urlencoder!   qsr   r   r6   r   )rJ   previous_datarC   	data_dictrF   s        rK   faq_category_searchrq      sl     KK))+M&w{{366N'Ik9-(w{{+ 	G '@'JJrM   c                     t         j                  j                  |      }|t        | j                        |t               d}t        | d|      S )z
    This function is responsible for rendering the FAQ view.

    Parameters:
        request (HttpRequest): The HTTP request object.
        obj_id (int): The id of the the faq category.
    category)faqsrD   cat_idcreate_tag_fzhelpdesk/faq/faq_list_view.htmlrE   )r0   rG   filterr"   rI   r   r   )rJ   obj_idkwargsru   rF   s        rK   faq_viewr{      sK     ;;v.Dw{{# 
	G '<gNNrM   zhelpdesk.add_faqc                    t        d|i      }| j                  dk(  rTt        | j                        }|j                         r/|j	                          t        j                  | t        d             ||d}t        | d|      S )z
    This function is responsible for creating the FAQ.

    Parameters:
        request (HttpRequest): The HTTP request object.

    Returns:
    GET : return faq create form template
    POST : return faq view
    rt   initialrO   zThe FAQ created successfully.)rP   rv   helpdesk/faq/faq_create.html)	r)   rR   rO   rS   rT   r   rU   rV   r   )rJ   ry   rP   rF   s       rK   
create_faqr      sv     J/0D~~w||$==?IIKWa(G&HI G '97CCrM   zhelpdesk.change_faqc                 r   t         j                  j                  |      }t        |      }| j                  dk(  rVt        | j
                  |      }|j                         r/|j                          t        j                  | t        d             |||j                  j                  d}t        | d|      S )rZ   r[   r]   rO   zThe FAQ updated successfully.)rP   rg   rv   r   )r0   rG   r`   r)   rR   rO   rS   rT   r   rU   rV   rt   r\   r   )rJ   ry   rg   rP   rF   s        rK   
faq_updater      s      ++//V/
$CC D~~w||c2==?IIKWa(G&HI,,//G
 '97CCrM   c                 v   | j                   j                  dd      }| j                   j                  dd      }| j                   j                         }| j                   j                  dd      }t        j                  j                  d      }t        |      }t        t        |       |ryt               j                  t        |      t        |      z        j                  d	      }|D cg c]  }|j                   }	}t        j                  j                  |	
      }n1t        j                  j                  d      }|rt        t              S |r#|j                  d       |j                  |      }|r|j                  d       |t        | j                         |||d}
t!        | d|
      S c c}w )rj   rv   rc   rt   searchT	is_active)question__icontains)answer__icontainsdefault)pk__inrs   )ru   rD   rk   rl   queryhelpdesk/faq/faq_list.html)rI   r`   rm   r0   rG   rx   r   r   r   r
   usingpkr   rq   popr"   r   )rJ   r\   rt   ro   r   ru   rp   results_listresult
result_pksrF   s              rK   
faq_searchr     sj    
2	&B{{z2.HKK))+MKKOOHb)E;;-D'Ic9%VA%01u3MMNU9 	
 /;;Ffii;
;{{!!!4 {{!!D!1/00	h{{B{'j!w{{# G '7AA) <s   /F6c                    | j                   j                         }t        | j                         j                  }|j	                  |      }t        |      }t        t        |       |t        | j                         ||d}t        | d|      S )z
    This function is responsible for filter the FAQ.

    Parameters:
        request (HttpRequest): The HTTP request object.

    Returns:
    GET : return faq filter form template
    POST : return faq view
    rs   )ru   rD   rk   rl   r   )	rI   rm   r"   rn   rx   r   r   r0   r   )rJ   r\   ro   ru   rp   rF   s         rK   
faq_filterr   A  s|     KK))+MW[[!$$D;;;#D'Ic9%w{{# 	G '7AArM   c                     t        | j                        j                  }t        |j	                               }d|i}t        |      S )Nru   )r"   rI   rn   listvaluesr   )rJ   ru   	data_listresponses       rK   faq_suggestionr   ]  s?    W[[!$$DT[[]#I	H !!rM   zhelpdesk.delete_faqc                 r   	 t         j                  j                  |      }|j                  j                  }|j                          t        j                  | t        d      j                  |             t        d      S # t        $ r, t        j                  | t        d             Y t        d      S w xY w)Nr[   z+The FAQ "{}" has been deleted successfully.rc   zYou cannot delete this FAQ.rd   )r0   rG   r`   rt   r\   re   r   rU   rV   formatr   r	   rf   )rJ   r\   rg   rv   s       rK   
faq_deleter   g  s    	Bkkooo$

QDELLSQ	
 B Bw"? @ACDDBs   A>B (B65B6c           
      L   t         j                  j                  d      }| j                  j	                  d      r| j                  j	                  d      nd}| j
                  j                  }| j                  j                         }| j                  j	                  d      }| j                  j	                  d      }| j                  j	                  d      }|j                  |      |j                  | j
                  	      z  }g }	t        |       rt        | |d
      }	| j
                  j                  d
      r|}	g }
|j                  d      }| j
                  j                  }t        |d      rt|j                  j                  }|j                  j                  }|r"|j                  |j                  d      }|
|z  }
|r"|j                  |j                  d      }|
|z  }
|j                  |j                  d      }|
|z  }
t!        |      }t#        t         |       d}t%        ||      t%        |	|      t%        |
|      t'        | j                        t(        j*                  t,        |t/        j0                         j3                         |d	}t5        | ||      S )z
    This function is responsible for rendering the Ticket view.

    Parameters:
        request (HttpRequest): The HTTP request object.
    Tr   viewr   my_pageall_pageallocated_pageemployee_id
created_byhelpdesk.view_ticketemployee_work_info
department	raised_onassigning_typejob_position
individualz helpdesk/ticket/ticket_view.html)	
my_ticketsall_ticketsallocated_ticketsrD   	gp_fieldsticket_statusr   todayrl   rE   )r7   rG   rx   rI   r`   useremployee_getrm   r   r   has_permhasattrr   department_idjob_position_idr\   r   r   r   r#   r$   fieldsr1   r   r   dater   )rJ   ticketsr   employeero   my_page_numberall_page_numberallocated_page_numberr   r   r   ticket_listr   r   r   tickets_itemsrp   templaterF   s                      rK   ticket_viewr   w  sN    nn##d#3G&-kkoof&=7;;??6"6D||((HKK))+M[[__Y/Nkkooj1O#KKOO,<=H5<< 9G 9 J K7#(';QR||34..4.0K<<$$Dt)*,,::
..>>'..$-- / M .'..&//. / M .&&&VM&'Ifi(1H#J?$[/B*+<>ST'++&"))&!&&( 
G '8W55rM   c                    t               }| j                  j                  d      r)| j                  j                  d      }t        d|i      }| j                  dk(  rt        | j                  | j
                        }|j                         r|j                         }|j                  j                  d      }|D ]  }t        ||      }|j                          ! t        | |d      }|j                          t        j                  | t        d             |j                   j#                         }|D 	cg c]  }	|	j$                   }
}	|
j'                  |j(                  j$                         t+        |j-                         d	      r|j-                         j.                  j#                         r[|j-                         j.                  j#                         j1                         j2                  }|
j'                  |j$                         t5        j6                  | j8                  j:                  |
d
dddddt=        dd|j>                  i      	       tA        d      S |tC               d}tE        | d|      S c c}	w )z
    This function is responsible for creating the Ticket.

    Parameters:
        request (HttpRequest): The HTTP request object.

    Returns:
    GET : return Ticket create form template
    POST : return Ticket view
    statusr}   rO   
attachmentfileticketcreatetypez The Ticket created successfully.dept_managerz&You have been assigned to a new Ticketu0   لقد تم تعيينك لتذكرة جديدةz'Ihnen wurde ein neues Ticket zugewiesenz!Se te ha asignado un nuevo ticketu(   Un nouveau ticket vous a été attribuéinfiniteticket-detail	ticket_idrz   	recipientverbverb_arverb_deverb_esverb_friconr   rd   )rP   t_type_form helpdesk/ticket/ticket_form.html)#r+   rI   r`   rR   rO   FILESrS   rT   filesgetlistr2   r;   startr   rU   rV   assigned_torH   employee_user_idappendr   r   get_raised_on_objectr   firstmanagerrA   sendr   r   r   r\   r   r.   r   )rJ   rP   r   r   attachmentsr   attachment_instancemail_thread	employeesr   	assigneesr   rF   s                rK   ticket_creater     s    <D{{x *&

 ~~',,6==?YY[F**,,\:K) +
&0j&P##((*+ +7FJKWa(J&KL**..0ICLMx22MIMV//@@Av224nE..0==AAC335BBFFHNNPXX  $$W%=%=>KK))#=JA;B +vyy9QR
   KLL%'G '=wGG1 Ns   :I?c                    t         j                  j                  |      }| j                  j	                  d      s_t        | |      sS| j                  j                  |j                  k(  s0| j                  j                  |j                  j                         v rt        |      }| j                  dk(  rt        | j                  | j                  |      }|j                         ry|j                         }|j                   j#                  d      }|D ]  }t%        ||      }|j                          ! t'        j(                  | t+        d             t-        d      S ||t/               d	}t1        | d
|      S t'        j2                  | t+        d             | j4                  j                  dd      }d| j4                  v rt1        | d      S t-        d| d      S )a  
    This function is responsible for updating the Ticket.

    Parameters:
        request (HttpRequest): The HTTP request object.
        ticket_id : id of the ticket to update.
    Returns:
    GET : return Ticket update form template
    POST : return Ticket view
    r[   helpdesk.change_ticketr]   rO   r   r    The Ticket updated successfully.rd   )rP   r   r   r   You don't have permission.HTTP_REFERER/HTTP_HX_REQUESTdecorator_404.html <script>window.location.href = "
"</script>)r7   rG   r`   r   r   r/   r   r   r   rH   r+   rR   rO   r   rS   rT   r   r   r2   r   rU   rV   r   r.   r   infoMETA)	rJ   r   r   rP   r   r   r   rF   previous_urls	            rK   ticket_updater     s    ^^9-F67 &1<<$$(:(::<<$$(:(:(>(>(@@6*>>V#gllGMMFKD}}"jj00>"- /J*4*V*T'',,./   !,N*OP#$OPP")+

 gA7KKgq!=>?||''< ,'#7882<.
K rM   c                    t         j                  j                  |      }| j                  j	                  d      s/|j
                  | j                  j                  k(  st        | |      r|j                   |_        |j                          |j                  r t        j                  | t        d             nt        j                  | t        d             t        | j                  j                  dd            S t        j                  | t        d             | j                  j                  dd      }d| j                  v rt!        | d	      S t#        d
| d      S )z
    This function is responsible for archiving the Ticket.

    Parameters:
        request (HttpRequest): The HTTP request object.
        ticket_id : id of the ticket to update.
    Returns:
        return Ticket view
    r[   r   z$The Ticket un-archived successfully.z!The Ticket archived successfully.r   r   r   r   r   r   r   )r7   rG   r`   r   r   r   r   r/   r   rT   r   rU   rV   r   r   r   r   r   )rJ   r   r   r   s       rK   ticket_archiver   &  s     ^^9-F 	67!:!:: &1  &///Wa(N&OPWa(K&LM#GLL$4$4^S$IJJ 	gq!=>?||''< ,'#7882<.
K rM   c                    t         j                  j                  |      }|j                         }| j                  j                  d      }| j
                  j                  }|j                  |k7  r*||j                  k(  s8||j                  j                         v s| j
                  j                  d      r||_        |j                          t        j                         }|j                  d      }dt!        d      |j#                         ||j                         |d}|j                  j                         }|D 	cg c]  }	|	j$                   }
}	|
j'                  |j                  j$                         t)        |j+                         d      r|j+                         j,                  j                         r[|j+                         j,                  j                         j/                         j0                  }|
j'                  |j$                         t3        j4                  | j
                  j                  |
d	|j                   d
dddddt7        dd|j8                  i      	       t;        | |d      }|j=                          ndt!        d      d}|j                  dk(  rt        j>                         |_         tC              S c c}	w )z
    This function is responsible for changing the Ticket status.

    Parameters:
    request (HttpRequest): The HTTP request object.
    ticket_id (int): The ID of the Ticket

    Returns:
        return Ticket view
    r[   r   r   z%b. %d, %Y, %I:%M %prU   z'The Ticket status updated successfully.)r   messager   
pre_status
cur_statustimer   z-The status of the ticket has been changed to .u(   تم تغيير حالة التذكرة.u'   Der Status des Tickets wurde geändert.z&El estado del ticket ha sido cambiado.u%   Le statut du ticket a été modifié.r   r   r   r   r   status_changer   dangerzYou Don't have the permission.r   r  resolved)"r7   rG   r`   get_status_displayrO   r   r   r   r   r   rH   r   rT   r   nowstrftimerV   get_full_namer   r   r   r   r   r   r   rA   r   r   r\   r;   r   r   resolved_dater   )rJ   r   r   r  r   r   r  r   r   r   r   r   r   s                rK   change_ticket_statusr  T  s]    ^^9-F**,J\\h'F<<$$D}}F&&&v))--//||$$%=>"FMKKM<<>D==!78D!FG**,($779H **..0ICLMx22MIMV//@@Av224nE..0==AAC335BBFFHNNPXX  $$W%=%=>KK))#DV]]OSTUBA@? +vyy9QR
 +$K
  !=>H
 }}
"'~~/!!C Ns   Kzhelpdesk.delete_ticket)permmodelc                 l   	 t         j                  j                  |      }|j                  dk(  rt	        | |d      }|j                          |j                  j                         }|D cg c]  }|j                   }}|j                  |j                  j                         t        |j                         d      r|j                         j                  j                         r[|j                         j                  j                         j                         j                  }|j                  |j                         t!        j"                  | j$                  j&                  |dddd	d
dt)        d      	       |j+                          t-        j.                  | t1        d      j3                  |             nt-        j4                  | t1        d             t9        | j:                  j                  dd            S c c}w # t6        $ r" t-        j4                  | t1        d             Y Tw xY w)z
    This function is responsible for deleting the Ticket.

    Parameters:
    request (HttpRequest): The HTTP request object.
    ticket_id (int): The ID of the Ticket

    Returns:
    return Ticket view
    r[   newre   r   r   The ticket has been deleted.   تم حذف التذكرة.   Das Ticket wurde gelöschtEl billete ha sido eliminado.   Le ticket a été supprimé.r   ticket-viewr   .The Ticket "{}" has been deleted successfully.z%The ticket is not in the "New" statusYou cannot delete this Ticket.r   r   )r7   rG   r`   r   r;   r   r   rH   r   r   r   r   r   r   r   r   rA   r   r   r   r   re   r   rU   rV   r   rf   r	   r   r   )rJ   r   r   r   r   r   r   r   s           rK   ticket_deleter    s   %E##y#1==E!*K
 **..0ICLMx22MIMV//@@Av224nE..0==AAC335BBFFHNNPXX  $$W%=%=>KK))#35476 /
 MMOBCJJ6R
 NN7A&M$NO   0 0 EFF9 N4  Ew"B CDEs%   A,H .HEH H (H32H3c                    | j                   j                  }|j                  j                  }|j                  j                  }t
        j                  j                  d|j                  d      }t
        j                  j                  d|j                  d      }t
        j                  j                  d|j                  d      }||z  |z  }|S )NTr   )r   r   r   r   r   )	r   r   r   r   r   r7   rG   rx   r\   )rJ   r   r   r   tickets_items1tickets_items2tickets_items3r   s           rK   get_allocated_ticketsr!    s    <<$$D((66J**::L^^***-- + N ^^**,//. + N ^^**$'', + N '7.HrM   c           
         | j                   j                         }t        | j                         j                  }| j                   j	                  d      }| j                   j	                  d      }| j                   j	                  d      }t
        j                  j                         }t
        j                  j                         }|j                  | j                  j                        |j                  | j                        z  }|j                  d      }	t        | |d      }	| j                  j                  d	      r|}	t
        j                  j                         }
| j                  j                  }|j                  j                  }|j                  j                  }|j                  d      }t!        |d
      rj|j                  j                  }|j                  j                  }|r|j                  |j"                  d      }|r|j                  |j"                  d      }|j                  |j"                  d      }d}| j                   j	                  d      dk(  rd}t%        |      t%        |      z   t%        |      z   }
| j                   j	                  d      r/t'        | |	d      }	t'        | |d      }||z  |z  }
t'        | |
d      }
| j                   j	                  d      }|dk7  r|t)        ||| j                   j	                  d      d      }t)        |	|| j                   j	                  d      d      }	t)        ||| j                   j	                  d      d      }t)        ||| j                   j	                  d      d      }t)        ||| j                   j	                  d      d      }d}t%        |      t%        |      z   t%        |      z   }
n$t+        ||      }t+        |	|      }	t+        |
|      }
t-        |      }t/        t
        |       ||	|
t        | j                         |t0        ||t3        j4                         j7                         d	}t9        | ||      S )z
    This function is responsible for search and filter the Ticket.

    Parameters:
        request (HttpRequest): The HTTP request object.

    Returns:
    GET : return ticket filter form template
    POST : return ticket view
    r   r   r   r   r   Tr   zhelpdesk.add_ticketsr   r   r   r   r   r   z helpdesk/ticket/ticket_list.htmlr   cardz helpdesk/ticket/ticket_card.htmlr   fieldrc   z!helpdesk/ticket/ticket_group.html)	r   r   r   rD   rk   r   rl   r$  r   )rI   rm   r#   rn   r`   r7   rG   nonerx   r   r   r   r   r   r   r   r   r\   r   r   r@   r   r   r   r1   r   r   r   r   )rJ   ro   r   r   r   r   r  r  r   r   r   r   r   r   r   r   r   r$  rp   rF   s                       rK   ticket_filterr&    s    KK))+M7;;'**G[[__Y/Nkkooj1O#KKOO,<=^^((*N^^((*NGLL,E,EF<< JX J J ..4.0K$Wg7MNK||34++-<<$$D((66J**::L..4.0Kt)*,,::
..>>(//$-- 0 N (//&//. 0 N !''$'','WN1H{{v&(5^tN33d>6JJ  {{x Wk8<GZ:
*^;nL"7,=xHKKOOG$E{u(&w{{y99

 (
 ;Z
 +E7;;??3C#DFV
 +E7;;??3C#DFV
 +E7;;??3C#DFV
 7 4#77$~:NN 	 #:~>
#KA)*;=RS'Ifi( ".'++&& !&&(
G '8W--rM   c                    t         j                  j                  |      }| j                  j	                  d      s|j
                  j                         | j                  j                  k(  s`t        | |      sT| j                  j                  |j
                  k(  s1| j                  j                  |j                  j                         v rt        j                         j                         }t               }t               }|j                   j                         }g }|j"                  j                         }	|j%                         }
|	D ]!  }|j'                  d||j                  d       # |
D ]'  }|j'                  d||d   d   j(                  d       ) t+        |t-        d	      
      }d}|j.                  |z
  }d|j0                   d}|j0                  dk  rt3        |j0                         d}d}n|j0                  dk(  rd}d}d}|j4                  dk(  rd}n|j4                  dk(  rd}nd}||||t6        t9        |      |t;               |||d}t=        | d|      S t?        j@                  | tC        d             | jD                  j                  dd      }d| jD                  v rt=        | d       S tG        d!| d"      S )#Nr[   r   comment)r   r(  r   historypairr   )r   r)  r   r   )keyrU   zDue in z daysz days overduer  z	Due Todaywarningrc   low1medium23r]   )r   c_formf_formr   r   tag_formsorted_activity_listrw   color	remainingratingz"helpdesk/ticket/ticket_detail.htmlrE   r   r   r   r   r   r   r   )$r7   rG   r`   r   r   r   get_reporting_managerr   r/   r   rH   r   r  r   r&   r%   ticket_attachmentr(  trackingr   history_datesortedr   deadlinedaysabspriorityr1   r-   r   r   r   r   rV   r   r   )rJ   r   rz   r   r   r2  r3  r   activity_listcomments	trackingsr(  r)  r5  r6  remaining_daysr7  r8  rF   r   s                       rK   ticket_detailrF  Q  s   ^^9-F453359R9RR &1<<$$(:(::<<$$(:(:(>(>(@@##%!..224>>%%'OO%	 	G  "wM	 ! 	G  %&#FOA.;;	  &mF9KL50n112%8	"~2234MBIE  A%#IE??e#F__(FF &*%v6$8$J"
 gCWUUgq!=>?||''< ,'#7882<.
K rM   c                     t         j                  j                  |      j                         }d|i}t	        | d|      S )Nr[   r   z+helpdesk/ticket/ticket_individual_view.htmlrE   )r7   rG   rx   r   r   )rJ   r   r   rF   s       rK   ticket_individual_viewrH    sE    ^^""i"0668F&G > rM   c                     t         j                  j                  |      j                         }| j                  j                  d      s'| j                  j                  d      st        | |      r+|j                  j                         }d|i}t        | d|      S t        j                  | t        d             | j                  j                  dd      }d	| j                  v rt        | d
      S t        d| d      S )Nr[   zhelpdesk.change_claimrequestr   claim_requests*helpdesk/ticket/ticket_claim_requests.htmlr   r   r   r   r   r   r   )r7   rG   rx   r   r   r   r/   claimrequest_setrH   r   r   r   rV   r   r`   r   )rJ   r   r   rJ  rF   r   s         rK   view_ticket_claim_requestrM    s    ^^""i"0668F<=<<  !9: &100446n
 gKWUUgq!=>?||''< ,'#7882<.
K rM   c                    | j                   }t        j                  j                  |d         }| j                  j                  d      s/| j                  j                  |j                  k(  st        | |      r|j                  d      }|j                  j                          |D ]=  }t        j                  j                  |      }|j                  j                  |       ? dt        d      d}t        |      S t!        j"                  | t        d             | j$                  j                  d	d
      }d| j$                  v rt'        | d      S t)        d| d      S )z-
    method to update the tags of ticket
    ticketIdr[   r   zselectedValues[]rU   z$The Ticket tag updated successfully.r  r   r   r   r   r   r   r   )rI   r7   rG   r`   r   r   r   r   r/   r   tagsclearr   addrV   r   r   r   r   r   r   )rJ   datar   tagidstagIdtagr   r   s           rK   ticket_update_tagrW    s4   
 ;;D^^4
#34F45<<$$(:(:: &101 	!E,,""e",CKKOOC 	! ?@
 H%%gq!=>?||''< ,'#7882<.
K rM   c                    t         j                  j                  |      }| j                  j	                  d      s#| j                  j
                  |j                  k(  rt        |      }| j                  dk(  rgt        | j                  |      }|j                         r@|j                          t        j                  | t        d             t        t         |      S t#        | d||d      S t        j$                  | t        d	             | j&                  j                  d
d      }d| j&                  v rt#        | d      S t)        d| d      S )Nr[   r   r]   rO   z%Responsibility updated for the Ticketr   z+helpdesk/ticket/forms/change_raised_on.htmlrP   r   r   r   r   r   r   r   r   )r7   rG   r`   r   r   r   r   r,   rR   rO   rS   rT   r   rU   rV   r   rF  r   r   r   r   )rJ   r   r   rP   r   s        rK   ticket_change_raised_onr[    s    ^^9-F45<<$$(:(::!62>>V#%gllVDD}}		  !,S*TUCC9	2
 	
 	gq!=>?||''< ,'#7882<.
K rM   c                 d   t         j                  j                  |      }| j                  j	                  d      st        | |      r|j                  j                  dd      }t        |      }| j                  dk(  r<t        | j                  |      }|j                         r|j                  d	       |j                  d
   j                  dd      }t        |      t        |      z
  }t        |      t        |      z
  }t        j                  j!                  |      }t        j                  j!                  |      }	|j                          t#        | ||      }
|
j%                          t'        | ||	      }
|
j%                          t)        j*                  | t-        d             t/        d      S t1        | d||d      S t)        j2                  | t-        d             | j4                  j                  dd      }d| j4                  v rt1        | d      S t/        d| d      S )Nr[   r   r\   T)flatr]   rO   Fcommitr   )id__inzAssinees updated for the Ticketrd   z*helpdesk/ticket/forms/change_assinees.htmlrZ  r   r   r   r   r   r   r   )r7   rG   r`   r   r   r/   r   values_listr*   rR   rO   rS   rT   cleaned_datasetr   rx   r9   r   r:   r   rU   rV   r   r   r   r   )rJ   r   r   prev_assignee_idsrP   new_assignee_idsadded_assignee_idsremoved_assignee_idsadded_assigneesremoved_assigneesr   r   s               rK   ticket_change_assigneesrj    s    ^^9-F||56:O; #..::4d:K"F3>>V#&w||fED}}			'#'#4#4]#C#O#Ot $P $  &))9%:SAR=S%S"'*+<'=DT@U'U$"*"2"2"9"9AS"9"T$,$4$4$;$;CW$;$X!		/#
 !!#2%
 !!#  !,M*NO#$OPP8	2
 	
 	gq!=>?||''< ,'#7882<.
K rM   c                 $   | j                   dk(  rt        | j                        }|j                         r5|j	                         }d|j
                  |j                  d}t        |      S |j                  j                         }t        d|i      S y)z^
    This is an ajax method to return json response to create tag in the change tag form.
    rO   no_error)errorstag_idtitlerm  N)
rR   r   rO   rS   rT   r\   ro  r   rm  as_jsonrJ   rP   r^   r   rm  s        rK   
create_tagrr  B  s~     ~~%==?yy{H$"++!H
  ))$$&Xv.//  rM   c                 h   | j                   }|d   }|d   }	 t        j                  j                  |      }t        j                  j                  |      }|j
                  j                  |       t        d      }d}t        |d      S #  t        j                  | t        d            }Y 1xY w)z>
    This is an ajax method to  remove tag from a ticket.
    r   rn  r[   rU   Failed)r  r   )rI   r7   rG   r`   r   rP  removerV   r   rf   r   )rJ   rS  r   rn  r   rV  r  r   s           rK   
remove_tagrv  X  s     ;;D[!I(^F7##y#1ll&)3I, GT:;;7..!H+6s   A(B !B1c                    t         j                  j                  |      j                         }d|i}|j                  r|j                  j
                  }t        j
                  j                  |      d   dd j                         }t        |      }	 t        |d      5 }|j                         }ddd       |d<   ||d<   ||d<   t        | d	|      S # 1 sw Y   %xY w#  d}Y .xY w)
z
    This function used to view the uploaded document in the modal.
    Parameters:

    request (HttpRequest): The HTTP request object.
    id (int): The id of the document.

    Returns: return view_file template
    r[   document   Nrbfile_contentfile_extensioncontent_typez$helpdesk/ticket/ticket_document.html)r2   rG   rx   r   r   pathossplitextlowerr   openreadr   )	rJ   doc_iddocument_objrF   	file_pathr|  r}  r   r{  s	            rK   view_ticket_documentr  n  s     %%,,,7==?LLG  %%**	)))4Q7B

%' 	 (7	 i& +$#yy{+
 #/$2 !".'A7KK+ +	 Ls$   C!  C1C! CC! !C'c                     t         j                  j                  |      j                          t	        j
                  | t        d             t        d      S )z
    This function used to delete the uploaded document in the modal.
    Parameters:

    request (HttpRequest): The HTTP request object.
    id (int): The id of the document.

    r[   zDocument has been deleted.rd   )r2   rG   r`   re   r   rU   rV   r   )rJ   r  s     rK   delete_ticket_documentr    sF     f%,,.Wa <=>CDDrM   c                 |   | j                   dk(  r,t        j                  j                  |      }t	        | j
                        }|j                         r|j                  d      }| j                  j                  |_
        ||_        |j                          | j                  rft        | j                        }|j                         rA| j                  j                  d      }|D ]!  }t        |||d      }|j                          # t        j                   | t#        d             t%        t&        |      S y	y	)
z= "
    This method is used to create comment to a ticket
    rO   r[   Fr^  r   )r   r(  r   zA new comment has been created.rY  N)rR   r7   rG   r`   r&   rO   rS   rT   r   r   r   r   r   r%   r   r   rU   rV   r   rF  )	rJ   r   r   r2  r(  r3  r   r   a_forms	            rK   comment_creater    s   
 ~~##y#1W\\*??kkk/G"),,";";G#GNLLN}}'6??$#MM11&9E % &!/%)gP" 	&
 Wa(I&JKMY??   rM   c                    | j                   j                  d      }| j                   j                  d      }t        |      dkD  rWt        j                  j                  |      }||_        |j                          t        j                  | t        d             nt        j                  | t        d             ddi}t        |      S )	N
comment_idnew_commentry  r[   z!The comment updated successfully.z-The comment needs to be atleast 2 charactors.rm  rl  )rO   r`   lenr4   rG   r(  rT   r   rU   rV   rf   r   )rJ   r  r  r(  r   s        rK   comment_editr    s    !!,/J,,""=1K
;!//%%%4%!$G"HI 	w"Q RS*H !!rM   zhelpdesk.delete_commentc                 <   t         j                  j                  |      j                         }|j                  }|j                          t        j                  | t        d      j                  |             t        | j                  j                  dd            S )Nr[   z+{}'s comment has been deleted successfully.r   r   )r4   rG   rx   r   r   re   r   rU   rV   r   r   r   r`   )rJ   r  r(  r   s       rK   comment_deleter    s{     oo$$
$399;G""HNN@AHHR   0 0 EFFrM   c                    | j                   }|d   }|dk(  r9t        j                  j                  dd      }|D cg c]  }|d   |d   d }}n|dk(  r9t        j                  j                  dd      }|D cg c]  }|d   |d   d }}nF|dk(  rAt
        j                  j                  ddd      }|D 	cg c]  }	|	d   |	d    d	|	d    d }}	d
t              i}
t        |
      S c c}w c c}w c c}	w )zD
    This is an ajax method to return list for raised on field.
    r   r   r\   )r\   namer   r   employee_first_nameemployee_last_name r   )rI   r   rG   r   r   r   r   r   )rJ   rS  r   departmentsdeptr   jobpositionsjobr   r   r   s              rK   get_raised_onr    sC   
 ;;D*+N% ((//lCGR
?C4:tL'9:
	 
 
>	)"**11$GFR
?B3t9c.&9:
	 
 
<	'$$++')=
	 &

  tn#$9:;1XFZ=[<\]
	 
 T)_-H!!)



s   C,9C18C6c                 p   t         j                  j                  |      }t        j                  j	                  | j
                  j                  |      j                         s/t        | j
                  j                  |      j                          t        | j                  j                  dd            S )zM
    This is a function to create a claim request for requested employee
    r[   )r   r   r   r   )r7   rG   r`   r3   rx   r   r   existsrT   r   r   )rJ   r\   r   s      rK   claim_ticketr    s    
 ^^2&F&&LL-- ' fh 	!:!:fMRRT 0 0 EFFrM   c                    t         j                  j                  |      j                         }|st	        dd      S t        | j                  j                  dd            }|j                  }|j                  }d}|rt        d      }d	}||j                  j                         vrP|j                  j                  |       	 t        j                  | j                   j"                  |j$                  d
| dd| dd| dd| dd| ddt'        dd|j(                  i      	       |j                  |j0                  j"                  k(  s|j0                  j"                  |j                  fD ]u  }		 t        j                  | j                   j"                  |	j$                  | d| dd| d| d| d| d| d| d| d| ddt'        dd|j(                  i      	       w 	 t        j                  | j                   j"                  |j                  j$                  | d| dd| d| d| d| d| d| d| d| ddt'        dd|j(                  i      	       nt        d      }d	}||j                  j                         v ri|j                  j3                  |       t        j                  | j                   j"                  |j$                  d| d | dd!| d"d#| dd$| d%d&       |j5                          ||_        | |_        |j5                          t;        d'|j<                  j                         |d(      }
t?        j@                  | |       t	        |
      S # t*        $ r }t,        j/                  |       Y d}~hd}~ww xY w# t*        $ r }t,        j/                  |       Y d}~Od}~ww xY w# t*        $ r}t,        j/                  |       Y d}~d}~ww xY w))zX
    Function for approve claim request and send notifications to the responsibles.
    r[   zInvalid claim requesti  )r   approveFalseFz$Claim request approved successfully.Tz'You have been assigned to a new Ticket-r  u1   لقد تم تعيينك لتذكرة جديدة zIhnen wurde ein neues Ticket z zugewiesen.z"Se te ha asignado un nuevo ticket zUn nouveau ticket u    vous a été attribué.r   r   r   r   r   Nz assigned to your ticket - u   تم تعيين u    إلى تذكرتك - z wurde Ihrem Ticket z  ha sido asignado a tu ticket - u$    a été assigné à votre ticket - z$Claim request rejected successfully.z*Your claim request is rejected for Ticket-u7   تم رفض طلبك للمطالبة بالتذكرة u"   Ihre Anspruchsanfrage für Ticket-z wurde abgelehnt.u>   Tu solicitud de reclamación ha sido rechazada para el ticket u-   Votre demande de réclamation pour le ticket u    a été rejetée.)r   r   r   r   r   r   r   rK  )rJ  refresh)!r3   rG   rx   r   r   r   rI   r`   r   r   rV   r   rH   rR  rA   r   r   r   r   r   r\   	Exceptionloggerrf   r   ru  rT   is_approvedis_rejectedr   rL  r   rU   )rJ   req_idclaim_requestr  r   r   r  r  eemphtmls              rK   approve_claim_requestr    s   
 !((//6/:@@BM3C@@	7+G $$F((HG:;6--1133""8, LL--&77B6(!LOPVxWXY;F8<P@J08PQ#$_k699=UV
 %%):):)G)GG"--::F<N<NO (C(#LL55&)&:&:$,:-HPQ!R&6xj@WX^W__`$a'/j0DVHL$Y'/j0PQWPXXY$Z'/j0TU[T\\]$^!+%, /fii8P&(" LL--$00AA$:%@J.xj8OPVxWXY'j(<VHLQ'j(HPQR'j(LVHTUV#$_k699=UV
 :;v))--//%%h/ KK))"33A&JQRXQYYZ[<VHDUVXY_X``abGxOab	 KKM 'M$+M4!22668WMD Wg&{   Q $ % (Q(   Q sK   A'M1 6A2N+A<O	 1	N:NN	O&OO		O1O,,O1c                    | j                   j                  d      }| j                   j                  d      }|rt        j                  |      ni }| j                   j                  d      }| j                  j
                  }t        |t        j                  j                  d            }|dk(  r|dk(  r*t        |t        j                  j                               }nI|dk(  r,t        |t        j                  j                  |	            }nt        |       }t        ||      }|j                  }|D 	cg c]  }	t        |	j                         }
}	|j                         }|
|d
}t!        |      S yc c}	w )zK
    This method is used to return all the ids of the filtered tickets
    pagerx   	tableNameTr   )querysetrH   myr   )
ticket_idstotal_countN)rI   r`   jsonloadsr   r   r#   r7   rG   rx   rH   r!  rn   strr\   countr   )rJ   page_numberfilteredfilterstabler   tickets_filterr   filtered_ticketsr   r  r  rF   s                rK   tickets_select_filterr  k  s?   
 ++//&)K{{x(H&.djj"BGKKOOK(E<<$$D!&..//$/?N eE>)'FNN<N<N<PQNd])&.."7"7D"7"IN !6g >)'<MNN *,,3CDc&))nD
D&,,.!+KHG$$'  Es   9E8r   c                    | j                   d   }t        j                  |      }d}| j                  j	                  d      dk(  rd}|D ]9  }t
        j                  j	                  |      }||_        |j                          ; t        j                  | t        d             | j                  j	                  dd	      }d
| d}t        |      S )zH
    This is a ajax method used to archive bulk of Ticket instances
    idsFr   TrueTr[   r   r   r   r   r   )rO   r  r  rI   r`   r7   rG   r   rT   r   rU   rV   r   r   )rJ   r  r   r   r   r   scripts          rK   tickets_bulk_archiver    s     ,,u
C
**S/CI{{{#v-	 	##y#1$ Wa BCD<<##NC8L/~ZHFrM   c                 x   | j                   d   }t        j                  |      }|D ]  }	 t        j                  j                  |      }t        | |d      }|j                          |j                  j                         }|D cg c]  }|j                   }}|j                  |j                  j                         t        |j                         d      r|j                         j                  j                         r[|j                         j                  j                         j!                         j"                  }|j                  |j                         t%        j&                  | j(                  j*                  |dddd	d
dt-        d      	       |j/                          t1        j2                  | t5        d      j7                  |              | j<                  j                  dd      }	d|	 d}
t?        |
      S c c}w # t8        $ r# t1        j:                  | t5        d             Y w xY w)zG
    This is a ajax method used to delete bulk of Ticket instances
    r  r[   re   r   r   r  r  r  r  r  r   r  r   r  r  r   r   r   r   ) rO   r  r  r7   rG   r`   r;   r   r   rH   r   r   r   r   r   r   r   r   rA   r   r   r   r   re   r   rU   rV   r   r	   rf   r   r   )rJ   r  r   r   r   r   r   r   r   r   r  s              rK   tickets_bulk_deleter    s    ,,u
C
**S/C #I	"	I^^''9'5F*K
 **..0ICLMx22MIMV//@@Av224nE..0==AAC335BBFFHNNPXX  $$W%=%=>KK))#35476 /
 MMOBCJJ6R=#IH <<##NC8L/~ZHF9 N0  	INN7A&F$GH	Is%   AHHD=HH(H98H9c                     t               }| j                  dk(  rKt        | j                  | j                        }|j	                         r|j                          t        d      S d|i}t        | d|      S )NrO   rd   rP   z*helpdesk/faq/department_managers_form.html)r'   rR   rO   r   rS   rT   r   r   rW   s      rK   add_department_managerr    sf    &(D~~*7<<G==?IIK KLLG 'GQQrM   c                 *   t               }| j                  dk(  rjt        | j                  | j                        }|j	                         r:|j                          t        j                  | t        d             t        d      S d|i}t        | d|      S )NrO   z,The department manager created successfully.rd   rP   1department_managers/department_managers_form.html)r'   rR   rO   r   rS   rT   r   rU   rV   r   r   rW   s      rK   create_department_managerr    s     '(D~~*7<<G==?IIKWa(V&WX KLLG 'NPWXXrM   c                 ^   t         j                  j                  |      }t        |      }| j                  dk(  rat        | j
                  |      }|j                         r:|j                          t        j                  | t        d             t        d      S ||d}t        | d|      S )Nr[   r]   rO   z,The department manager updated successfully.rd   )rP   dep_idr  )r5   rG   r`   r'   rR   rO   rS   rT   r   rU   rV   r   r   )rJ   r  department_managerrP   rF   s        rK   update_department_managerr    s     +2266&6A&0BCD~~*7<<BTU==?IIKWa(V&WX KLLG 'NPWXXrM   z!helpdesk.delete_departmentmanagerc                     t         j                  j                  |      }|j                          t	        j
                  | t        d             t        | j                  j                  dd            S )Nr[   z4The department manager has been deleted successfullyr   r   )	r5   rG   r`   re   r   rU   rV   r   r   )rJ   r  r  s      rK   delete_department_managerr    s\     +2266&6AWa VWX 0 0 EFFrM   c                    t         j                  j                  |      }| j                  j	                  d      s|j
                  j                         | j                  j                  k(  s_t        | |      sS| j                  j                  |j
                  k(  s0| j                  j                  |j                  j                         v r| j                  j                  d      }|dk(  rd|_        n|dk(  rd|_        nd|_        |j                          t        j                  | t!        d	             t#        | j$                  j                  d
d            S t        j&                  | t!        d             | j$                  j                  d
d      }d| j$                  v rt)        | d      S t+        d| d      S )zQ
    This function is used to update the priority
    from the detailed view
    r[   r   r8  r.  r-  r0  r/  highzPriority updated successfully.r   r   r   r   r   r   r   )r7   rG   r`   r   r   r   r9  r   r/   r   rH   rO   rA  rT   r   rU   rV   r   r   r   r   r   )rJ   r   r   r8  r   s        rK   update_priorityr    sc    ^^9-F453359R9RR &1<<$$(:(::<<$$(:(:(>(>(@@!!(+S=#FOs]&FO$FO!$D"EF#GLL$4$4^S$IJJgq!=>?||''< ,'#7882<.
K rM   zhelpdesk.view_tickettypec                 \    t         j                  j                         }t        | dd|i      S )z1
    This method is used to show Ticket type
    z!base/ticket_type/ticket_type.htmlticket_types)r8   rG   rH   r   )rJ   r  s     rK   ticket_type_viewr  8  s2     %%))+L4~|6T rM   zhelpdesk.create_tickettypec                 2   t               }| j                  dk(  rt        | j                        }| j                  j	                  d      rl|j                         r5|j                         }d|j                  |j                  d}t        |      S |j                  j                         }t        d|i      S |j                         rD|j                          t               }t        j                  | t        d             t        d      S t!        | dd	|i      S )
E
    This method renders form and template to create Ticket type
    rO   ajaxrl  )rm  r   ro  rm  z*Ticket type has been created successfully!rd   &base/ticket_type/ticket_type_form.htmlrP   )r.   rR   rO   rI   r`   rS   rT   r\   ro  r   rm  rp  r   rU   rV   r   r   rq  s        rK   ticket_type_creater  D  s     D~~gll+;;??6"}}99;(!)%^^
 $H--[[((*F6 233==?IIK!#DWa(T&UV KLL0D	
 rM   zhelpdesk.update_tickettypec                 n   t         j                  j                  |      }t        |      }| j                  dk(  rkt        | j
                  |      }|j                         rD|j                          t               }t        j                  | t        d             t        d      S t        | d||d      S )r  r[   r]   rO   z*Ticket type has been updated successfully!rd   r  )rP   	t_type_id)r8   rG   r`   r.   rR   rO   rS   rT   r   rU   rV   r   r   )rJ   r  ticket_typerP   s       rK   ticket_type_updater  h  s     $$((I(6K;/D~~gll[A==?IIK!#DWa(T&UV KLL0I. rM   rO   DELETEzhelpdesk.delete_tickettypec                     t        j                  |      }|r9|j                          t        j                  | t        d             t               S t        j                  | t        d             t               S )Nz*Ticket type has been deleted successfully!zTicket type not found)r8   findre   r   rU   rV   rf   r   )rJ   r  r  s      rK   ticket_type_deleter    s_     //),K!$P"QR > 	w"9 :;>rM   zhelpdesk.view_departmentmanagerc                 `    t         j                  j                         }d|i}t        | d|      S )Ndepartment_managersz,department_managers/department_managers.html)r5   rG   rH   r   )rJ   r  rF   s      rK   view_department_managersr    s:     ,33779 	2G 'I7SSrM   z!helpdesk.change_departmentmanagerc                 t   | j                   j                  d      rGt        j                  j	                  | j                   j                  d            j                         nd}|r+|j                  j                         j                  dd      }nd}t        |      }d|i}t        d|      }t        |      S )z5
    Method to return employee in the department
    r  r[   Nemployee_id__id employee_id__employee_first_namer   zemployee/employees_select.html)rI   r`   r   rG   rx   r   employeeworkinformation_setrH   ra  r   r   r   )rJ   r   employees_querysetr   rF   employee_htmls         rK   get_department_employeesr    s     ;;??8$ 	!!W[[__X%>!?EEG 
 'CCGGIUUA
 "'(II&G$%EwOM&&rM   )r  loggingr  r   distutils.utilr   operatorr   urllib.parser   django.contribr   django.core.paginatorr   django.db.modelsr	   r
   django.httpr   r   r   django.shortcutsr   r   django.template.loaderr   django.urlsr   django.utils.translationr   rV   django.views.decorators.httpr   haystack.queryr   
base.formsr   base.methodsr   r   r   r   r   base.modelsr   r   r   employee.modelsr   employee.viewsr   helpdesk.decoratorsr    helpdesk.filterr!   r"   r#   r$   helpdesk.formsr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   helpdesk.methodsr/   helpdesk.modelsr0   r1   r2   r3   r4   r5   r6   r7   r8   helpdesk.threadingr9   r:   r;   horilla.decoratorsr<   r=   r>   r?   horilla.group_byr@   notifications.signalsrA   	getLogger__name__r  rL   rX   ra   rh   rq   r{   r   r   r   r   r   r   r   r   r   r   r  r  r!  r&  rF  rH  rM  rW  r[  rj  rr  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rM   rK   <module>r     s[     	  $  ! # + . H H - 3  1 = )   6 5 $ + 6 U U   3
 
 
 Y X  / (			8	$
 J J" /0M 1  M4 23M 4  M8 23E 4 E K  K2 O O( '(D )  D4 *+D ,  D8 -B  -B` B  B4 " " *+E , E :6 :6z 8H  8Hv /  /d * *Z C" C"L 5VD1G E 1Gh* e.  e.P J JZ    2  D   > 5  5p 0 0* < <* L  LB E  E @ @2 " "" ./G 0 G " "B 	G 	G _ _D  %  %F -.  /  & -.,  / , ^ R R Y  Y Y  Y  89G : G " "J /0 1  12 3 B 12 3  ( vx()12 3 *  67T 8 T 89' : 'rM   