
    siI                        d dl 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 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 d dl m!Z!m"Z" d dl#m$Z$ g dZ%g dZ&g dZ'g dZ( G d de      Z) G d de      Z* G d de      Z+ G d de      Z, G d de      Z- G d d e      Z. G d! d"e      Z/ G d# d$e      Z0y)%    N)datedatetime)models)ValidationError)	get_tokenreverse_lazy)gettext_lazy)HorillaCompanyManager)Company
DepartmentJobPositionTags)Employee)horilla_middlewares)_thread_locals)HorillaModelupload_pathget_diff)HorillaAuditInfoHorillaAuditLog)render_template))lowLow)mediumMedium)highHigh))
departmentr   )job_positionzJob Position)
individual
Individual))
suggestion
Suggestion)	complaint	Complaint)service_requestzService Request)meeting_requestzMeeting Request)anounymous_complaintzAnonymous Complaint)othersOthers))newNew)in_progresszIn Progress)on_holdzOn Hold)resolvedResolved)canceledCanceledc                   ,    e Zd Z ej                  e ed      dej                        Z ej                  e	 ed      dej                        Z
 ej                  eddej                        Z ed	      Zd
 Zd Zd Z G d d      Z fdZ xZS )DepartmentManagerManagerdep_manager)verbose_namerelated_name	on_deleter   dept_managerTFnulleditabler;   'manager__employee_work_info__company_idc                 8    t        dd| j                  i      }|S )/
        This method to get update url
        zdepartment-manager-update-viewpkkwargsr	   rC   selfurls     3/var/www/python-projects/worksol/helpdesk/models.pyget_update_urlz DepartmentManager.get_update_urlD   s    
 ;T477OT
    c                 8    t        dd| j                  i      }|S )/
        This method to get delete url
        zdepartment-manager-deletedep_idrD   rF   rG   s     rJ   get_delete_urlz DepartmentManager.get_delete_urlL   s     6$''?RS
rL   c                     | j                   S NidrH   s    rJ   get_instance_idz!DepartmentManager.get_instance_idS   s    wwrL   c                   0    e Zd ZdZ ed      Z ed      Zy)DepartmentManager.Meta)r    managerzDepartment ManagerzDepartment ManagersN)__name__
__module____qualname__unique_together_r9   verbose_name_plural rL   rJ   MetarX   V   s    3-. 56rL   ra   c                     t        |   |i | | j                  j                         | j                  k(  s"t        t        d| j                   d            y )NzThis employee is not from z .)supercleanrY   get_departmentr    r   r^   rH   argsrE   	__class__s      rJ   rd   zDepartmentManager.clean[   sS    t&v&||**,?!!&@@QQS$T"UVV @rL   )rZ   r[   r\   r   
ForeignKeyr   r^   CASCADErY   r   r    r   PROTECT
company_idr   objectsrK   rP   rV   ra   rd   __classcell__rh   s   @rJ   r6   r6   1   s    fy\"..	G #""|_#..	J #""dUfnnJ $$MNG7 7
W WrL   r6   c                   ,   e Zd Z ej                  dd ed            Z ej                  ed ed            Z ej                  dd ed	            Z	 ej                  edd
ej                        Z ed      Zd Zd Zd Zd Z G d d      Zy)
TicketTyped   TTitle)
max_lengthuniquer9   2   Typechoicesrt   r9      PrefixFr=   rl   related_company_fieldc                     | j                   S rR   titlerU   s    rJ   __str__zTicketType.__str__j       zzrL   c                 8    t        dd| j                  i      }|S )rB   zticket-update-formrC   rD   rF   rG   s     rJ   rK   zTicketType.get_update_urlm   s     /twwH
rL   c                     t        d      }|S )rN   zgeneric-deleter   rG   s     rJ   rP   zTicketType.get_delete_urlt   s     +,
rL   c                     | j                   S )z,
        to get instance for delete
        )rC   rU   s    rJ   get_delete_instancezTicketType.get_delete_instance{   s    
 wwrL   c                   ,    e Zd Z ed      Z ed      Zy)TicketType.MetaTicket TypezTicket TypesNrZ   r[   r\   r^   r9   r_   r`   rL   rJ   ra   r      s    '/rL   ra   N)rZ   r[   r\   r   	CharFieldr^   r   TICKET_TYPEStypeprefixri   r   rk   rl   r   rm   r   rK   rP   r   ra   r`   rL   rJ   rq   rq   a   s    FDqzRE6LRaPViXDV4akRF"""dUfnnJ $,GG0 0rL   rq   c                       e Zd Z ej                  d      Z ej                  eej                  dd      Z	 ej                  e
ej                  d      Z ej                  d      Z ej                  ed	d
      Z ej                   d      Z ej                   dd      Z ej                  ed	 ed            Z ej                  d	 ed            Z ej.                  edd      Z ej                   dd      Z ej.                  edd      Z ej                  edd      Z edeg      Z  e!d      Z" G d d      Z# fdZ$d  Z%d! Z&d" Z'd# Z(d$ Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/d+ Z0d, Z1 xZ2S )-Ticketrv   rt   ticketOwner)r;   r:   r9   r   )r;   r9      rr   r   )ry   rt   defaultTauto_now_add)blankr>   zAssigning Typerx   z
Forward To)rt   r9   ticket_assigned_to)r   r:   r>   r   ticket_tagsr-   )ry   r   rt   history_set)r:   bases+employee_id__employee_work_info__company_idr|   c                   2    e Zd ZdgZ ed      Z ed      Zy)Ticket.Metaz-created_dater   TicketsN)rZ   r[   r\   orderingr^   r9   r_   r`   rL   rJ   ra   r      s    #${	lrL   ra   c                     t        |   |i | | j                  }|<t        j                         j                         }||k  rt        t        d            y y )Nz%Deadline should be greater than today)rc   rd   deadliner   todayr   r   r^   )rH   rg   rE   r   r   rh   s        rJ   rd   zTicket.clean   s[    t&v&==NN$))+E%%a(O&PQQ    rL   c                    | j                   }	 | j                  dk(  r,t        j                  j	                  |      j
                  }|S | j                  dk(  r,t        j                  j	                  |      j                  }|S | j                  dk(  r0t        j                  j	                  |      j                         }|S d}|S # t        j                  t        j                  t        j                  f$ r Y yw xY w)Nr    rS   r!   r"   UnknownDeleted)	raised_onassigning_typer   rm   getr    r   r!   r   get_full_nameDoesNotExistrH   obj_idr   s      rJ   get_raised_onzTicket.get_raised_on   s    	""l2&..22f2=HH	  $$6'//33v3>KK	
 	 $$4$,,00F0;IIK	  &	'')A)A8CXCXY 		s#   :C 	:C >C C 2C<;C<c                    | j                   }	 | j                  dk(  r"t        j                  j	                  |      }|S | j                  dk(  r"t
        j                  j	                  |      }|S | j                  dk(  r"t        j                  j	                  |      }|S d }|S # t        j                  t
        j                  t        j                  f$ r Y y w xY w)Nr    rS   r!   r"   )r   r   r   rm   r   r   r   r   r   s      rJ   get_raised_on_objectzTicket.get_raised_on_object   s    	""l2&..22f2=	  $$6'//33v3>	
 	 $$4$,,00F0;	  !	'')A)A8CXCXY 		s"   0B% 0B% 00B% !B% %2CCc                    t        j                         }| j                  j                   d| j                  d}| j
                  d| d}|S | j
                  |k(  rd}n6| j
                  |z
  j                  }|dk  rt        |      }d| d}nd	| d}| j
                  |k  rd
}n| j
                  |k(  rd}nd}d| d| d| d}|S )z:
        This method is used to get the ticket id
        -03dz
                <span
                    class='
                        d-flex
                        justify-content-between
                        align-items-center
                    '
                >
                    a7  
                    <span title='No deadline set'>
                        <ion-icon
                            class="text-secondary"
                            name="time-outline"
                        >
                        </ion-icon>
                    </span>
                </span>
            z	Due todayr   zOverdue by z dayszDue in dangerwarningsuccessz
            <span
                class='
                    d-flex
                    justify-content-between
                    align-items-center
                '
            >
                z
                <span title='zE'>
                    <ion-icon
                        class="text-z"
                        name="time-sharp"
                    >
                    </ion-icon>
                </span>
            </span>
        )r   r   ticket_typer   rC   r   daysabs)rH   r   	ticket_idcoldue_text	days_diff
icon_classs          rJ   get_ticket_id_colzTicket.get_ticket_id_col   s    

''../q>	 ==  K 	 C$ J==E!"H.44I1}	N	(59$YKu5==5 !J]]e#"J"J  &Z (%%/L 1	$ 
rL   c                 4    t        dd| j                  i      S )zB
        This method is used to get the ticket detail url
        zticket-detailr   rD   rF   rU   s    rJ   get_ticket_detail_urlzTicket.get_ticket_detail_url  s     O[$''4JKKrL   c                     | j                   j                         }|r-dj                  |D cg c]  }|j                          c}      }|S c c}w )z<
        This method is used to get the assigned to
        , )assigned_toalljoinr   )rH   r   emps      rJ   get_assigned_tozTicket.get_assigned_to  sI     &&**,))K$PSS%6%6%8$PQK %Qs   Ac                     | j                   j                         }|r)dj                  |D cg c]  }|j                   c}      }|S c c}w )z<
        This method is used to get the tags column
        r   )tagsr   r   r   )rH   r   tags      rJ   get_tags_colzTicket.get_tags_col'  s=     yy}}9948Ccii89D 9s   Ac                    t        t        dd      }t        |      }d}ddddj                  | j                  d      }dD ]\  }||k(  rd	nd}t        d
      t        d      t        d      d|   }|d| | j                   d| d| d| | j                   d| dz  }^ dt        dd| j                  i       d| d| d}|S )z?
        This method is used to get the priority stars
        requestN 123)r   r   r   321checkedr   r   r   )r   r   r   z-
                <input type="radio" id="starz," name="rating" class="rating-radio" value="" z$ />
                <label for="starz	" title="z"></label>
            z+
            <form hx-swap="none" hx-post="zupdate-priorityr   rD   zX" method="post">
                <input type="hidden" name="csrfmiddlewaretoken" value="z">
                <div class="d-flex">
                    <div class="oh-rate" onclick="event.stopPropagation();$(this).parents().closest('form').find('button').click()">
                        z
                    </div>
                    <button type="submit" hidden="true" onclick="event.stopPropagation()"></button>
                </div>
            </form>
        )getattrr   r   r   priorityr^   rT   r	   )	rH   r   
csrf_tokenrating_inputschecked_valueir   r   htmls	            rJ   get_priority_starszTicket.get_priority_stars1  s    .)T:w'
 #sC@DDT]]TWX 	A#$#5i2GE(81V9EaHE "--.Cy8defdggijqir s!!"DGG9IeW = M		++78IU`cgcjcjTk+l*m nHHR| T ' (	
 rL   c                     | j                   dk(  ry| j                   dk(  ry| j                   dk(  ry| j                   dk(  ry| j                   d	k(  ry
y)z;
        This method is used to get the row colors
        r-   zrow-status--bluer/   zrow-status--oranger0   zrow-status--redr1   zrow-status--yellowgreenr3   zrow-status--grayN)statusrU   s    rJ   
row_colorszTicket.row_colorsP  sT     ;;%%[[M)'[[I%$[[J&,[[J&% 'rL   c                     t        t        dd      }|j                  j                  dd      }| j                  j                  |j                  j                        j                         }t        d| ||d      S )z?
        This method is used to get the ticket actions
        r   N
ticket_tab
my_ticketsemployee_idz%cbv/pipeline/pipeline_action_col.htmlr   tabclaim_request
r   r   GETr   claimrequest_setfilteruseremployee_getfirstr   rH   r   tab_namer   s       rJ   ticket_action_colzTicket.ticket_action_col_  st     .)T:;;??<>--4411 5 

%' 	 3H}M
 	
rL   c                     t        t        dd      }|j                  j                  dd      }| j                  j                  |j                  j                        j                         }t        d| ||d      S )zF
        This method is used to get the ticket kanban actions
        r   Nr   r   r   z&cbv/pipeline/kanban_action_method.htmlr   r   r   s       rJ   kanban_action_methodzTicket.kanban_action_methodm  st     .)T:;;??<>--4411 5 

%' 	 4H}M
 	
rL   c           	         ddl m} t        t        dd      }d}t        D ]'  \  }}|| j
                  k(  rdnd}|d| d| d	| d
z  }) | j                         }|j                  j                  | j                  k(  sT|j                  j                  d      s9|j                  j                  | j                  j                         v s	 |||       r dt        dd| j                  i       d| d}|S )z>
        This method is used to get the status column
        r   )is_department_managerr   Nr   selectedz 
                <option value="r   z>
                    z'
                </option>
            zhelpdesk.change_ticketzw
                <div onclick="event.stopPropagation()" >
                    <select
                        hx-post="zticket-status-changer   rD   a  "
                        name="status"
                        id="status"
                        hx-swap="none"
                        hx-on-htmx-after-request="$('#reloadMessagesButton').click();$(`#offboardingStageContainer{instance.stage_id.pk}`).find('.reload-record').click()"
                        name="status"
                        class="w-100"
                        style="
                            border: 1px solid hsl(213deg, 22%, 84%);
                            padding: 0.3rem 0.8rem 0.3rem 0.3rem;
                            border-radius: 0rem;
                        "
                    >
                        zB
                    </select>
                </div>
            )helpdesk.methodsr   r   r   TICKET_STATUSr   get_status_displayr   r   r   has_permr   r   r	   rT   )rH   r   r   optionsr   namer   r   s           rJ   get_status_colzTicket.get_status_col{  s   
 	;.)T:) 	LFD%+t{{%:zH   &xr( 4F  G	 %%'LL%%)9)99||$$%=>||((D,<,<,@,@,BB$Wd3" #//E{\`\c\cNd"e!f g !	 "!C( 
rL   c                     | j                   S rR   r   rU   s    rJ   r   zTicket.__str__  r   rL   c                     t        |       S )zS
        This method is used to return the tracked history of the instance
        r   rU   s    rJ   trackingzTicket.tracking  s     ~rL   )3rZ   r[   r\   r   r   r   ri   r   rk   r   rq   r   	TextFielddescriptionPRIORITYr   	DateFieldcreated_dateresolved_dateMANAGER_TYPESr^   r   r   ManyToManyFieldr   r   r   r   r   r   r   r   historyr   rm   ra   rd   r   r   r   r   r   r   r   r   r   r   r   r   r  rn   ro   s   @rJ   r   r      s   F+E#&##FNNPWK $&##.."K
 #&""c2KvS%PH#6##6L$F$$4d;M%V%%#A>N<ON !  CaoNI(&((+?K  vT6H!6!!$dODVmUrRF"
G $KG+ +
R@DL>&

,\rL   r   c                   
    e Zd Z ej                  eej                  dd      Z ej                  eej                  dd      Z	 ej                  d      Z ej                  d      Z G d d      ZdefdZ fd	Z xZS )
ClaimRequestT)r;   r>   r   F)r   c                       e Zd ZdZy)ClaimRequest.Metar   r   N)rZ   r[   r\   r]   r`   rL   rJ   ra   r    s    6rL   ra   returnc                 8    | j                    d| j                   S )N|r  rU   s    rJ   r   zClaimRequest.__str__  s    ..!4#3#3"455rL   c                     t        |   |i | | j                  st        dt	        d      i      | j
                  st        dt	        d      i      y )Nr   zThis field is required.r   )rc   rd   r   r   r^   r   rf   s      rJ   rd   zClaimRequest.clean  sU    t&v&~~!;2K0L"MNN!=!4M2N"OPP  rL   )rZ   r[   r\   r   ri   r   rj   r   r   r   BooleanFieldis_approvedis_rejectedra   strr   rd   rn   ro   s   @rJ   r  r    s    !!!..	I $&##..	K &&%%e4K%&%%e4K7 76 6Q QrL   r  c                       e Zd Z ej                  dd      Z ej                  eej                  d      Z	 ej                  e
ej                  d      Z ej                  d      Zd Zy)	CommentTr   comment)r;   r:   employee_commentr   c                     | j                   S rR   )r  rU   s    rJ   r   zComment.__str__  s    ||rL   N)rZ   r[   r\   r   r  r  ri   r   rj   r   r   
DO_NOTHINGr   DateTimeFieldr   r   r`   rL   rJ   r  r    si    fD5GVviXF#&##F--<NK  6T2DrL   r  c                   (    e Zd Z ej                  e      Z ej                  ddd      Z ej                  ddd      Z	 ej                  eej                  ddd      Z ej                  eej                  ddd      Zd	 Z fd
Zd Z xZS )
Attachment)	upload_torr   T)rt   r   r>   rv   ticket_attachment)r;   r>   r   r:   comment_attachmentc                     g d}ddg}t         j                  j                  | j                  j                        d   j                         }||v rd| _        y ||v rd| _        y d| _        y )N)z.jpgz.jpegz.pngz.svgz.m4az.mp3   audioimagefile)ospathsplitextr*  rI   lowerformat)rH   image_formataudio_formatfile_extensions       rJ   get_file_formatzAttachment.get_file_format  s`    8'))$))--8;AAC\)!DK|+!DK DKrL   c                 D    | j                          t        |   |i | y rR   )r3  rc   saverf   s      rJ   r5  zAttachment.save  s     d%f%rL   c                 h    t         j                  j                  | j                  j                        S rR   )r+  r,  basenamer*  r   rU   s    rJ   r   zAttachment.__str__   s    ww		//rL   )rZ   r[   r\   r   	FileFieldr   r*  r   r  r/  ri   r   rj   r   r  r  r3  r5  r   rn   ro   s   @rJ   r"  r"    s    6k2D"&""cDIKV4dCFV..(F  f..)G	!&
0rL   r"  c            	            e Zd Z ej                  d      Z ej                  ddd      Z ej                  e	ddd e
d      ej                        Z e       Zd	 Z fd
Z G d d      Z xZS )FAQCategory   r   Tr   )r   r>   rt   Fr   )r>   r   r?   r9   r;   c                     | j                   S rR   r   rU   s    rJ   r   zFAQCategory.__str__  r   rL   c                     t        t        j                  dd       }|j                  j	                  d      }| j
                  s-| j                  s!|r|dk7  rt        j                  |      | _        t        | )          y Nr   selected_companyr   r   r   r   sessionr   rT   rl   r   findrc   r5  rH   rg   rE   r   r?  rh   s        rJ   r5  zFAQCategory.save  a    -<<iN"??../ABOO  E)%ll+;<DOrL   c                   ,    e Zd Z ed      Z ed      Zy)FAQCategory.MetazFAQ CategoryzFAQ CategoriesNr   r`   rL   rJ   ra   rF  !  s    ( 01rL   ra   )rZ   r[   r\   r   r   r   r  r  ri   r   r^   rj   rl   r   rm   r   r5  ra   rn   ro   s   @rJ   r:  r:    su    F+E"&""DSIK"""y\..J $%G2 2rL   r:  c                   2    e Zd Z ej                  d      Z ej                         Z ej                  e	d      Z
 ej                  eej                        Z ej                  eddej                        Z e       Zd Z fd	Z G d
 d      Z xZS )FAQr   r   T)r   )r;   Fr=   c                     | j                   S rR   )questionrU   s    rJ   r   zFAQ.__str__0  s    }}rL   c                     t        t        j                  dd       }|j                  j	                  d      }| j
                  s-| j                  s!|r|dk7  rt        j                  |      | _        t        | )          y r>  r@  rC  s        rJ   r5  zFAQ.save3  rD  rL   c                   ,    e Zd Z ed      Z ed      Zy)FAQ.MetarH  FAQsNr   r`   rL   rJ   ra   rM  @  s    xirL   ra   )rZ   r[   r\   r   r   rJ  r  answerr  r   r   ri   r:  rk   categoryr   rl   r   rm   r   r5  ra   rn   ro   s   @rJ   rH  rH  &  s    v3/HVF!6!!$d3D v  GH"""dUfnnJ $%G( (rL   rH  )1r+  r   r   	django.dbr   django.formsr   django.middleware.csrfr   django.urlsr	   django.utils.translationr
   r^   base.horilla_company_managerr   base.modelsr   r   r   r   employee.modelsr   horillar   horilla.horilla_middlewaresr   horilla.modelsr   r   horilla_audit.methodsr   horilla_audit.modelsr   r   horilla_views.cbv_methodsr   r  r
  r   r   r6   rq   r   r  r  r"  r:  rH  r`   rL   rJ   <module>r_     s    	 #  ( , $ 6 > > > $ ' 6 4 * B 5
-W -W`#0 #0Li\ iX	Q< Q<	l 	$0 $0N2, 2D(, (rL   