Ajout système caldav

This commit is contained in:
Ambulance Clerc
2022-06-19 23:47:09 +02:00
parent 501468b6dd
commit 1d173ffe7c
11 changed files with 143 additions and 1 deletions

View File

@@ -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': {

View File

@@ -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
View File

3
caldav/admin.py Normal file
View File

@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

6
caldav/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class CaldavConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'caldav'

View File

78
caldav/models.py Normal file
View 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")

View 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
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

12
caldav/urls.py Normal file
View 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
View 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))