Ajout système caldav
This commit is contained in:
@@ -27,7 +27,7 @@ DEBUG = True
|
||||
|
||||
cfg_dev_mode = False
|
||||
|
||||
ALLOWED_HOSTS = ["192.168.3.125","rh.ambulance-clerc.ch"]
|
||||
ALLOWED_HOSTS = ["rh.ambulance-clerc.ch"]
|
||||
if cfg_dev_mode:
|
||||
ALLOWED_HOSTS.append("127.0.0.1")
|
||||
CSRF_TRUSTED_ORIGINS = ['https://rh.ambulance-clerc.ch']
|
||||
@@ -44,6 +44,7 @@ INSTALLED_APPS = [
|
||||
'polls.apps.PollsConfig',
|
||||
'vehicles.apps.VehiclesConfig',
|
||||
'collabs.apps.CollabsConfig',
|
||||
'caldav.apps.CaldavConfig',
|
||||
'custom_admin.apps.CustomAdminConfig',
|
||||
'rangefilter',
|
||||
'django.contrib.admin',
|
||||
@@ -92,6 +93,15 @@ if cfg_dev_mode:
|
||||
'NAME': BASE_DIR / 'db.sqlite3',
|
||||
}
|
||||
}
|
||||
'''
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.mysql',
|
||||
'OPTIONS': {
|
||||
'read_default_file': 'my_dev.cnf',
|
||||
},
|
||||
}
|
||||
}'''
|
||||
else:
|
||||
DATABASES = {
|
||||
'default': {
|
||||
|
@@ -19,5 +19,6 @@ from django.urls import path, include
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('collabs/', include('collabs.urls')),
|
||||
path('caldav/', include('caldav.urls')),
|
||||
#path('collabs_hour/', include('collabs.urls')),
|
||||
]
|
||||
|
0
caldav/__init__.py
Normal file
0
caldav/__init__.py
Normal file
3
caldav/admin.py
Normal file
3
caldav/admin.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
6
caldav/apps.py
Normal file
6
caldav/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class CaldavConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'caldav'
|
0
caldav/migrations/__init__.py
Normal file
0
caldav/migrations/__init__.py
Normal file
78
caldav/models.py
Normal file
78
caldav/models.py
Normal file
@@ -0,0 +1,78 @@
|
||||
from datetime import datetime, timedelta, time
|
||||
import datetime as Datetime
|
||||
|
||||
from django.db import models
|
||||
import urllib.request
|
||||
import ssl
|
||||
|
||||
from icalendar import Calendar, Event
|
||||
import recurring_ical_events
|
||||
|
||||
# Create your models here.
|
||||
class cls_caldav():
|
||||
url = ""
|
||||
data = None
|
||||
items = []
|
||||
day = []
|
||||
night = []
|
||||
|
||||
def __init__(self, url=""):
|
||||
self.url = url
|
||||
|
||||
def clear_data(self):
|
||||
self.data = None
|
||||
self.items = []
|
||||
self.day = []
|
||||
self.night = []
|
||||
|
||||
def get_caldav_data(self):
|
||||
ctx = ssl.create_default_context()
|
||||
ctx.check_hostname = False
|
||||
ctx.verify_mode = ssl.CERT_NONE
|
||||
|
||||
self.clear_data()
|
||||
|
||||
o_url = urllib.request.urlopen(self.url, context=ctx)
|
||||
self.data = o_url.read()
|
||||
o_url.close()
|
||||
|
||||
now = f"{datetime.now().day}.{datetime.now().month}.{datetime.now().year}"
|
||||
tomorow = datetime.now() + timedelta(days=1)
|
||||
today = datetime.today()
|
||||
|
||||
|
||||
|
||||
for event in recurring_ical_events.of(Calendar.from_ical(self.data)).at(today):
|
||||
print(event)
|
||||
item = _caldav_item()
|
||||
item.name = event["SUMMARY"]
|
||||
item.desc = event["DESCRIPTION"]
|
||||
item.dtstart = event["DTSTART"].dt.strftime("%d.%m.%Y %H:%M")
|
||||
item.dtend = event["DTEND"].dt.strftime("%d.%m.%Y %H:%M")
|
||||
self.items.append(item)
|
||||
|
||||
start = event["DTSTART"].dt
|
||||
if isinstance(start, Datetime.date):
|
||||
start = datetime.combine(start, datetime.min.time())
|
||||
if start < datetime.combine(datetime.today(), time(19,0)):
|
||||
self.day.append(item)
|
||||
if start >= datetime.combine(datetime.today(), time(19,0)):
|
||||
self.night.append(item)
|
||||
print(self.day)
|
||||
print(self.night)
|
||||
|
||||
return self.data
|
||||
|
||||
class _caldav_item():
|
||||
name = ""
|
||||
desc = ""
|
||||
dtstart = None
|
||||
dtend = None
|
||||
dtstamp = None
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
o_caldav = cls_caldav(url="https://sync.infomaniak.com/calendars/AA01593/a4835de4-b3cd-46ca-8f48-3dacd3a2b46e?export")
|
||||
|
15
caldav/templates/task/task.html
Normal file
15
caldav/templates/task/task.html
Normal file
@@ -0,0 +1,15 @@
|
||||
{% if latest_task_list %}
|
||||
<ul>
|
||||
{% for task in latest_task_list %}
|
||||
<li><a "">{{ task.name }} {{task.dtstart}}-{{task.dtend}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
------------------------------------------------------
|
||||
<ul>
|
||||
{% for task in night_task_list %}
|
||||
<li><a "">{{ task.name }} {{task.dtstart}}-{{task.dtend}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p>No task are available.</p>
|
||||
{% endif %}
|
3
caldav/tests.py
Normal file
3
caldav/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
12
caldav/urls.py
Normal file
12
caldav/urls.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from django.urls import path
|
||||
|
||||
|
||||
|
||||
from . import views
|
||||
|
||||
app_name = "caldav"
|
||||
urlpatterns = [
|
||||
path('task', views.view_task_caldav, name='view_task_caldav'),
|
||||
|
||||
]
|
||||
|
14
caldav/views.py
Normal file
14
caldav/views.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import render
|
||||
from django.views import generic
|
||||
from django.template import loader
|
||||
|
||||
# Create your views here.
|
||||
|
||||
from caldav.models import *
|
||||
|
||||
def view_task_caldav(request):
|
||||
o_caldav.get_caldav_data()
|
||||
template = loader.get_template("task/task.html")
|
||||
context = {'latest_task_list':o_caldav.day, 'night_task_list': o_caldav.night}
|
||||
return HttpResponse(template.render(context,request))
|
Reference in New Issue
Block a user