U
    gG                     @   sF  d dl mZ d dlmZ d dlmZ d dlmZ d dl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 d d
lmZ d dlmZ d dlmZ d dlZd dlmZmZ d dlmZmZ d dlmZ d dlZd dl m!Z! d dl"m#Z# dd Z$dd Z%G dd dej&Z'e#e!e'ddd Z(G dd dej&Z)G dd dej&Z*dS )    )models)SET_DEFAULT)ManyToManyField)reverseN)RoomSemesterStudy)	timedelta)Member)slugify)HttpResponse)timezone)etree)CalendarEvent)vCalAddressvText)datetime)	post_save)receiverc                 C   s"   t | }tjj|d}| }|S )N)slug)r   Seminarobjectsfilterexists)inputr   qsr    r   #/var/www/nanotud/teaching/models.pycreate_slug_seminar   s    r   c               	   C   s  t d} tjjddjt djddjddjddD ](}t | d	}t |d
}t|j	|_
t |d}|j|_
t |d}t |d}t|j}t |d}|d|_
t |d}	|d|	_
t |d}
|d|
_
|tdd }t |d}|d|_
|jd k	r>t |d}|jjj d|jj |_
t |d}t |d}|jrd|jnd|_
|jrt |d}|j|_
|jrt |d}t|j|_
t |d}|j|_
t |d}d|_
t |d }d!|_
t |d"}t |d#}t |d}d$|_
t |d%}d&|  |_
t |d'}|j|_
t |d(}t |d)}t |d
}|j|_
q<t j| dd*d+}td,d-}|| W 5 Q R X d S ).NeventsT)
showPublic)Zstart_time__gteF)external)internal_talk)internal_status_talkeventidtitledatesdateZ
date_startz%d.%m.%YZ
time_startz%H:%MZdate_end   )hoursZtime_endlocation - speakername fromdescriptionhostZserieZSERIE_TUD_NANOlanguageenurlsurlzMore informationsourcezhttps://nano.tu-dresden.de	maintopictopicstopiczUTF-8)Zpretty_printencodingz%/data/uploads/seminar/xml/pmn_dsc.xmlwb) r   ZElementr   r   r   r   nowZ
SubElementstrr&   textr'   	localtime
start_timestrftimer	   roombuilding	long_namer/   speaker_namespeaker_affiliationabstracthtmlunescapeorganisator_nameget_absolute_url	dsc_topicdsc_subtopictostringopenwrite)rootseminarZevent_elementZ
id_elementZtitle_elementr(   r)   Zlocal_start_timeZdate_start_elementZtime_start_elementZdate_end_elementend_timeZtime_end_elementZlocation_elementr.   rG   Zspeaker_fromr2   Zhost_elementZserie_elementZlanguage_elementr6   Zurl2Z	url2_nameZurl2_sourcer9   r:   r;   Ztopic_idZxml_strfiler   r   r   generate_xml_file_lxml#   sh    
8
rW   c                       s  e Zd Ze ZejddZejddddZej	ddddd	Z
ej	d
dddddZejddddddZejddddZejeddddddZejdddZejdddZejdddZejddddZej	dddddd Zejd!ddddd"Zejd#ddddd"Zejd$ddddd"Zejd%ddddd"Zejd&ddddd"Zejd'ddddd"Zejd(ddddd"Zejd)ddddd"Zejd*ddddd"Z ejd+ddddd"Z!ejd,ddddd"Z"ejd-ddddd"Z#ejd.ddddd"Z$ejd/ddddd"Z%ej&d0ddd1Z'ej(d2ddd1Z)ej(d3ddd1Z*ejd4dd5d6Z+ej(d7ddd1Z,ejd8dd9d6Z-ej.e/ej0ddd:Z1ejd;ddd<d=Z2ej	d>d?dddd@dAZ3ejdBddCdZ4dDZ5ej	dEddFe5dGdHZ6ej	dIddFe5dGdHZ7ej8dFddddJdKZ9ejedLdddMZ:ej;dNddOddPZ<ejedQdddMZ=ej	dRddSdTdUZ>ej	dVdddWdXdYZ?ejdZdd[d\dd]Z@d^d_ ZAd`da ZB fdbdcZCG ddde deZD  ZES )fr   i  
max_length  TrY   nullblankzSpeaker name   u   Prof. Max Müller)rY   r\   	help_textZAffiliationr0   rY   r_   r\   r]   zAffiliation urli,  z?Link to external speaker profile at institution/company webpage)rY   r\   r]   r_   Zseminar_chair_related_speakerNzchair related speakerzMPlease fill this field if the speaker is a member or an alumnus of our chair.)related_namedefaultr]   verbose_namer_   zAChair internal talk? (Will not shown in Dresden Science Calendar)F)rc   rb   zHChair internal status talk? (Will not shown in Dresden Science Calendar)zAlumnus/Alumna talk?zExternally organized talk?zJExternally organized seminar? (Will not shown in Dresden Science Calendar))rc   rb   r_   z Talk externally organized by ...zIf this seminar is organized by our chair, please leave this field blank. Else please continue the sentence "Talk externally organized by")rc   r\   r]   rY   r_   z	FIS (TUD))rY   rb   r\   r]   LinkedinXingORCIDResearchgatepublonszResearch.comzGoogle ScholarScopuszAd scientific indexGeprisGithubTwitter	Wikipediazuploads/members/img/	upload_tor\   r]   zuploads/seminar/announcementszuploads/seminar/slideszPublic access to slidesz$Offer the slides public for downloadrb   r_   zuploads/seminar/recordszPublic access to recordz$Offer the record public for download)	on_deleter\   r]   zVideo conference linkzOhttps://tu-dresden.zoom-x.de/j/99351537743?pwd=ck01MHE2MktNZ29NK1ZnR1VKb2ZXUT09)r]   r\   rb   z(Displayed name for video conference linkzZoom link of our ChairzqThis is the displayed name und webpage, where you will be redirected to video conference link if you click there.)rb   rY   r\   r]   r_   zShow on webpagezIf true show seminar on webpage))TOPIC_BIOLOGYrr   )TOPIC_PHYSICSrs   )TOPIC_MATHEMATICSrt   )TOPIC_COMPUTER_SCIENCEru   )TOPIC_CHEMISTRYrv   )TOPIC_MEDICINErw   )TOPIC_PSYCHOLOGYrx   )TOPIC_ELECENGANDINFTECHry   )TOPIC_MECHANICALENGINEERINGrz   )TOPIC_MATERIALSr{   )TOPIC_CIVILENGINEERINGr|   )TOPIC_TRANSPORTATIONANDTRAFFICr}   )TOPIC_FORESTGEOHYDROr~   )TOPIC_SOCIETYr   )"TOPIC_LINGUISTICSLITERATURECULTUREr   )	TOPIC_LAWr   )TOPIC_ECONOMICSr   )TOPIC_TRAININGr   )TOPIC_TRANSFERr   )TOPIC_OTHERr   z"Topic for Dresden Science Calendar2   z*will displayed in Dresden Science Calendar)r\   rY   choicesr_   z%Subtopic for Dresden Science CalendarzURL where seminar is shown)rY   r\   r]   uniquer_   Zseminar_suggested_byra   rb   r]   zSuggested onz%The date when you got the suggestion.)r\   r_   r]   Zseminar_invited_byzContact emailzseminar.nano@tu-dresden.dez+will displayed in ics file (calendar event))rY   rb   r_   zContact personzArezoo DianatzKwill displayed in ics-file (calendar event) and in Dresden Science Calendar)r\   rY   rb   r_   zInternal Notes  zDExample: Speaker wants to talk with theory group after presentation.)r\   rY   r_   r]   c                 C   s   t dd| jidS )z;Returns the url to access a detail record for this Seminar.zseminar-detailr   )kwargs)r   r   selfr   r   r   rM      s    zSeminar.get_absolute_urlc                 C   s   | j d | j S ))String for representing the Model object.z: )rG   r'   r   r   r   r   __str__   s    zSeminar.__str__c                    s  z| j }d|kr$|dd}|| _ d|kr>|dd}|| _ d|krX|dd}|| _ d|krr|dd}|| _ d|kr|dd}|| _ d|kr|dd}|| _ d|kr|dd}|| _ d	|kr|d	d}|| _ d
|kr|d
d}|| _ d|kr|dd}|| _ d|kr,|dd}|| _ | jj}| jj}tt|dkrZdt| }tt|dkrxdt| }| jd ks| jdkrt| j dd d | j }n.t| jj	d t| d t| d | j  }W n$   ddl
m} t|d}Y nX t|| _t j||S )Nz	Dr.-Ing. r0   zDr.-Ing.zDr. zDr.zProf. zProf.	ProfessorzMsc. zMsc.zhabil. zhabil.   0 _r   )	randranger   )rG   replacerB   daymonthlenr?   splitr'   yearrandomr   r   r   supersave)r   argsr   new_namer   r   argumentr   	__class__r   r   r      sb    

 2
zSeminar.savec                   @   s   e Zd ZdgZdS )zSeminar.MetarB   N)__name__
__module____qualname__orderingr   r   r   r   Meta  s   r   )Fr   r   r   r   DateTimeFieldrB   	TextFieldr'   rI   	CharFieldrG   rH   URLFieldZspeaker_urlZ
speaker_cvr   r
   Zchair_related_speakerBooleanFieldr#   r$   Zalumni_talkr"   Zexternal_organized_bytud_fislinkedinxingorcidresearchgateresearcher_idresearchgooglescholarscopusadscientificindexgeprisgithubtwitterwiki
ImageFieldimage	FileFieldannouncementslidesZslides_publicZrecorded_seminarZrecord_public
ForeignKeyr   SET_NULLrD   
video_confZvideo_conf_display_namer!   r   rN   rO   	SlugFieldr   Zsuggested_by	DateFieldZsuggestion_dateZ
invited_byZorganisator_emailrL   Znotes_internalrM   r   r   r   __classcell__r   r   r   r   r      sf   ?r   )senderc                 K   s
   t   d S )N)rW   )r   instancer   r   r   r   generate_xml_after_save  s    r   c                   @   s  e Zd ZejddddZejdddZeje	dddZ
ejd	d
dZejddddddZejddddddZejddddZejddddZejedddZejedddZejeddddZejeddddedZejdddddZdd Zd d! ZG d"d# d#ZdS )$Teaching_coursezName of coursed   T)rY   r\   zShow public?rp   r   rX   DescriptionrZ   zLink to module plani   r0   r`   zLink to OPALzuploads/img/rn   z%uploads/teaching_course/announcementsZ"teaching_course_responsible_personN)ra   rb   teachertutorr   Zteaching_course_semester)rb   r]   ra   r\   rq   zSchedule from old websiter^   r[   c                 C   s   | j S )r   )r/   r   r   r   r   r   3  s    zTeaching_course.__str__c                 C   s   t dt| jgdS )zCReturns the url to access a detail record for this teaching course.zteaching_course-detail)r   )r   r?   r&   r   r   r   r   rM   7  s    z Teaching_course.get_absolute_urlc                   @   s   e Zd ZdZdgZdS )zTeaching_course.MetazTeaching coursesz-semester__start_dateN)r   r   r   verbose_name_pluralr   r   r   r   r   r   ;  s   r   ) r   r   r   r   r   r/   r   show_publicr   r   Zstudyr   r2   r   Zmodule_plan_linkZmodule_ressourcesr   r   r   r   r
   responsible_personr   r   r   r   r   ZsemesterZoldDB_scheduler   rM   r   r   r   r   r   r   $  s    r   c                   @   s   e Zd ZejedejddZdddgZej	ddd	ed
dZ
ddddddgZej	ddded
dZejdddd
dZejdddd
dZejed
dZej	dddd
dd
dZdd  ZdS )!ScheduleNZschedule_teaching_course)rb   rq   ra   )Lecturer   )Exerciser   )	Practicumr   zKind of lessonr   r   T)rY   rb   r   r\   )Mondayr   )Tuesdayr   )	Wednesdayr   )Thursdayr   )Fridayr   )Saturdayr   z
Course dayr   z
Start timezformart: h:m:s (11:10:00)z11:10:00)r_   rb   r\   zEnd timezformart: h:m:s (12:40:00)z12:40:00)r]   zVideo conference toolze.g. Zoom, Jitsi)rY   rb   r\   r_   r]   c                 C   s&   t | jd t | j d t | j S )r   r-   )r?   r   	startTimeendTimer   r   r   r   r   J  s    zSchedule.__str__)r   r   r   r   r   r   CASCADEZteaching_courseZlesson_choicesr   Zlessonday_choicesr   	TimeFieldr   r   r   r   rD   r   r   r   r   r   r   r   ?  s   
r   )+	django.dbr   django.db.models.deletionr   django.db.models.fields.relatedr   django.urlsr   uuidhome.modelsr   r   r   r   r	   internal.modelsr
   django.template.defaultfiltersr   django.httpr   django.utilsr   Zlxmlr   rJ   Z	icalendarr   r   r   r   pytzZdjango.db.models.signalsr   django.dispatchr   r   rW   Modelr   r   r   r   r   r   r   r   <module>   s4   
b 

