
    si                        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 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#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZE d dlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO d dlPmQZQmRZRmSZS d dlTmUZUmVZVmWZWmXZX d dlYmZZZ d dl[m\Z\  ej                  e^      Z_d Z`eVd        ZaeVeU eXd      d                       ZbeVeU eXd!      d"                      ZceV eXd#      d$               ZdeVeUd%               ZeeVd&        ZfeVeU eXd'      d(                      ZgeVeU eXd)      d*                      ZheVeUd+               ZieVeUd,               ZjeVd-        ZkeV eXd.      d/               ZleVd0        ZmeVeUd1               ZneVeUd2               ZoeVd3        ZpeVd4        ZqeVd5        ZreV e2d6eN7      d8               Zsd9 ZteVeUd:               ZueVd;        ZveVd<        ZweVd=        ZxeVd>        ZyeVeUd?               ZzeVeUd@               Z{eVdA        Z|eVdB        Z}eVeUdC               Z~eVeUdD               ZeVdE        ZeVdF        ZeV eXdG      dH               ZeVdI        ZeVdJ        ZeVdK        ZeVdL        ZeV eXdM      dN               ZeV eXd6      dO               ZeVeUdP               ZeVeUdQ               ZeV eXdR      dS               ZeVdT        ZeV eXdU      dV               ZeV eXdW      dX               ZeVeU eXdY      dZ                      ZeV ed[d\g       eXd]      d^                      ZeV eXd_      d`               ZeV eXda      db               ZeVdc        ZeVeUdd               Zy)e    N)datetime)
itemgetter)parse_qs)settings)messages)serializers)ProtectedError)HttpResponseHttpResponseRedirectJsonResponse)redirectrender)render_to_string)reverse)gettext)require_http_methods)TagsForm)filtersubordinatesget_key_instancesget_paginationis_reportingmanagerpaginator_qrysortby)
DepartmentJobPositionTags)Employee)get_content_type)ticket_owner_can_enter)FAQCategoryFilter	FAQFilter	FaqSearch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                 8    t        |       j                         dv S )N)yyesttrueon1)strlower)vals    2/var/www/python-projects/worksol/helpdesk/views.py	strtoboolrM   N   s    s8>>CCC    c                     t         j                  j                         }t        j                  j	                  dd      }|t        |      d}t        | d|      S )z
    This function is responsible for rendering the FAQ category view.

    Parameters:
        request (HttpRequest): The HTTP request object.
    questionTflat)faq_categories	questionszhelpdesk/faq/faq_view.htmlcontext)r6   objectsallr0   values_listlistr   )requestrS   rT   rV   s       rL   faq_category_viewr\   R   sT     !((,,.N''
'>I()_G
 '7IIrN   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(   methodr^   is_validsaver   success_r   r[   r_   rV   s      rL   faq_category_createrg   e   sv     D~~w||,==?IIKWa(P&QR"$D 	G 'BGLLrN   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instancer^   z&The FAQ category updated successfully.)r_   faq_categoryr`   )r6   rW   getr(   ra   r^   rb   rc   r   rd   re   r   )r[   rk   rn   r_   rV   s        rL   faq_category_updaterp      s      &&**b*1LL1D~~w||lC==?IIKWa(P&QR $G 'BGLLrN   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)Nrj   z/The FAQ category has been deleted successfully. z$You cannot delete this FAQ category.)<script>window.location.reload()</script>)
r6   rW   ro   deleter   rd   re   r
   r	   error)r[   rk   faqs      rL   faq_category_deleterw      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
    )rS   fpdfilter_dictz#helpdesk/faq/faq_category_list.html)GET	urlencoder    qsr   r   r6   r   )r[   previous_datarS   	data_dictrV   s        rL   faq_category_searchr      sl     KK))+M&w{{366N'Ik9-(w{{+ 	G '@'JJrN   c                 B   t         j                  j                  |      }t        j                  j                  |      }|s.t	        j
                  | t        d             t        t              S |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.
    categoryrj   z$No FAQ found for the given category.)faqsrz   cat_idcreate_tag_fzhelpdesk/faq/faq_list_view.htmlrU   )r0   rW   filterr6   r   infore   r   r\   r!   r}   r   r   )r[   obj_idkwargsr   rn   rV   s         rL   faq_viewr      s     ;;v.D&&---8Lgq!GHI)**w{{# 
	G '<gNNrN   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
    r   initialr^   zThe FAQ created successfully.)r_   r   helpdesk/faq/faq_create.html)	r)   ra   r^   rb   rc   r   rd   re   r   )r[   r   r_   rV   s       rL   
create_faqr      sv     J/0D~~w||$==?IIKWa(G&HI G '97CCrN   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 )ri   rj   rl   r^   zThe FAQ updated successfully.)r_   rv   r   r   )r0   rW   ro   r)   ra   r^   rb   rc   r   rd   re   r   rk   r   )r[   r   rv   r_   rV   s        rL   
faq_updater      s      ++//V/
$CC D~~w||c2==?IIKWa(G&HI,,//G
 '97CCrN   c                 z   | j                   j                  dd      }| j                   j                  dd      }| j                   j                         }| j                   j                  dd      }t        |      }t	        t
        |       |r t        | j                         j                  }n1t
        j                  j                  d      }|rt        t              S |r#|j                  d       |j                  |      }|r|j                  d       |t        | j                         |||d}t        | d	|      S )
ry   r   rr   r   searchT	is_activer   )r   rz   r{   r|   queryhelpdesk/faq/faq_list.html)r}   ro   r~   r   r   r0   r"   r   rW   r   r   r   popr!   r   )r[   rk   r   r   r   r   r   rV   s           rL   
faq_searchr     s    
2	&B{{z2.HKK))+MKKOOHb)E'Ic9%%(( {{!!D!1/00	h{{B{'j! w{{# G '7AArN   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
    r   )r   rz   r{   r|   r   )	r}   r~   r!   r   r   r   r   r0   r   )r[   rk   r   r   r   rV   s         rL   
faq_filterr   J  s|     KK))+MW[[!$$D;;;#D'Ic9%w{{# 	G '7AArN   c                     t        | j                        j                  }t        |j	                               }d|i}t        |      S )Nr   )r!   r}   r   rZ   valuesr   )r[   r   	data_listresponses       rL   faq_suggestionr   f  s?    W[[!$$DT[[]#I	H !!rN   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)Nrj   z+The FAQ "{}" has been deleted successfully.rr   zYou cannot delete this FAQ.rs   )r0   rW   ro   r   rk   rt   r   rd   re   formatr
   r	   ru   )r[   rk   rv   r   s       rL   
faq_deleter   p  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   viewrZ   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_ticketsrz   	gp_fieldsticket_statusr   todayr|   rU   )r7   rW   r   r}   ro   useremployee_getr~   r   r   has_permhasattrr   department_idjob_position_idrk   r   r   r   r#   r$   fieldsr1   r   r   dater   )r[   ticketsr   employeer   my_page_numberall_page_numberallocated_page_numberr   r   r   ticket_listr   r   r   tickets_itemsr   templaterV   s                      rL   ticket_viewr     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5rN   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   r^   
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r   	recipientverbverb_arverb_deverb_esverb_friconr   rs   )r_   t_type_form helpdesk/ticket/ticket_form.html)#r+   r}   ro   ra   r^   FILESrb   rc   filesgetlistr2   r;   startr   rd   re   assigned_torX   employee_user_idappendr   r   get_raised_on_objectr   firstmanagerrA   sendr   r   r   rk   r
   r.   r   )r[   r_   r   r   attachmentsr   attachment_instancemail_thread	employeesr   	assigneesr   rV   s                rL   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
    rj   helpdesk.change_ticketrl   r^   r   r    The Ticket updated successfully.rs   )r_   r   r   r   You don't have permission.HTTP_REFERER/HTTP_HX_REQUESTdecorator_404.html <script>window.location.href = "
"</script>)r7   rW   ro   r   r   r/   r   r   r   rX   r+   ra   r^   r   rb   rc   r   r   r2   r   rd   re   r
   r.   r   r   META)	r[   r   r   r_   r   r   r   rV   previous_urls	            rL   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 rN   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
    rj   r   z$The Ticket un-archived successfully.z!The Ticket archived successfully.r   r   r   r   r   r   r  )r7   rW   ro   r   r   r   r   r/   r   rc   r   rd   re   r   r  r   r   r
   )r[   r   r   r  s       rL   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 rN   c                    | j                   dk7  r*t        j                  | t        d             t	        d      S t
        j                  j                  |      }| j                  j                  d      }||_	        |j                  dk(  rt        j                         |_        |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                          t1        j2                  | j4                  j6                  |d|j                   d	d
ddddt9        dd|j:                  i      	       t=        | |d      }|j?                          t        j@                  | t        d             t	        d      S c c}w )Nr^   zInvalid request method.ru   rj   r   resolvedr   -The status of the ticket has been changed to .(   تم تغيير حالة التذكرة.'   Der Status des Tickets wurde geändert.&El estado del ticket ha sido cambiado.%   Le statut du ticket a été modifié.r   r   r   r   r   status_changer   'The Ticket status updated successfully.rd   )!ra   r   ru   re   r
   r7   rW   ro   r^   r   r   r   resolved_daterc   r   rX   r   r   r   r   r   r   r   r   rA   r   r   r   r   rk   r;   r   rd   )	r[   r   r   r   r   r   r   r   r   s	            rL   ticket_status_changer  ]  s   ~~w"; <=G$$^^9-F\\h'FFM}}
"'~~/
KKM""&&(I;DEx**EIEV''889v**,n=&&(5599;113@@DDFLLNVVGW556
KK!!<V]]O1M:987+vyy1IJ
 #K
 Wa IJK	""1 Fs   I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
    rj   r   r   z%b. %d, %Y, %I:%M %prd   r  )r   messager   
pre_status
cur_statustimer   r	  r
  r  r  r  r  r   r   r   r   r   r  r   dangerzYou Don't have the permission.r   r  r  )"r7   rW   ro   get_status_displayr^   r   r   r   r   r   rX   r   rc   r   nowstrftimere   get_full_namer   r   r   r   r   r   r   rA   r   r   rk   r;   r   r   r  r   )r[   r   r   r  r   r   r  r   r   r   r   r   r   s                rL   change_ticket_statusr    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
    rj   newrt   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   rW   ro   r   r;   r   r   rX   r   r   r   r   r   r   r   r   rA   r   r   r   r   rt   r   rd   re   r   ru   r	   r   r  )r[   r   r   r   r   r   r   r   s           rL   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   rW   r   rk   )r[   r   r   r   tickets_items1tickets_items2tickets_items3r   s           rL   get_allocated_ticketsr0    s    <<$$D((66J**::L^^***-- + N ^^**,//. + N ^^**$'', + N '7.HrN   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   fieldrr   z!helpdesk/ticket/ticket_group.html)	r   r   r   rz   r{   r   r|   r3  r   )r}   r~   r#   r   ro   r7   rW   noner   r   r   r   r   r   r   r   r   rk   rZ   r   r@   r   r   r   r1   r   r   r   r   )r[   r   r   r   r   r   r-  r.  r   r   r   r   r   r   r   r/  r   r3  r   rV   s                       rL   ticket_filterr5    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--rN   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 )#Nrj   r   comment)r   r7  r   historypairr   )r   r8  r   r   )keyrd   zDue in z daysz days overduer  z	Due Todaywarningrr   lowrH   medium23rl   )r   c_formf_formr   r   tag_formsorted_activity_listr   color	remainingrating"helpdesk/ticket/ticket_detail.htmlrU   r   r   r   r   r   r   r  )$r7   rW   ro   r   r   r   get_reporting_managerr   r/   r   rX   r   r  r   r&   r%   ticket_attachmentr7  trackingr   history_datesortedr   deadlinedaysabspriorityr1   r-   r   r   r   r   re   r  r
   )r[   r   r   r   r   r@  rA  r   activity_listcomments	trackingsr7  r8  rC  rD  remaining_daysrE  rF  rV   r  s                       rL   ticket_detailrU    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 rN   c                     t         j                  j                  |      j                         }d|i}t	        | d|      S )Nrj   r   z+helpdesk/ticket/ticket_individual_view.htmlrU   )r7   rW   r   r   r   )r[   r   r   rV   s       rL   ticket_individual_viewrW    sE    ^^""i"0668F&G > rN   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 )Nrj   zhelpdesk.change_claimrequestr   claim_requests*helpdesk/ticket/ticket_claim_requests.htmlr   r   r   r   r   r   r  )r7   rW   r   r   r   r   r/   claimrequest_setrX   r   r   r   re   r  ro   r
   )r[   r   r   rY  rV   r  s         rL   view_ticket_claim_requestr\    s    ^^""i"0668F<=<<  !9: &100446n
 gKWUUgq!=>?||''< ,'#7882<.
K rN   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
    ticketIdrj   r   zselectedValues[]rd   z$The Ticket tag updated successfully.r  r   r   r   r   r   r   r  )r}   r7   rW   ro   r   r   r   r   r/   r   tagsclearr   addre   r   r   r   r  r   r
   )r[   datar   tagidstagIdtagr   r  s           rL   ticket_update_tagrf    s4   
 ;;D^^4
#34F45<<$$(:(:: &101 	!E,,""e",CKKOOC 	! ?@
 H%%gq!=>?||''< ,'#7882<.
K rN   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 )Nrj   r   rl   r^   z%Responsibility updated for the Ticketr   z+helpdesk/ticket/forms/change_raised_on.htmlr_   r   r   r   r   r   r   r   r  )r7   rW   ro   r   r   r   r   r,   ra   r^   rb   rc   r   rd   re   r   rU  r   r   r  r
   )r[   r   r   r_   r  s        rL   ticket_change_raised_onrj    s    ^^9-F45<<$$(:(::!62>>V#%gllVDD}}		  !,S*TUCC9	2
 	
 	gq!=>?||''< ,'#7882<.
K rN   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 )Nrj   r   rk   TrQ   rl   r^   Fcommitr   )id__inzAssinees updated for the Ticketrs   z*helpdesk/ticket/forms/change_assinees.htmlri  r   r   r   r   r   r   r  )r7   rW   ro   r   r   r/   r   rY   r*   ra   r^   rb   rc   cleaned_datasetr   r   r9   r   r:   r   rd   re   r
   r   r   r  )r[   r   r   prev_assignee_idsr_   new_assignee_idsadded_assignee_idsremoved_assignee_idsadded_assigneesremoved_assigneesr   r  s               rL   ticket_change_assigneesrw  9  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 rN   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.
    r^   no_error)errorstag_idtitlerz  N)
ra   r   r^   rb   rc   rk   r|  r   rz  as_jsonr[   r_   rm   r   rz  s        rL   
create_tagr  s  s~     ~~%==?yy{H$"++!H
  ))$$&Xv.//  rN   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   r{  rj   rd   Failed)r  r   )r}   r7   rW   ro   r   r_  removere   r   ru   r   )r[   rb  r   r{  r   re  r  r   s           rL   
remove_tagr    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
    rj   document   Nrbfile_contentfile_extensioncontent_typez$helpdesk/ticket/ticket_document.html)r2   rW   r   r   r   pathossplitextrJ   r   openreadr   )	r[   doc_iddocument_objrV   	file_pathr  r  r   r  s	            rL   view_ticket_documentr    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.

    rj   zDocument has been deleted.rs   )r2   rW   ro   rt   r   rd   re   r
   )r[   r  s     rL   delete_ticket_documentr    sF     f%,,.Wa <=>CDDrN   c                 x   | 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 )	z= "
    This method is used to create comment to a ticket
    r^   rj   Frl  r   )r   r7  r   zA new comment has been created.rh  )ra   r7   rW   ro   r&   r^   rb   rc   r   r   r   r   r   r%   r   r   rd   re   r   rU  )	r[   r   r   r@  r7  rA  r   r   a_forms	            rL   comment_creater    s    
 ~~##y#1W\\*??kkk/G"),,";";G#GNLLN}}'6??$#MM11&9E % &!/%)gP" 	&
 Wa(I&JKMY77rN   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_commentr  rj   z!The comment updated successfully.z-The comment needs to be atleast 2 charactors.rz  ry  )r^   ro   lenr4   rW   r7  rc   r   rd   re   ru   r   )r[   r  r  r7  r   s        rL   comment_editr    s    !!,/J,,""=1K
;!//%%%4%!$G"HI 	w"Q RS*H !!rN   zhelpdesk.delete_commentc                 <   t         j                  j                  |      j                         }|j                  }|j                          t        j                  | t        d      j                  |             t        | j                  j                  dd            S )Nrj   z+{}'s comment has been deleted successfully.r   r   )r4   rW   r   r   r   rt   r   rd   re   r   r   r  ro   )r[   r  r7  r   s       rL   comment_deleter    s{     oo$$
$399;G""HNN@AHHR   0 0 EFFrN   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   rk   )rk   namer   r   employee_first_nameemployee_last_name r   )r}   r   rW   r   r   r   rZ   r   )r[   rb  r   departmentsdeptr   jobpositionsjobr   r   r   s              rL   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
    rj   )r   r   r   r   )r7   rW   ro   r3   r   r   r   existsrc   r   r  )r[   rk   r   s      rL   claim_ticketr  ,  s    
 ^^2&F&&LL-- ' fh 	!:!:fMRRT 0 0 EFFrN   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.
    rj   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   rZ  )rY  refresh)!r3   rW   r   r   r
   rM   r}   ro   r   r   re   r   rX   ra  rA   r   r   r   r   r   rk   	Exceptionloggerru   r   r  rc   is_approvedis_rejectedr   r[  r   rd   )r[   req_idclaim_requestr  r   r   r  r  eemphtmls              rL   approve_claim_requestr  9  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
    pager   	tableNameTr   )querysetrX   myr   )
ticket_idstotal_countN)r}   ro   jsonloadsr   r   r#   r7   rW   r   rX   r0  r   rI   rk   countr   )r[   page_numberfilteredfilterstabler   tickets_filterr   filtered_ticketsr   r  r  rV   s                rL   tickets_select_filterr    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   TrueTrj   r   r   r   r   r  )r^   r  r  r}   ro   r7   rW   r   rc   r   rd   re   r  r
   )r[   r  r   r   r   r  scripts          rL   tickets_bulk_archiver    s     ,,u
C
**S/CI{{{#v-	 	##y#1$ Wa BCD<<##NC8L/~ZHFrN   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  rj   rt   r   r   r#  r$  r%  r&  r'  r   r(  r   r)  r*  r   r   r   r  ) r^   r  r  r7   rW   ro   r;   r   r   rX   r   r   r   r   r   r   r   r   rA   r   r   r   r   rt   r   rd   re   r   r	   ru   r  r
   )r[   r  r   r   r   r   r   r   r   r  r  s              rL   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(  rjt        | j                  | j                        }|j	                         r:|j                          t        j                  | t        d             t        d      S d|i}t        | d|      S )Nr^   z,The department manager created successfully.rs   r_   1department_managers/department_managers_form.html)r'   ra   r^   r   rb   rc   r   rd   re   r
   r   rf   s      rL   create_department_managerr    s     '(D~~*7<<G==?IIKWa(V&WX KLLG 'NPWXXrN   c                 ^   t         j                  j                  |      }t        |      }| j                  dk(  rat        | j
                  |      }|j                         r:|j                          t        j                  | t        d             t        d      S ||d}t        | d|      S )Nrj   rl   r^   z,The department manager updated successfully.rs   )r_   dep_idr  )r5   rW   ro   r'   ra   r^   rb   rc   r   rd   re   r
   r   )r[   r  department_managerr_   rV   s        rL   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XrN   z!helpdesk.delete_departmentmanagerc                    t         j                  j                  |      }t         j                  j                         }|j	                          t        j                  | t        d             |dk(  rt        d      S t        d      S )Nrj   z4The department manager has been deleted successfullyr  z-<script>$('.reload-record').click();</script>z4<script>$('#reloadMessagesButton').click();</script>)	r5   rW   ro   r  rt   r   rd   re   r
   )r[   r  r  r  s       rL   delete_department_managerr  *  ss     +2266&6A%%++-EWa VWXzKLLNOOrN   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
    rj   r   rF  rH   r<  r>  r=  highzPriority updated successfully.r   r   r   r   r   r   r  )r7   rW   ro   r   r   r   rH  r   r/   r   rX   r^   rP  rc   r   rd   re   r   r  r   r   r
   )r[   r   r   rF  r  s        rL   update_priorityr  6  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 rN   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   rW   rX   r   )r[   r  s     rL   ticket_type_viewr  \  s2     %%))+L4~|6T rN   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
    r^   ajaxry  )rz  r   r|  rz  z*Ticket type has been created successfully!rs   &base/ticket_type/ticket_type_form.htmlr_   )r.   ra   r^   r}   ro   rb   rc   rk   r|  r   rz  r}  r   rd   re   r
   r   r~  s        rL   ticket_type_creater  h  s     D~~gll+;;??6"}}99;(!)%^^
 $H--[[((*F6 233==?IIK!#DWa(T&UV KLL0D	
 rN   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  rj   rl   r^   z*Ticket type has been updated successfully!rs   r  )r_   	t_type_id)r8   rW   ro   r.   ra   r^   rb   rc   r   rd   re   r
   r   )r[   r  ticket_typer_   s       rL   ticket_type_updater    s     $$((I(6K;/D~~gll[A==?IIK!#DWa(T&UV KLL0I. rN   r^   DELETEzhelpdesk.delete_tickettypec                 r   t        j                  |      }|re	 |j                          t        j                  | t        d             t         j                  j                  }|dk(  rt        d      S t        d      S t        d      S #  t        j                  | t        d             t        d      cY S xY w)Nz*Ticket type has been deleted successfully!r   z,<script>$('.reload-record').click()</script>z3<script>$('#reloadMessagesButton').click()</script>zTicket type can not delete)
r8   findrt   r   rd   re   rW   r  r
   ru   )r[   r  r  r  s       rL   ticket_type_deleter    s     //),K	P Wa(T&UV&&,,Ez#$RSS#I  MNN		PNN7A&B$CD NOOs   AB 2
B ,B6zhelpdesk.view_departmentmanagerc                 f    t         }|j                  j                         }||d}t        | d|      S )N)r   department_managersz,department_managers/department_managers.html)r5   rW   rX   r   )r[   model_classr  rV   s       rL   view_department_managersr    s?     $K%--113 2G 'I7SSrN   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 )z7
    Method to return employees in the department.
    r  rj   Nemployee_id__id employee_id__employee_first_namer   zemployee/employees_select.html)r}   ro   r   rW   r   r   employeeworkinformation_setrX   rY   rZ   r   r
   )r[   r   employees_querysetr   rV   employee_htmls         rL   get_department_employeesr    s     ;;??8$ 	!!W[[__X%>!?EEG 
 'CCGGIUUA
 "'(II&G$%EwOM&&rN   c           	         t         j                  }t        j                  j	                  |dd      }t        j                  j	                  |dd      }t        j                  j	                  |dd      }t        |d      5 }t        j                  |      }d d d        t        |d      5 }t        j                  |      }d d d        t        |d      5 }	t        j                  |	      }
d d d        D ci c]  }|d   |d   d    }}D ci c]  }|d   |d   d    }}| j                  d	k(  r| j                  j                         D cg c]  }|j                         st        |        }}
D cg c]  }|d   |v s| }}|D cg c]*  }|d   j                  d
      r|d   j                  d
      , }}|D cg c]*  }|d   j                  d      r|d   j                  d      , }}|D cg c]  }|D ]  }|  }}}|D ]  }|d   |v st        t        j                   dt        j"                  |g                  d   j$                  }t&        j(                  j+                  |j,                        j/                         }|rd |_        |j3                           |D ]  }|d   |v st        t        j                   dt        j"                  |g                  d   j$                  }t4        j(                  j+                  |j,                        j/                         }|rd |_        |j3                           |D ]  }t        t        j                   dt        j"                  |g                  d   }|j$                  }|d   j                  d
      }|d   j                  d      } |j                  |      }!| D "cg c]  }"|j                  |"d       }#}"t&        j(                  j+                  |!      j/                         }$t4        j(                  j+                  |#      }%|$|_        t8        j(                  j+                  |j:                        j=                         sXd |_        |j3                          |j>                  jA                  |%       tC        jD                  | d|j:                   d       tC        jF                  | d|j:                   d        d}&tI        |&      S g }'
D ]  }|jK                         }(|d   j                  d
      }|d   j                  d      } | D "cg c]  }"|j                  |"d       c}"|(d<   |j                  |d      |(d
<   |'jM                  |(        tO        | d|'|d      S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY wc c}w c c}w c c}w c c}w c c}w c c}w c c}}w c c}"w c c}"w )N	load_datazfaq.jsonzfaq_category.jsonz	tags.jsonrpkr   r|  r^   r   r_  r  r   )r|  rr   )	title__in)rP   zAutomation 'z' created successfully.z' already exists.z
            <script>
                $('.oh-modal--show').removeClass('oh-modal--show');
                $('#reloadMessagesButton').click();
                $('.filterButton').click();
            </script>
        zhelpdesk/faq/load_faq.html)r   
catagories)(r   BASE_DIRr  r  joinr  r  loadra   r^   keysisdigitintro   rZ   r   deserializedumpsobjectr6   rW   r   r|  r   r  rc   r   r   r0   rP   r  r_  rp  r   rd   r;  r
   copyr   r   ))r[   base_dirfaq_filefaq_category_file	tags_filecatsfaq_category_rawrE   tags_rawr   faq_rawitemcategory_lookup
tag_lookupkselected_idsaselected_faqsrv   category_neededtags_needed_list	item_listtags_neededcategory_jsoncategory_dataexistingtag_jsontag_datafaq_jsondeserializedfaq_objcategory_pktag_pkcategory_titler  
tags_titler   r_  r  processed_faqs	processeds)                                            rL   	load_faqsr+    s     Hww||Hk:>HX{<OPX{K@I		% +99T?+ 
i	  99Q<  
h	 "))D/" HXXttDz4>'#::XOXBJK$$t*d8nW55KJK~~(/(9(9(;K1qyy{AKK$+Gqqw,/FGG %
8}  , Mj)
 
 %
8}  ( Mf%
 

 .>T	)T$tTtTT- 	)MT"o5 $++FDJJ4OP!!V  '..55M<O<O5PVVX'+M$!&&(	) ! 	$H~,++FDJJz4JKV   <<..X^^.DJJL"&HKMMO	$ & 	H''

H:0FGL #))G"8,00<Kh'++F3F,00=N;ABR*..R0BJB"**111GMMOH<<&&&<D'G;;%%w/?/?%@GGI!
  &  |G,<,<+==TU   |G,<,<+==NO/	6 F##N )HHJ	(m''
3X""6*>DEZ^^B3E	& / 3 3K D	*i() $")	
 A+ +   " " YK LG


 U> CB Fsf    V#*V0V=6W
WW&W9WW/W/W#;W(W.W3#V-0V:=Wc                 p   t         j                  j                  |      }| j                  dk(  r`| j                  j                  d      }|D ]!  }t        ||dd      }|j                          # t        j                  | t        d             t        | d||j                  j                         d      S )	z>
    This function is used to upload files to the ticket.
    rj   r^   r   N)r   r   r7  zFile(s) uploaded successfully.rG  )r   r   )r7   rW   ro   ra   r   r   r%   rc   r   rd   re   r   rI  rX   )r[   rk   r   r   r   r  s         rL   ticket_file_uploadr-  O  s     ^^2&F~~%%f- 	D#TVPT$UVFKKM	 	!$D"EF,&*B*B*F*F*HI rN   )r  loggingr  r   operatorr   urllib.parser   django.confr   django.contribr   django.corer   django.db.modelsr	   django.httpr
   r   r   django.shortcutsr   r   django.template.loaderr   django.urlsr   django.utils.translationr   re   django.views.decorators.httpr   
base.formsr   base.methodsr   r   r   r   r   r   base.modelsr   r   r   employee.modelsr   employee.viewsr   helpdesk.decoratorsr   helpdesk.filterr    r!   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  rM   r\   rg   rp   rw   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r+  r0  r5  rU  rW  r\  rf  rj  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r-   rN   rL   <module>rL     s     	   !   # # + H H - 3  1 =   6 5 $ + 6    3
 
 
 Y X  / (			8	$
D J J$ /0M 1  M4 23M 4  M8 23E 4 E K  K2 O O0 '(D )  D4 *+D ,  D8 'B  'BT B  B4 " " *+E , E :6 :6z 8H  8Hv /  /d * *Z $# $#N 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 8 82 " "" ./G 0 G " "B 	G 	G _ _D  %  %F -.  /  & -.,  / , ^ Y  Y Y  Y  89P : P " "J /0 1  12 3 B 12 3  ( vx()12O 3 * O( 67T 8 T 89' : '* m m`   rN   