Ajout système caldav
This commit is contained in:
@@ -27,7 +27,7 @@ DEBUG = True
|
|||||||
|
|
||||||
cfg_dev_mode = False
|
cfg_dev_mode = False
|
||||||
|
|
||||||
ALLOWED_HOSTS = ["192.168.3.125","rh.ambulance-clerc.ch"]
|
ALLOWED_HOSTS = ["rh.ambulance-clerc.ch"]
|
||||||
if cfg_dev_mode:
|
if cfg_dev_mode:
|
||||||
ALLOWED_HOSTS.append("127.0.0.1")
|
ALLOWED_HOSTS.append("127.0.0.1")
|
||||||
CSRF_TRUSTED_ORIGINS = ['https://rh.ambulance-clerc.ch']
|
CSRF_TRUSTED_ORIGINS = ['https://rh.ambulance-clerc.ch']
|
||||||
@@ -44,6 +44,7 @@ INSTALLED_APPS = [
|
|||||||
'polls.apps.PollsConfig',
|
'polls.apps.PollsConfig',
|
||||||
'vehicles.apps.VehiclesConfig',
|
'vehicles.apps.VehiclesConfig',
|
||||||
'collabs.apps.CollabsConfig',
|
'collabs.apps.CollabsConfig',
|
||||||
|
'caldav.apps.CaldavConfig',
|
||||||
'custom_admin.apps.CustomAdminConfig',
|
'custom_admin.apps.CustomAdminConfig',
|
||||||
'rangefilter',
|
'rangefilter',
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
@@ -92,6 +93,15 @@ if cfg_dev_mode:
|
|||||||
'NAME': BASE_DIR / 'db.sqlite3',
|
'NAME': BASE_DIR / 'db.sqlite3',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
'''
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.mysql',
|
||||||
|
'OPTIONS': {
|
||||||
|
'read_default_file': 'my_dev.cnf',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}'''
|
||||||
else:
|
else:
|
||||||
DATABASES = {
|
DATABASES = {
|
||||||
'default': {
|
'default': {
|
||||||
|
@@ -19,5 +19,6 @@ from django.urls import path, include
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
path('collabs/', include('collabs.urls')),
|
path('collabs/', include('collabs.urls')),
|
||||||
|
path('caldav/', include('caldav.urls')),
|
||||||
#path('collabs_hour/', include('collabs.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