
    vg4                        d Z 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	m
Z
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 ddlmZmZ ddlmZmZ ddlmZm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z( ddl)m*Z* e'e&d               Z+e'e&d               Z,e'e&d               Z-e'e&d               Z.e'e&d               Z/e'e&d               Z0e'e&d               Z1e'e&dd              Z2e'e& e(d      d                      Z3y)zV
Module for managing announcements, including creation, updates, comments, and views.
    N)datetime	timedelta)messages)User)	EmptyPagePageNotAnInteger	Paginator)Q)HttpResponse)redirectrender)reverse)gettext_lazy)AnnouncementCommentFormAnnouncementForm)closest_numbersfilter_own_records)AnnouncementAnnouncementCommentAnnouncementExpireAnnouncementView)Employee)hx_request_requiredlogin_requiredpermission_required)notifyc                    t         j                  j                  dd      j                         xs d}t        j                  j                         }g }|j                  d      D ]1  }|j                  t        |      z   |_	        |j                  |       3 |r!t        j                  j                  |dg       |j                  t        j                         j                               }| j                  j!                  d	      r|}n<|j                  t#        | j                  j$                  
      t#        d      z        }|j'                  d      j)                  d      }|D ]<  }|j*                  j                  | j                  d      j-                         |_        > t1        j2                  |D cg c]  }|j4                   c}      }|||d}t7        | d|      S c c}w )NdaysT)flat   )expire_date__isnull)r   expire_date)expire_date__gtebase.view_announcement)	employees)employees__isnullannouncementview_set-created_at)userviewed)announcementsgeneral_expire_dateinstance_idsz$announcement/announcements_list.html)r   objectsvalues_listfirstr   allfilter
created_atr   r"   appendbulk_updater   todaydater)   has_permr
   employee_getprefetch_relatedorder_byr'   exists
has_viewedjsondumpsidr   )	requestr,   r+   announcements_to_updateannouncementannouncement_listinstancer-   contexts	            %/var/www/horilla/base/announcement.pyrD   rD      s    	""..vD.AGGIOR  !((,,.M %,,,F 5#/#:#:Y$>
 $
  	 &&|4	5 (()@=/R!(((..:J:O:O:Q(RM||56))00112Q5NN
 *::h}  * "."C"C"J"Jd #K #

&( 	 ::;LMxx{{MNL*2$G
 'A7KK Ns   =G*c                    t               }| j                  dk(  r*t        | j                  | j                        }|j	                         r|j                  d      \  }}|j                          |j                  j                  |       |j                  d   }|j                  d   }|j                  d   }|j                  d   }|j                  j                  |       |j                  j                  |       |j                  j                  |       t        j                  | t        d             t        j                   j#                  |	      }t        j                   j#                  |
      }	|t$        j                   j#                  |      z  }|t$        j                   j#                  |      z  } |j&                  j(                  |  t+        j,                  | j.                  j0                  |ddddddd	       t+        j,                  | j.                  j0                  |	ddddddd	       t               }t3        | dd|i      S )F
    This method renders form and template to update Announcement
    POSTFcommitr%   
departmentjob_position
company_idz"Announcement created successfully.3employee_get__employee_work_info__department_id__in5employee_get__employee_work_info__job_position_id__in%employee_work_info__department_id__in'employee_work_info__job_position_id__in(Your department was mentioned in a post.%   تم ذكر قسمك في منشور..   Ihr Abteilung wurde in einem Beitrag erwähnt.3   Tu departamento fue mencionado en una publicación.3   Votre département a été mentionné dans un post./chatbox-ellipses	recipientverbverb_arverb_deverb_esverb_frr   icon*Your job position was mentioned in a post.)   تم ذكر وظيفتك في منشور.5   Ihre Arbeitsposition wurde in einem Beitrag erwähnt.8   Tu puesto de trabajo fue mencionado en una publicación.7   Votre poste de travail a été mentionné dans un post.z#announcement/announcement_form.htmlform)r   methodrJ   FILESis_validsaveattachmentssetcleaned_datarM   rN   rO   r   success_r   r.   r2   r   r%   addr   sendr)   r9   r   )
rA   rl   anouattachment_idsr%   departmentsjob_positionscompanyemp_depemp_jobss
             rG   create_announcementr   I   s    D~~gmm<==?#'99E9#: D.IIK  0))+6I++L9K --n=M''5GOO,!!-0OO(Wa(L&MNll))DO * G ||**FS + H "H$4$4$;$;6A %< % I "H$4$4$;$;8E %< % I DNN	*KK))!??HMM'
 KK))"ACORQ'
 $%D'@64.QQ    c                    t        j                  |      }|r/|j                          t        j                  | t        d             | j                  j                  d      }t        j                  |      }|rt        ||      nd\  }}||v r|j                  |       |r7||k7  r2t        dd|i      }t        | dt        j                  |             S t        t              S )z6
    This method is used to delete announcements.
    z"Announcement deleted successfully.r-   NNzannouncement-single-viewanoun_id)kwargsz?instance_ids=)r   finddeleter   rt   ru   GETgetr>   loadsr   remover   r   r?   announcement_single_view)rA   r   rC   r-   instance_ids_list__next_instance_idurls           rG   delete_announcementr      s      $$X.L!$H"IJ;;??>2L

<0  	)84 B $$  *,80*FV9WX3%~djj9J.K-LMNN,--r   c                    t         j                  j                  |      }t        |      }| j                  j                  d      }| j
                  dk(  r"t        | j                  | j                  |      }|j                         r|j                  d      \  }}|j                         }|j                  j                  |       |j                  d   }|j                  d   }|j                  d	   }	|j                  d
   }
|j                  j                  |       |j                  j                  |	       |j                  j                  |
       t!        j"                  | t%        d             t&        j                  j)                  |      }t&        j                  j)                  |	      }|t*        j                  j)                  |      z  }|t*        j                  j)                  |	      z  } |j,                  j.                  |  t1        j2                  | j4                  j6                  |ddddddd	       t1        j2                  | j4                  j6                  |ddddddd	       t9        | d||d      S )rI   r@   )rE   r-   rJ   FrK   r%   rM   rN   rO   z"Announcement updated successfully.rP   rR   rT   rV   rX   rY   rZ   r[   r\   r]   r^   r_   rg   rh   ri   rj   rk   z*announcement/announcement_update_form.html)rl   r-   )r   r.   r   r   r   rm   rJ   rn   ro   rp   rq   rr   rs   rM   rN   rO   r   rt   ru   r   r2   r   r%   rv   r   rw   r)   r9   r   )rA   r   rC   rl   r-   rx   ry   r%   rz   r{   r|   r}   r~   s                rG   update_announcementr      sE     ''++x+8L\2D;;??>2L~~gmmlS==?#'99E9#: D.99;L  0))+6I++L9K --n=M''5GOO,!!-0OO(Wa(L&MNll))DO * G ||**FS + H "H$4$4$;$;6A %< % I "H$4$4$;$;8E %< % I DNN	*KK))!??HMM'
 KK))"ACORQ'
 4|4 r   c                    t         j                  j                  |      j                         }| j                  j
                  }t        |j                  |d      }t        j                  j                  |      }g }|r,|D ]'  }|j                  |j                  j                         ) t        t        |            }| j                  dk(  rt        | j                        }|j!                         r||j"                  _
        ||j"                  _        |j'                          t        |j                  |d      }t)        j*                  | t-        d             t/        j0                  | j                  j
                  |d|j2                   dd	|j2                   dd
|j2                   dd|j2                   dd|j2                   ddd	       t5        d|      S t7        | d||d      S )zO
    This method renders form and template to create Announcement comments
    r   )employee_id
request_id)initialannouncement_idrJ   zYou commented a post.zComment under the announcement .u!   تعليق تحت الإعلان u!   Kommentar unter der Ankündigung zComentario bajo el anuncio zCommentaire sous l'annonce r]   r^   r_   zannouncement-view-comment)r   announcement/comment_view.html)rl   r   )r   r.   r2   r0   r)   r9   r   r@   r   r4   r   employee_user_idlistrr   rm   rJ   ro   rE   r   rp   r   rt   ru   r   rw   titler   r   )	rA   r   anounemprl   commentscommentatorsiunique_userss	            rG   create_announcement_commentr      s      ''8'4::<E
,,
#
#C" #h?D #**11(1KHL 	@A > >?	@L)*L~~&w||4==?(+DMM%,1DMM)IIK*(+hGD Wa(?&@AKK))&6u{{m1E;EKK=J;EKK=J5ekk]!D5ekk]!D'
 3hGG(X. r   c           	         t         j                  j                  |      j                  d      }t        j                  j                  |      }t        | |d      }d}|j                         sd}t        | d||||d      S )	zG
    This method is used to view all comments in the announcements
    r   r(   r   zbase.view_announcementcommentFTr   )r   no_commentsr   rC   )	r   r.   r2   r;   r   r   r   r<   r   )rA   r   r   rC   r   s        rG   comment_viewr     s     #**11(1KTTH  ''++x+8L!'85TUHK??( &"(		
	 	r   c                     t         j                  j                  |      }|j                          t	        j
                  | t        d             t               S )z=
    This method is used to delete announcement comments
    r   zComment deleted successfully!)r   r.   r   r   r   rt   ru   r   )rA   
comment_idcomments      rG   delete_announcement_commentr   5  sE     "))---<GNNWa ?@A>r   c                 p   t        j                  |      }| j                  j                  d      }|rt	        j
                  |      ng }|rt        ||      nd\  }}|rEt        j                  j                  | j                  |      \  }}d|_        |j                          ||||d}	t        | d|	      S )z=
    This method is used to render single announcements.
    r-   r   )r)   rC   T)rC   r-   previous_instance_idr   z"announcement/announcement_one.html)r   r   r   r   r>   r   r   r   r.   get_or_creater)   r*   rp   r   )
rA   r   announcement_instancer-   r   r   r   announcement_view_objru   rF   s
             rG   r   r   A  s     )--h7;;??>2L4@

<0b  	)84 +*
 #3#;#;#I#I,A $J $
 q (,$""$ .$ 4,	G '?IIr   r$   c                     | j                   j                  d      }t        j                  j	                  |d      }t        | dd|i      S )z3
    This method is used to view the employees
    r   T)announcement_id__idr*   zannouncement/viewed_by.html	viewed_by)r   r   r   r.   r2   r   )rA   r   viewed_userss      rG   r   r   `  sN     kkoo&78O#++22+D 3 L '8;:UVVr   )N)4__doc__r>   r   r   django.contribr   django.contrib.auth.modelsr   django.core.paginatorr   r   r	   django.db.modelsr
   django.httpr   django.shortcutsr   r   django.urlsr   django.utils.translationr   ru   
base.formsr   r   base.methodsr   r   base.modelsr   r   r   r   employee.modelsr   horilla.decoratorsr   r   r   notifications.signalsr   rD   r   r   r   r   r   r   r   r    r   rG   <module>r      sc    ( # + H H  $ -  6 @ <  % W W ( &L  &LR ;R  ;R| .  .4 @  @F +  +\   2    J  J: -.W /  Wr   