change db

This commit is contained in:
2022-07-29 17:53:29 +02:00
41 changed files with 430 additions and 73 deletions

2
.gitignore vendored
View File

@@ -363,3 +363,5 @@ MigrationBackup/
FodyWeavers.xsd
/venv/
db.sqlite3

View File

@@ -1,8 +1,6 @@
# Generated by Django 4.0 on 2022-03-06 19:55
# Generated by Django 4.0 on 2022-01-31 15:05
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
@@ -10,7 +8,6 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
]
operations = [
@@ -18,21 +15,14 @@ class Migration(migrations.Migration):
name='Collabs_hour',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('userName', models.CharField(max_length=100, verbose_name='Auteur')),
('nHour', models.PositiveIntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(23)], verbose_name='Heures')),
('nMinutes', models.PositiveIntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(60)], verbose_name='Minutes')),
('sRemarques', models.TextField(blank=True, verbose_name='Remarques')),
('bNoticed', models.BooleanField(blank=True, default=False, verbose_name='Vérifiée')),
('dtDate', models.DateField(verbose_name='Date')),
('sBases', models.CharField(choices=[('1', 'Monthey'), ('2', 'Uvrier')], default=1, max_length=1, verbose_name='Employé de la base de')),
('userName', models.CharField(max_length=100, verbose_name="Nom d'utilisateur")),
('collab', models.CharField(max_length=10, verbose_name='Collaborateur')),
('nHour', models.IntegerField(default=0, verbose_name='Heure')),
('nMinutes', models.IntegerField(default=0, verbose_name='Minutes')),
('sRemarques', models.TextField(verbose_name='Remarques')),
('bNoticed', models.BooleanField(default=0, verbose_name='Pris en compte')),
('dtUpdate', models.DateTimeField(auto_now=True, verbose_name='Date de modification')),
('dtCreated', models.DateTimeField(auto_now_add=True, verbose_name='Date de création')),
('user', models.ForeignKey(default=0, on_delete=django.db.models.deletion.DO_NOTHING, to='auth.user', verbose_name='Collaborateur')),
('dtCreated', models.DateTimeField(auto_now_add=True)),
],
options={
'verbose_name': 'heure suplémentaire',
'verbose_name_plural': 'heures suplémentaires',
'permissions': (('can_notice', 'Peut noter comme traitée'),),
},
),
]

View File

@@ -1,28 +0,0 @@
# Generated by Django 4.0 on 2022-01-31 15:05
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Collabs_hour',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('userName', models.CharField(max_length=100, verbose_name="Nom d'utilisateur")),
('collab', models.CharField(max_length=10, verbose_name='Collaborateur')),
('nHour', models.IntegerField(default=0, verbose_name='Heure')),
('nMinutes', models.IntegerField(default=0, verbose_name='Minutes')),
('sRemarques', models.TextField(verbose_name='Remarques')),
('bNoticed', models.BooleanField(default=0, verbose_name='Pris en compte')),
('dtUpdate', models.DateTimeField(auto_now=True, verbose_name='Date de modification')),
('dtCreated', models.DateTimeField(auto_now_add=True)),
],
),
]

View File

@@ -0,0 +1,38 @@
# Generated by Django 4.0 on 2022-03-06 19:55
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
]
operations = [
migrations.CreateModel(
name='Collabs_hour',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('userName', models.CharField(max_length=100, verbose_name='Auteur')),
('nHour', models.PositiveIntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(23)], verbose_name='Heures')),
('nMinutes', models.PositiveIntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(60)], verbose_name='Minutes')),
('sRemarques', models.TextField(blank=True, verbose_name='Remarques')),
('bNoticed', models.BooleanField(blank=True, default=False, verbose_name='Vérifiée')),
('dtDate', models.DateField(verbose_name='Date')),
('sBases', models.CharField(choices=[('1', 'Monthey'), ('2', 'Uvrier')], default=1, max_length=1, verbose_name='Employé de la base de')),
('dtUpdate', models.DateTimeField(auto_now=True, verbose_name='Date de modification')),
('dtCreated', models.DateTimeField(auto_now_add=True, verbose_name='Date de création')),
('user', models.ForeignKey(default=0, on_delete=django.db.models.deletion.DO_NOTHING, to='auth.user', verbose_name='Collaborateur')),
],
options={
'verbose_name': 'heure suplémentaire',
'verbose_name_plural': 'heures suplémentaires',
'permissions': (('can_notice', 'Peut noter comme traitée'),),
},
),
]

Binary file not shown.

View File

@@ -1,5 +1,10 @@
from datetime import datetime, timedelta, time
import datetime as Datetime
import pickle
import os
from dateutil.relativedelta import relativedelta
from django.db import models
import urllib.request
@@ -30,7 +35,7 @@ class cls_caldav():
def sort_array(self):
self.items.sort(key=lambda x: x.dtstamp, reverse=False)
def get_caldav_data(self,periode=1):
def get_caldav_data(self,periode=1,calendar=None):
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
@@ -96,8 +101,13 @@ class cls_caldav():
class cls_caldav_client():
caldav_url = "https://sync.infomaniak.com"
caldav_user = 'SC01066'
caldav_password = "mc144*1870CLERC"
#caldav_user = 'SC01066' #ambulanciers@ambulance-clerc.ch
#caldav_password = "mc144*1870CLERC"
caldav_user = 'AA01593' #agenda@ambulance-clerc.ch
caldav_password = "Agendamc144"
caldav_agenda_config_url = "https://sync.infomaniak.com/calendars/AA01593/29d5c8d0-9b86-4d45-bc2b-13585a2e78f8?export"
@@ -105,11 +115,35 @@ class cls_caldav_client():
self.client = caldav.DAVClient(url=self.caldav_url, username=self.caldav_user, password=self.caldav_password)
self.data = self.client.principal()
self.m38 = self.data.calendar(name="M38")
self.m37 = self.data.calendar(name="M37")
self.clear_all_events_by_Date(self.m38)
self.add_event_in_calandar(self.m38)
self.add_event_in_calandar(self.m37)
for cal in self.data.calendars():
print(f"name: {cal.name}({cal.url})")
self.a_task = self.data.calendar(name="Tâche")
if datetime.today().day == 29:
try:
with open(os.path.join("mycaldav", "last_sync_config.bin"), "rb") as file:
array = pickle.load(file)
except:
array = {"year": 0, "month": 0}
print("Erreur lecture fichier débiteur")
if array["month"] == datetime.now().month:
if array["year"] == datetime.now().year:
print("pas de copy, sync déjà fait")
else:
self.get_caldav_data(self.a_task)
else:
self.get_caldav_data(self.a_task)
self.clear_all_events_by_Date(self.a_task)
def add_event_in_calandar(self, calandar):
@@ -117,9 +151,53 @@ class cls_caldav_client():
dtstart=datetime(2022, 6, 30, 12),
dtend=datetime(2022, 6, 30, 13),
summary="Do the needful",
)
def get_caldav_data(self, calandar=None):
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
o_url = urllib.request.urlopen(self.caldav_agenda_config_url, context=ctx)
data = o_url.read()
o_url.close()
now = f"01.{datetime.now().month}.{datetime.now().year}"
next_month = datetime.strptime(f"1.{datetime.today().month}.{datetime.today().year}","%d.%m.%Y") + relativedelta(months=1) - relativedelta(days=1)
next_month = (next_month.year, next_month.month, next_month.day)
today = (datetime.now().year, datetime.now().month, 1)
print(f"today:{today}")
print(f"next:{next_month}")
events = None
events = recurring_ical_events.of(Calendar.from_ical(data)).between(today, next_month)
cur_events = calandar.date_search(start=datetime(today[0],today[1],today[2]), end=datetime(next_month[0],next_month[1],next_month[2]), expand=True)
for event in events:
print(f"copy de l'événement: {event['SUMMARY']}")
my_event = calandar.save_event(
dtstart=event["DTSTART"].dt,
dtend=event["DTEND"].dt,
summary= event["SUMMARY"],
description=event["DESCRIPTION"],
)
with open(os.path.join("mycaldav", "last_sync_config.bin"), "wb") as file:
array = {"year":datetime.now().year, "month":datetime.now().month}
pickle.dump(array, file)
def clear_all_events_by_Date(self, calandar):
events = calandar.date_search(start=datetime(2022, 6, 30), end=datetime(2022, 7, 1), expand=True)
events = calandar.date_search(start=datetime(2000, 1, 1), end=datetime.now() - relativedelta(years=1), expand=True)
for e in events:
e.delete()
print(events)

View File

@@ -2,7 +2,7 @@
<table style="font-family: 'Source Sans Pro', sans-serif; font-size: 12pt;">
<td style="font-weight: bold;padding-bottom: 5px; text-align: center;" colspan="2">Jour</td>
{% for task in latest_task_list %}
<tr><td style="font-weight: bold;vertical-align: top;" width="75" >{{task.key}}</td>&nbsp;&nbsp;&nbsp;&nbsp;<td style="{% if task.done %}text-decoration:line-through{% endif %}">{{ task.name }}<br>{{task.desc}}</td></tr>
<tr><td style="font-weight: bold;vertical-align: top;" width="75" >{{task.key}}</td>&nbsp;&nbsp;&nbsp;&nbsp;<td style="{% if task.done %}text-decoration:line-through{% endif %}">{{ task.name }}<br>{{task.desc}}{{task.dtstart}}</td></tr>
{% endfor %}
<tr><td>&nbsp;</td></tr>
<tr>

View File

@@ -16,6 +16,7 @@ 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}
myClient = cls_caldav_client()
return HttpResponse(template.render(context,request))
@xframe_options_exempt
@@ -55,4 +56,5 @@ def view_dayly_caldav(request):
myClient = cls_caldav_client()
return HttpResponse(ret)

View File

@@ -1,7 +1,7 @@
from django.contrib import admin
from polls.models import Question, Choice
from vehicles.models import *
class ChoiceInline(admin.TabularInline):
@@ -19,4 +19,4 @@ class QuestionAdmin(admin.ModelAdmin):
admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)
admin.site.register(Vehicles)

View File

@@ -1,3 +1,41 @@
from django.contrib import admin
# Register your models here.
from vehicles.models import *
class _vhc_admin(admin.ModelAdmin):
list_display = ('sName', 'nBases', 'nStatus')
search_fields = ['sName']
#fields = ["sBases", "dtDate",'type', "user","nHour", "nMinutes", "sRemarques"]
class _vhc_infos_admin(admin.ModelAdmin):
#list_display = ('Vehicle', 'nType', 'sTitle','sDesc')
search_fields = ['sName']
#fields = ["Vehicle", "nType",'sTitle', "sDesc","dtStart", "dtEnd", "Author"]
fieldsets = (
('Informations liées au véhicule', {
'fields': ('Vehicle',)
}),
('Information sur le message', {
'fields': ('nType','sTitle','sDesc')
}),
('Information supplémentaires et validité', {
'fields': ("dtStart","dtEnd", 'Author')
}),
)
admin.site.register(vehicles_infos, _vhc_infos_admin)
admin.site.register(vehicles, _vhc_admin)

View File

@@ -4,3 +4,4 @@ from django.apps import AppConfig
class VehiclesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'vehicles'
verbose_name = "Clerc véhicule"

View File

@@ -0,0 +1,28 @@
# Generated by Django 4.0 on 2022-07-04 10:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('vehicles', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='vehicles',
name='nBases',
field=models.CharField(choices=[('1', 'Monthey'), ('2', 'Uvrier')], default=1, max_length=1, verbose_name='Basé à '),
),
migrations.AddField(
model_name='vehicles',
name='nStatus',
field=models.CharField(choices=[('1', 'Opérationnel'), ('2', 'Hors Service'), ('3', 'Réserve'), ('4', 'Utilisation altérée')], default=1, max_length=1, verbose_name='Statut'),
),
migrations.AddField(
model_name='vhc_problems',
name='nType',
field=models.CharField(choices=[('1', 'Technique'), ('2', 'Matériel'), ('3', 'Opérationnel')], default=1, max_length=1, verbose_name='Type'),
),
]

View File

@@ -0,0 +1,22 @@
# Generated by Django 4.0 on 2022-07-04 10:51
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('vehicles', '0002_vehicles_nbases_vehicles_nstatus_vhc_problems_ntype'),
]
operations = [
migrations.RemoveField(
model_name='vehicles',
name='bEnabled',
),
migrations.AlterField(
model_name='vehicles',
name='sName',
field=models.CharField(max_length=250, verbose_name='Indicatif'),
),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 4.0 on 2022-07-04 10:58
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('vehicles', '0003_remove_vehicles_benabled_alter_vehicles_sname'),
]
operations = [
migrations.AlterModelOptions(
name='vehicles',
options={'verbose_name': 'véhicule', 'verbose_name_plural': 'véhicules'},
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.0 on 2022-07-04 13:11
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
('vehicles', '0004_alter_vehicles_options'),
]
operations = [
migrations.RenameModel(
old_name='Vhc_problems',
new_name='Vhc_infos',
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.0 on 2022-07-04 16:13
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
('vehicles', '0005_rename_vhc_problems_vhc_infos'),
]
operations = [
migrations.RenameModel(
old_name='Vhc_infos',
new_name='Vehicles_infos',
),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 4.0 on 2022-07-04 18:19
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('vehicles', '0006_rename_vhc_infos_vehicles_infos'),
]
operations = [
migrations.AlterModelOptions(
name='vehicles_infos',
options={'verbose_name': 'véhicule info', 'verbose_name_plural': 'véhicule infos'},
),
]

View File

@@ -0,0 +1,65 @@
# Generated by Django 4.0 on 2022-07-04 18:59
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
('vehicles', '0007_alter_vehicles_infos_options'),
]
operations = [
migrations.AlterField(
model_name='vehicles_infos',
name='Author',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='auth.user', verbose_name='Auteur'),
),
migrations.AlterField(
model_name='vehicles_infos',
name='Vehicle',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vehicles.vehicles', verbose_name='Véhicule'),
),
migrations.AlterField(
model_name='vehicles_infos',
name='bEnabled',
field=models.BooleanField(default=1, verbose_name='Actif'),
),
migrations.AlterField(
model_name='vehicles_infos',
name='dtCreated',
field=models.DateTimeField(auto_now_add=True, verbose_name='date published'),
),
migrations.AlterField(
model_name='vehicles_infos',
name='dtEnd',
field=models.DateField(blank=True, verbose_name='Date de fin'),
),
migrations.AlterField(
model_name='vehicles_infos',
name='dtStart',
field=models.DateField(verbose_name='Date de début'),
),
migrations.AlterField(
model_name='vehicles_infos',
name='dtUpdated',
field=models.DateTimeField(auto_now=True, verbose_name='date updated'),
),
migrations.AlterField(
model_name='vehicles_infos',
name='sAuthor',
field=models.CharField(max_length=120, verbose_name='auteur string'),
),
migrations.AlterField(
model_name='vehicles_infos',
name='sDesc',
field=models.TextField(verbose_name='Description'),
),
migrations.AlterField(
model_name='vehicles_infos',
name='sTitle',
field=models.CharField(max_length=250, verbose_name='Titre'),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.0 on 2022-07-04 19:02
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('vehicles', '0008_alter_vehicles_infos_author_and_more'),
]
operations = [
migrations.AlterField(
model_name='vehicles_infos',
name='dtEnd',
field=models.DateField(blank=True, null=True, verbose_name='Date de fin'),
),
]

View File

@@ -4,20 +4,53 @@ from django.db import models
from django.conf import settings
from django.utils import timezone
BASES_CHOICES = [
('1', 'Monthey'),
('2', 'Uvrier'),
]
STATUS_CHOICES = [
('1', 'Opérationnel'),
('2', 'Hors Service'),
('3', 'Réserve'),
('4', 'Utilisation altérée'),
]
TYPES_CHOICES = [
('1', 'Technique'),
('2', 'Matériel'),
('3', 'Opérationnel'),
]
class Vehicles(models.Model):
sName = models.CharField (max_length=250)
bEnabled = models.BooleanField( default=0 )
class Vhc_problems(models.Model):
Vehicle = models.ForeignKey( Vehicles, on_delete=models.CASCADE)
sTitle = models.CharField( max_length=250)
sDesc = models.TextField()
bEnabled = models.BooleanField( default=1)
dtStart = models.DateTimeField()
dtEnd = models.DateTimeField()
sAuthor = models.CharField( max_length=120)
Author = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING )
dtUpdated = models.DateTimeField('date updated')
dtCreated = models.DateTimeField('date published')
class vehicles(models.Model):
sName = models.CharField("Indicatif", max_length=250)
nBases = models.CharField('Basé à ', max_length=1, choices=BASES_CHOICES, default=1)
nStatus = models.CharField('Statut', max_length=1, choices=STATUS_CHOICES, default=1)
def __str__(self):
return self.sName
class Meta:
verbose_name = "véhicule"
verbose_name_plural = "véhicules"
class vehicles_infos(models.Model):
Vehicle = models.ForeignKey(vehicles, on_delete=models.CASCADE, verbose_name="Véhicule")
nType = models.CharField('Type', max_length=1, choices=TYPES_CHOICES, default=1)
sTitle = models.CharField("Titre",max_length=250)
sDesc = models.TextField("Description")
bEnabled = models.BooleanField("Actif",default=1)
dtStart = models.DateField("Date de début")
dtEnd = models.DateField("Date de fin", blank=True, null=True)
sAuthor = models.CharField("auteur string",max_length=120)
Author = models.ForeignKey(settings.AUTH_USER_MODEL,verbose_name="Auteur", on_delete=models.DO_NOTHING)
dtUpdated = models.DateTimeField('date updated', auto_now=True)
dtCreated = models.DateTimeField('date published', auto_now_add=True)
def __str__(self):
return self.sTitle
class Meta:
verbose_name = "véhicule info"
verbose_name_plural = "véhicule infos"