Compare commits
109 Commits
carnet_rou
...
v0.5
Author | SHA1 | Date | |
---|---|---|---|
|
10341408f7 | ||
|
0902605a8d | ||
|
cbe365ccd1 | ||
|
5834c6aed1 | ||
|
e162afbd24 | ||
|
47fbbd207d | ||
|
1d72a244ea | ||
|
a4b5c7964a | ||
|
9f9ca417c5 | ||
|
d863de4785 | ||
|
ca15da794a | ||
|
e474cd70b4 | ||
|
8cb1bdfd1a | ||
|
17e2abbb55 | ||
|
9c0203e32d | ||
|
e9d1b20a14 | ||
|
76703be622 | ||
|
89547a8a14 | ||
|
29653e21c2 | ||
|
a4f2488732 | ||
|
c4b7fcd629 | ||
|
cd61e7564a | ||
|
1e677323de | ||
|
53205744a7 | ||
|
fd6d45b480 | ||
|
2e0abf758d | ||
|
508d989dd2 | ||
0c44bccef6 | |||
fd814d0908 | |||
b4441029bd | |||
|
3e80787a8f | ||
|
e06b299c64 | ||
|
b34b0bde25 | ||
|
e099b9e8da | ||
|
cea1bac6a9 | ||
|
577ad4d125 | ||
838795647b | |||
993ad598be | |||
5409166509 | |||
bcd74b2675 | |||
1cddd8b523 | |||
e3b6195fad | |||
ca18b36c15 | |||
9ba6426987 | |||
d21e9a327f | |||
bdf972504e | |||
5ba65a1b58 | |||
f9101b0bf8 | |||
30201c4d1a | |||
|
0cbb72dfa2 | ||
3f5e95086a | |||
4603317a20 | |||
df2cd4cfa3 | |||
|
a4b8f41851 | ||
|
bef530d449 | ||
|
e9e3d2dacb | ||
|
7ea0ab4bf2 | ||
|
c0178ead8c | ||
|
0112dd1ace | ||
|
27082a8ee1 | ||
|
6906b92cc0 | ||
|
45a1d4ec2e | ||
|
16fe976927 | ||
|
6530560bd7 | ||
|
3e35a73de7 | ||
|
1bc1e4f41d | ||
|
f9da763fa3 | ||
|
699fdf4e8c | ||
|
e329fa9850 | ||
|
3965aa0c17 | ||
|
0cd04b32e2 | ||
|
1d4d97bb0e | ||
|
c33732b7d3 | ||
e850cbd8d1 | |||
47c9d066d1 | |||
2f518b9d67 | |||
fed627ee3f | |||
5f6f6056c1 | |||
|
78606a678c | ||
|
c9542ad58d | ||
|
b037bd53bf | ||
|
5e7b0069dd | ||
|
ff9fa3e86b | ||
|
120abfdcb1 | ||
|
076ee9e67a | ||
|
1e46fea965 | ||
|
3d3efeeac7 | ||
|
71c3b85357 | ||
|
a14e344244 | ||
|
f51db5ae8e | ||
|
c8d1b5caad | ||
|
113e7befbf | ||
|
57272454f5 | ||
|
6e3a67a1d8 | ||
|
8617574632 | ||
|
91c84fc43b | ||
|
fb561a3dd0 | ||
|
883511f7b4 | ||
|
49517a6d92 | ||
|
690452a9db | ||
|
fdbb52c96f | ||
|
fb6f579089 | ||
|
085baa830e | ||
|
e98f0058d5 | ||
|
9ddd81b2b7 | ||
|
dd81ea367d | ||
|
f285b8a446 | ||
|
66d830d2e2 | ||
|
1184789a31 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -361,7 +361,10 @@ MigrationBackup/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
/venv/
|
||||
./venv
|
||||
.venv-main*
|
||||
*migrations/
|
||||
|
||||
|
||||
Reskreen/server_config.py
|
||||
./db.sqlite3
|
||||
|
3
.idea/Reskreen.iml
generated
3
.idea/Reskreen.iml
generated
@@ -3,6 +3,9 @@
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/collabs/migrations" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/Reskreen/.vs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vehicles/migrations" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.10" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
|
@@ -1,4 +1,4 @@
|
||||
"""
|
||||
"""
|
||||
Django settings for Reskreen project.
|
||||
|
||||
Generated by 'django-admin startproject' using Django 4.0.
|
||||
@@ -12,7 +12,7 @@ https://docs.djangoproject.com/en/4.0/ref/settings/
|
||||
|
||||
from pathlib import Path
|
||||
import os
|
||||
from Reskreen.server_config import *
|
||||
from .server_config import *
|
||||
|
||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
@@ -21,11 +21,10 @@ BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = 'django-insecure-j4jd&+4j^t_=@zr(#q@n!8e*58vkql6&_6w-t14ju8pw%ei%^s'
|
||||
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
DEBUG = cfg_dev_mode
|
||||
|
||||
|
||||
ALLOWED_HOSTS = ["rh.ambulance-clerc.ch"]
|
||||
@@ -35,7 +34,7 @@ CSRF_TRUSTED_ORIGINS = ['https://rh.ambulance-clerc.ch']
|
||||
|
||||
|
||||
# Application definition
|
||||
|
||||
LOGIN_REDIRECT_URL = '/admin'
|
||||
INSTALLED_APPS = [
|
||||
'jazzmin',
|
||||
'django.contrib.auth',
|
||||
@@ -47,16 +46,19 @@ INSTALLED_APPS = [
|
||||
'vehicles.apps.VehiclesConfig',
|
||||
'collabs.apps.CollabsConfig',
|
||||
'mycaldav.apps.CaldavConfig',
|
||||
'studenteval.apps.StudentevalConfig',
|
||||
'custom_admin.apps.CustomAdminConfig',
|
||||
'rangefilter',
|
||||
'django.contrib.admin',
|
||||
'carnet_rouge.apps.CarnetRougeConfig',
|
||||
#'nextcloud.apps.NextcloudConfig',
|
||||
'django_quill',
|
||||
'django_summernote',
|
||||
|
||||
]
|
||||
|
||||
LANGUAGE_CODE = 'fr-CH'
|
||||
|
||||
if not cfg_dev_mode:
|
||||
INSTALLED_APPS.append('nextcloud.apps.NextcloudConfig')
|
||||
|
||||
|
||||
MEDIA_URL = '/media/'
|
||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
|
||||
@@ -102,6 +104,7 @@ DATA_UPLOAD_MAX_NUMBER_FIELDS = 2500
|
||||
|
||||
MIDDLEWARE = [
|
||||
'django.middleware.security.SecurityMiddleware',
|
||||
'whitenoise.middleware.WhiteNoiseMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
@@ -109,6 +112,8 @@ MIDDLEWARE = [
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
'django_autologin.middleware.AutomaticLoginMiddleware',
|
||||
'language.DefaultLanguageMiddleware',
|
||||
'django.middleware.locale.LocaleMiddleware',
|
||||
]
|
||||
|
||||
ROOT_URLCONF = 'Reskreen.urls'
|
||||
@@ -191,16 +196,28 @@ LANGUAGE_CODE = 'fr-CH'
|
||||
TIME_ZONE = 'Europe/Zurich'
|
||||
|
||||
USE_I18N = True
|
||||
USE_L10N = True
|
||||
|
||||
USE_TZ = False
|
||||
|
||||
DATE_FORMAT = "d.m.Y"
|
||||
USE_L10N = False
|
||||
gettext = lambda x: x
|
||||
LANGUAGES = (
|
||||
('fr', gettext('French')),
|
||||
('en', gettext('English')),
|
||||
)
|
||||
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/4.0/howto/static-files/
|
||||
|
||||
STATIC_URL = 'static/'
|
||||
STATIC_URL = '/static/'
|
||||
|
||||
STATICFILES_DIRS = [
|
||||
os.path.join(BASE_DIR, "static"),
|
||||
]
|
||||
STATIC_ROOT = "/var/www/reskreen/static"
|
||||
|
||||
|
||||
# Default primary key field type
|
||||
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
|
||||
@@ -218,7 +235,7 @@ JAZZMIN_SETTINGS = {
|
||||
"site_brand": "ClercNet",
|
||||
|
||||
# Logo to use for your site, must be present in static files, used for brand on top left
|
||||
"site_logo": "img/logo.png",
|
||||
"site_logo": "img/logo_clerc_200.png",
|
||||
|
||||
# CSS classes that are applied to the logo above
|
||||
"site_logo_classes": "img-circle",
|
||||
@@ -227,7 +244,7 @@ JAZZMIN_SETTINGS = {
|
||||
"site_icon": None,
|
||||
|
||||
# Welcome text on the login screen
|
||||
"welcome_sign": "Welcome to the ClercNet admin",
|
||||
"welcome_sign": "Bienvenue sur le ClercNet",
|
||||
|
||||
# Copyright on the footer
|
||||
"copyright": "Ambulance Clerc & Resk-U",
|
||||
@@ -276,7 +293,7 @@ JAZZMIN_SETTINGS = {
|
||||
"show_sidebar": True,
|
||||
|
||||
# Whether to aut expand the menu
|
||||
"navigation_expanded": True,
|
||||
"navigation_expanded": False,
|
||||
|
||||
# Hide these apps when generating side menu e.g (auth)
|
||||
"hide_apps": [],
|
||||
@@ -318,7 +335,7 @@ JAZZMIN_SETTINGS = {
|
||||
# UI Tweaks #
|
||||
#############
|
||||
# Relative paths to custom CSS/JS scripts (must be present in static files)
|
||||
"custom_css": None,
|
||||
"custom_css": "css/global.css",
|
||||
"custom_js": None,
|
||||
# Whether to show the UI customizer on the sidebar
|
||||
"show_ui_builder": True,
|
||||
@@ -339,6 +356,44 @@ JAZZMIN_SETTINGS = {
|
||||
"language_chooser": False,
|
||||
}
|
||||
|
||||
JAZZMIN_UI_TWEAKS = {
|
||||
"navbar_small_text": True,
|
||||
"footer_small_text": False,
|
||||
"body_small_text": False,
|
||||
"brand_small_text": False,
|
||||
"brand_colour": False,
|
||||
"accent": "accent-teal",
|
||||
"navbar": "navbar-dark",
|
||||
"no_navbar_border": False,
|
||||
"navbar_fixed": True,
|
||||
"layout_boxed": False,
|
||||
"footer_fixed": False,
|
||||
"sidebar_fixed": False,
|
||||
"sidebar": "sidebar-dark-info",
|
||||
"sidebar_nav_small_text": False,
|
||||
"sidebar_disable_expand": False,
|
||||
"sidebar_nav_child_indent": True,
|
||||
"sidebar_nav_compact_style": False,
|
||||
"sidebar_nav_legacy_style": False,
|
||||
"sidebar_nav_flat_style": False,
|
||||
"theme": "united",
|
||||
"dark_mode_theme": None,
|
||||
"actions_sticky_top": True,
|
||||
"button_classes": {
|
||||
"primary": "btn-primary",
|
||||
"secondary": "btn-secondary",
|
||||
"info": "btn-info",
|
||||
"warning": "btn-warning",
|
||||
"danger": "btn-danger",
|
||||
"success": "btn-success",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
# Simplified static file serving.
|
||||
# https://pypi.org/project/whitenoise/
|
||||
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
|
||||
|
||||
if cfg_dev_mode:
|
||||
NEXTCLOUD_HOST = "cloud.ambulance-clerc.ch"
|
||||
else:
|
||||
|
@@ -29,6 +29,7 @@ urlpatterns = [
|
||||
path('caldav/', include('mycaldav.urls')),
|
||||
#path('collabs_hour/', include('collabs.urls')),
|
||||
path('carnet_rouge/', include('carnet_rouge.urls')),
|
||||
path('student_eval/', include('studenteval.urls')),
|
||||
path('summernote/', include('django_summernote.urls')),
|
||||
path('editor/', include('django_summernote.urls')),
|
||||
]
|
||||
|
@@ -1,5 +1,5 @@
|
||||
from django.contrib import admin
|
||||
|
||||
from django.http import HttpResponseRedirect
|
||||
|
||||
from carnet_rouge.models import cr_Category, cr_Message
|
||||
from django.contrib.auth.models import User
|
||||
@@ -80,13 +80,30 @@ class cr_Message_Admin(SummernoteModelAdmin):
|
||||
return False
|
||||
return True
|
||||
|
||||
def response_change(self, request, obj):
|
||||
if "_temp_save" in request.POST:
|
||||
obj.bEnabled = False
|
||||
obj.save()
|
||||
self.message_user(request, _('Ce message a été enregistré en mode brouillon'))
|
||||
return HttpResponseRedirect(".")
|
||||
if "_publish_save" in request.POST:
|
||||
obj.bEnabled = True
|
||||
obj.save()
|
||||
self.message_user(request, _('Ce message a été publié'))
|
||||
return HttpResponseRedirect(".")
|
||||
return super().response_change(request, obj)
|
||||
|
||||
|
||||
|
||||
|
||||
always_show_username = True
|
||||
list_display = ('MessageId','sTitle', 'DestGroup', 'get_dtCreated', 'sAuthor','bEnabled', 'calc_read_quotas')
|
||||
list_filter = ["sAuthor", StatusFilter]
|
||||
fields = ["Caterogy", "DestGroup", 'sTitle', "sText", "dtValidityFrom", "dtValidityTo", "bEnabled"]
|
||||
fieldsets = (
|
||||
('Message', {'fields': ("Caterogy", "DestGroup", 'sTitle', "sText") }),
|
||||
('Validité', {'fields': ("dtValidityFrom", "dtValidityTo", "bEnabled")})
|
||||
)
|
||||
|
||||
search_fields = ['sTitle', 'sText']
|
||||
|
||||
|
||||
|
@@ -4,7 +4,8 @@ from django.conf import settings
|
||||
from django.contrib.auth.models import Group
|
||||
from django.utils import timezone
|
||||
import uuid
|
||||
from django_quill.fields import QuillField
|
||||
|
||||
|
||||
|
||||
from django.dispatch import receiver
|
||||
from django.db.models.signals import pre_save
|
||||
|
@@ -1,19 +1,43 @@
|
||||
from django.contrib import admin
|
||||
from rangefilter.filters import DateRangeFilter
|
||||
from django.contrib.admin import DateFieldListFilter
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.models import Q
|
||||
from django.shortcuts import render
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from collabs.models import *
|
||||
|
||||
|
||||
from django import forms
|
||||
import datetime
|
||||
|
||||
from datetime import datetime
|
||||
from django.db import connection
|
||||
print(connection.queries)
|
||||
|
||||
class myDateFilter(DateFieldListFilter):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
now = timezone.now()
|
||||
today = now.date()
|
||||
yesterday = today - datetime.timedelta(days=1)
|
||||
if today.month == 1:
|
||||
last_month = today.replace(year=today.year - 1, month=12, day=1)
|
||||
else:
|
||||
last_month = today.replace(month=today.month - 1, day=1)
|
||||
|
||||
last_month_end = today.replace(day=1) -datetime.timedelta(days=1)
|
||||
|
||||
|
||||
|
||||
|
||||
self.links = list(self.links)
|
||||
self.links.insert(1, ('Mois dernier', {
|
||||
self.lookup_kwarg_since: str(last_month),
|
||||
self.lookup_kwarg_until: str(last_month_end),
|
||||
}))
|
||||
|
||||
def is_member(user, group):
|
||||
return user.groups.filter(name=group).exists()
|
||||
|
||||
@@ -35,9 +59,11 @@ class Collabs_hour_Admin(admin.ModelAdmin):
|
||||
class Meta:
|
||||
verbose_name = 'Heure supplémentaire'
|
||||
verbose_name_plural = 'Heures supplémentaires'
|
||||
list_display = ('dtDate', 'nHour', 'nMinutes', 'user', 'sBases', 'type', 'get_total_hour_by_user', 'has_remarques', 'bNoticed')
|
||||
list_display = ('dtDate', 'nHour', 'nMinutes', 'sTargetUser', 'sBases', 'type', 'get_total_hour_by_user', 'has_remarques', 'bNoticed')
|
||||
|
||||
#list_filter = [('dtDate', DateRangeFilter), 'sTargetUser','sBases','type', 'bNoticed']
|
||||
list_filter = (('dtDate', myDateFilter),'sTargetUser', 'sBases', 'type', 'bNoticed')
|
||||
|
||||
list_filter = [('dtDate', DateRangeFilter), ('user', admin.RelatedOnlyFieldListFilter),'sBases','type', 'bNoticed']
|
||||
|
||||
search_fields = ['userName']
|
||||
readonly_fields = ["userName"]
|
||||
@@ -46,8 +72,8 @@ class Collabs_hour_Admin(admin.ModelAdmin):
|
||||
|
||||
|
||||
def get_rangefilter_dtDate_default(self, request):
|
||||
|
||||
return (datetime.today().replace(day=1), datetime.today())
|
||||
pass
|
||||
#return (datetime.today().replace(day=1), datetime.today())
|
||||
|
||||
def get_queryset(self, request):
|
||||
queryset = super(Collabs_hour_Admin, self).get_queryset(request)
|
||||
@@ -58,8 +84,10 @@ class Collabs_hour_Admin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
if not "dtDate__range__gte" in request.GET.keys() and "/change/" not in request.path:
|
||||
start, end = self.get_rangefilter_dtDate_default(request)
|
||||
queryset = queryset.filter(dtDate__range=[start,end])
|
||||
pass
|
||||
#start, end = self.get_rangefilter_dtDate_default(request)
|
||||
#queryset = queryset.filter(dtDate__range=[start,end])
|
||||
#queryset = queryset.filter(dtDate=start)
|
||||
|
||||
return queryset
|
||||
|
||||
|
@@ -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)),
|
||||
],
|
||||
),
|
||||
]
|
@@ -1,20 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-01-31 15:13
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('auth', '0012_alter_user_first_name_max_length'),
|
||||
('collabs', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='collabs_hour',
|
||||
name='user',
|
||||
field=models.ForeignKey( on_delete=django.db.models.deletion.DO_NOTHING, to='auth.user'),
|
||||
),
|
||||
]
|
@@ -1,17 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-01-31 17:11
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0002_collabs_hour_user'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='collabs_hour',
|
||||
name='collab',
|
||||
),
|
||||
]
|
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-01-31 17:13
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0003_remove_collabs_hour_collab'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='collabs_hour',
|
||||
old_name='user',
|
||||
new_name='Collaborateur',
|
||||
),
|
||||
]
|
@@ -1,24 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-01-31 17:14
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('auth', '0012_alter_user_first_name_max_length'),
|
||||
('collabs', '0004_rename_user_collabs_hour_collaborateur'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='collabs_hour',
|
||||
name='Collaborateur',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='collabs_hour',
|
||||
name='user',
|
||||
field=models.ForeignKey( on_delete=django.db.models.deletion.DO_NOTHING, to='auth.user', verbose_name='test'),
|
||||
),
|
||||
]
|
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-01-31 17:15
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0005_remove_collabs_hour_collaborateur_collabs_hour_user'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='userName',
|
||||
field=models.CharField(max_length=100, verbose_name='auteur'),
|
||||
),
|
||||
]
|
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-01-31 17:16
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0006_alter_collabs_hour_username'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='collabs_hour',
|
||||
old_name='user',
|
||||
new_name='Collaborateur',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='userName',
|
||||
field=models.CharField(max_length=100, verbose_name='Auteur'),
|
||||
),
|
||||
]
|
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-01-31 17:19
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0007_rename_user_collabs_hour_collaborateur_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='collabs_hour',
|
||||
old_name='Collaborateur',
|
||||
new_name='user',
|
||||
),
|
||||
]
|
@@ -1,36 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-01-31 17:28
|
||||
|
||||
import django.core.validators
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('auth', '0012_alter_user_first_name_max_length'),
|
||||
('collabs', '0008_rename_collaborateur_collabs_hour_user'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='dtCreated',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='Date de création'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='nHour',
|
||||
field=models.PositiveIntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(23)], verbose_name='Heure'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='nMinutes',
|
||||
field=models.PositiveIntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(60)], verbose_name='Minutes'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='user',
|
||||
field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.DO_NOTHING, to='auth.user', verbose_name='Collaborateur'),
|
||||
),
|
||||
]
|
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-01-31 17:44
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0009_alter_collabs_hour_dtcreated_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='bNoticed',
|
||||
field=models.BooleanField(blank=True, verbose_name='Pris en compte'),
|
||||
),
|
||||
]
|
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-01-31 17:47
|
||||
|
||||
import django.core.validators
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0010_alter_collabs_hour_bnoticed'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='collabs_hour',
|
||||
options={'permissions': (('can_notice', 'Peut noter comme traitée'),)},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='nHour',
|
||||
field=models.PositiveIntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(23)], verbose_name='Heures'),
|
||||
),
|
||||
]
|
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-02-16 12:27
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0011_alter_collabs_hour_options_alter_collabs_hour_nhour'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='collabs_hour',
|
||||
name='dtDate',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='Date'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='bNoticed',
|
||||
field=models.BooleanField(blank=True, default=False, verbose_name='Vérifiée'),
|
||||
),
|
||||
]
|
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-02-16 12:31
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0012_collabs_hour_dtdate_alter_collabs_hour_bnoticed'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='dtDate',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='Date'),
|
||||
),
|
||||
]
|
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-02-16 12:39
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0013_alter_collabs_hour_dtdate'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='dtDate',
|
||||
field=models.DateTimeField(verbose_name='Date'),
|
||||
),
|
||||
]
|
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-02-16 12:41
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0014_alter_collabs_hour_dtdate'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='dtDate',
|
||||
field=models.DateField(verbose_name='Date'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='sRemarques',
|
||||
field=models.TextField(blank=True, verbose_name='Remarques'),
|
||||
),
|
||||
]
|
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-02-16 12:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0015_alter_collabs_hour_dtdate_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='collabs_hour',
|
||||
name='sBases',
|
||||
field=models.CharField(choices=[('1', 'Monthey'), ('2', 'Uvrier')], default=1, max_length=1, verbose_name='Employé de la base de'),
|
||||
),
|
||||
]
|
@@ -1,17 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-03-06 19:48
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0016_collabs_hour_sbases'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='collabs_hour',
|
||||
options={'permissions': (('can_notice', 'Peut noter comme traitée'),), 'verbose_name': 'heure suplémentaire', 'verbose_name_plural': 'heures suplémentaires'},
|
||||
),
|
||||
]
|
@@ -1,43 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-05-01 17:03
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('auth', '0012_alter_user_first_name_max_length'),
|
||||
('collabs', '0017_alter_collabs_hour_options'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Collabs_hour_types',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100, verbose_name='Dénomination')),
|
||||
('dtUpdate', models.DateTimeField(auto_now=True, verbose_name='Date de modification')),
|
||||
('dtCreated', models.DateTimeField(auto_now_add=True, verbose_name='Date de création')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'type',
|
||||
'verbose_name_plural': 'types',
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='collabs_hour',
|
||||
options={'permissions': (('can_notice', 'Peut noter comme traitée'),), 'verbose_name': 'heure supplémentaire', 'verbose_name_plural': 'heures supplémentaires'},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='user',
|
||||
field=models.ForeignKey(limit_choices_to={'groups__name': 'Intervenants'}, on_delete=django.db.models.deletion.DO_NOTHING, to='auth.user', verbose_name='Collaborateur'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='collabs_hour',
|
||||
name='type',
|
||||
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.DO_NOTHING, to='collabs.collabs_hour_types', verbose_name='Types'),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
@@ -1,38 +0,0 @@
|
||||
# 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'),),
|
||||
},
|
||||
),
|
||||
]
|
@@ -1,32 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-03-06 21:17
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('collabs', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Collabs_hour_types',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100, verbose_name='Dénomination')),
|
||||
('dtUpdate', models.DateTimeField(auto_now=True, verbose_name='Date de modification')),
|
||||
('dtCreated', models.DateTimeField(auto_now_add=True, verbose_name='Date de création')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': "type d'heures suplémentaires",
|
||||
'verbose_name_plural': "types d'heures suplémentaires",
|
||||
},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='user',
|
||||
field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.DO_NOTHING, to='collabs.collabs_hour_types', verbose_name='Types'),
|
||||
),
|
||||
]
|
@@ -1,25 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-03-06 21:24
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('auth', '0012_alter_user_first_name_max_length'),
|
||||
('collabs', '0002_collabs_hour_types_alter_collabs_hour_user'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='collabs_hour',
|
||||
name='type',
|
||||
field=models.ForeignKey( on_delete=django.db.models.deletion.DO_NOTHING, to='collabs.collabs_hour_types', verbose_name='Types'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='user',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='auth.user', verbose_name='Collaborateur'),
|
||||
),
|
||||
]
|
@@ -1,25 +0,0 @@
|
||||
# Generated by Django 4.0 on 2022-03-06 21:30
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('auth', '0012_alter_user_first_name_max_length'),
|
||||
('collabs', '0003_collabs_hour_type_alter_collabs_hour_user'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='type',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='collabs.collabs_hour_types', verbose_name='Types'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='collabs_hour',
|
||||
name='user',
|
||||
field=models.ForeignKey(limit_choices_to={'groups__name': 'Intervenants'}, on_delete=django.db.models.deletion.DO_NOTHING, to='auth.user', verbose_name='Collaborateur'),
|
||||
),
|
||||
]
|
@@ -7,6 +7,9 @@ from django.conf import settings
|
||||
from django.utils import timezone
|
||||
from django.contrib import admin
|
||||
|
||||
from django.dispatch import receiver
|
||||
from django.db.models.signals import pre_save
|
||||
|
||||
#test
|
||||
|
||||
BASES_CHOICES = [
|
||||
@@ -33,7 +36,8 @@ class Collabs_hour(models.Model):
|
||||
|
||||
|
||||
userName = models.CharField("Auteur", max_length=100)
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, limit_choices_to={'groups__name': "Intervenants"}, verbose_name="Collaborateur", on_delete=models.DO_NOTHING)
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, limit_choices_to={'groups__name': "Intervenants"}, verbose_name="Collaborateur", on_delete=models.SET_NULL, null=True)
|
||||
sTargetUser = models.CharField("Collaborateur", blank=True, max_length=150, null=True, default="")
|
||||
nHour = models.PositiveIntegerField("Heures", default=0, validators=[MinValueValidator(0), MaxValueValidator(23)])
|
||||
nMinutes = models.PositiveIntegerField("Minutes", default=0, validators=[MinValueValidator(0), MaxValueValidator(60)])
|
||||
sRemarques = models.TextField("Remarques", blank=True)
|
||||
@@ -86,7 +90,7 @@ class Collabs_hour(models.Model):
|
||||
ret = True
|
||||
return ret
|
||||
def __str__(self):
|
||||
return f"Heure supplémentaire: {self.user} : {self.dtCreated.strftime('%d.%m.%Y')} "
|
||||
return f"Heure supplémentaire: {self.sTargetUser} : {self.dtCreated.strftime('%d.%m.%Y')} "
|
||||
|
||||
class Meta:
|
||||
verbose_name = "heure supplémentaire"
|
||||
@@ -95,3 +99,8 @@ class Collabs_hour(models.Model):
|
||||
("can_notice", "Peut noter comme traitée"),
|
||||
|
||||
)
|
||||
|
||||
@receiver(pre_save, sender=Collabs_hour)
|
||||
def on_update(instance,**kwargs):
|
||||
if instance.user is not None:
|
||||
instance.sTargetUser = f"{instance.user.first_name} {instance.user.last_name}"
|
@@ -1,47 +0,0 @@
|
||||
|
||||
{% load static %}
|
||||
<link rel="stylesheet" type="text/css" href="{% static 'collabs/style.css' %}">
|
||||
|
||||
{% if latest_hour_list %}
|
||||
<h1>Liste des heures supplémentaires:</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>Qui</th>
|
||||
<th>Combien</th>
|
||||
<th>Total du mois</th>
|
||||
<th>Traité</th>
|
||||
</tr>
|
||||
{% for collabs_hour in latest_hour_list %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/collabs/collabs_hour/{{ collabs_hour.id }}/change/">{{ collabs_hour.dtCreated }}</a>
|
||||
</td>
|
||||
<td>
|
||||
{{ collabs_hour.user }}
|
||||
</td>
|
||||
<td>
|
||||
{{collabs_hour.nHour}}:{{collabs_hour.nMinutes}}
|
||||
</td>
|
||||
<td>
|
||||
{{collabs_hour.total}}
|
||||
</td>
|
||||
<td>
|
||||
{{collabs_hour.bNoticed}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
|
||||
|
||||
|
||||
</table>
|
||||
<ul>
|
||||
{% for collabs_hour in latest_hour_list %}
|
||||
<li><a href="/admin/collabs/collabs_hour/{{ collabs_hour.id }}/change/">{{ collabs_hour.dtCreated }} {{ collabs_hour.user }} ({{collabs_hour.total}}) => {{collabs_hour.nHour}}:{{collabs_hour.nMinutes}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p>No Collabs_hour.</p>
|
||||
{% endif %}
|
BIN
db.sqlite3_save
BIN
db.sqlite3_save
Binary file not shown.
BIN
locale/fr/LC_MESSAGES/django.mo
Normal file
BIN
locale/fr/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
155
locale/fr/LC_MESSAGES/django.po
Normal file
155
locale/fr/LC_MESSAGES/django.po
Normal file
@@ -0,0 +1,155 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-09-12 10:55+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: .\templates\admin\carnet_rouge\cr_message\change_form.html:13
|
||||
msgid "Enregister en brouillon"
|
||||
msgstr ""
|
||||
|
||||
#: .\templates\admin\carnet_rouge\cr_message\change_form.html:19
|
||||
msgid "Publier"
|
||||
msgstr ""
|
||||
|
||||
#: .\templates\admin\collabs\collabs_hour\change_list_save.html:30
|
||||
msgid "Home"
|
||||
msgstr "Accueil"
|
||||
|
||||
#: .\templates\admin\collabs\collabs_hour\change_list_save.html:56
|
||||
msgid "Please correct the error below."
|
||||
msgstr "Merci de corriger l'erreur suivante"
|
||||
|
||||
#: .\templates\admin\collabs\collabs_hour\change_list_save.html:56
|
||||
msgid "Please correct the errors below."
|
||||
msgstr "Merci de corriger les erreurs suivantes"
|
||||
|
||||
#: .\templates\admin\collabs\collabs_hour\change_list_save.html:81
|
||||
msgid "Filter"
|
||||
msgstr "Filtre"
|
||||
|
||||
#: .\templates\admin\collabs\collabs_hour\change_list_save.html:83
|
||||
msgid "Clear all filters"
|
||||
msgstr "vider tous les filtres"
|
||||
|
||||
#: .\templates\admin\index_save.html:23
|
||||
msgid "Recent actions"
|
||||
msgstr "Actions récentes"
|
||||
|
||||
#: .\templates\admin\index_save.html:24
|
||||
msgid "My actions"
|
||||
msgstr "Mes actions"
|
||||
|
||||
#: .\templates\admin\index_save.html:28
|
||||
msgid "None available"
|
||||
msgstr "Aucune disponible"
|
||||
|
||||
#: .\templates\admin\index_save.html:42
|
||||
msgid "Unknown content"
|
||||
msgstr "Contenu inconnu"
|
||||
|
||||
#: .\templates\admin\login.html:15 .\templates\admin\login_jazzmin.html:15
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You are authenticated as %(username)s, but are not authorized to access this "
|
||||
"page. Would you like to login to a different account?"
|
||||
msgstr ""
|
||||
"Vous ête connecté en tant que %(username)s, mais vous n'êtes pas autorisé à "
|
||||
"accéder à cette page. Voulez-vous vous connecter avec un autre compte ?"
|
||||
|
||||
#: .\templates\admin\login.html:63 .\templates\admin\login_jazzmin.html:63
|
||||
msgid "Forgotten your password or username?"
|
||||
msgstr "Oublié votre mot de passe ou nom d'utilisateur ?"
|
||||
|
||||
#: .\templates\admin\login.html:71 .\templates\admin\login_jazzmin.html:71
|
||||
msgid "Log in"
|
||||
msgstr "Connection"
|
||||
|
||||
#: .\venv\Lib\site-packages\django\views\templates\default_urlconf.html:7
|
||||
#: .\venv\Lib\site-packages\django\views\templates\default_urlconf.html:220
|
||||
msgid "The install worked successfully! Congratulations!"
|
||||
msgstr ""
|
||||
|
||||
#: .\venv\Lib\site-packages\django\views\templates\default_urlconf.html:206
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View <a href=\"https://docs.djangoproject.com/en/%(version)s/releases/\" "
|
||||
"target=\"_blank\" rel=\"noopener\">release notes</a> for Django %(version)s"
|
||||
msgstr ""
|
||||
|
||||
#: .\venv\Lib\site-packages\django\views\templates\default_urlconf.html:221
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You are seeing this page because <a href=\"https://docs.djangoproject.com/en/"
|
||||
"%(version)s/ref/settings/#debug\" target=\"_blank\" rel=\"noopener"
|
||||
"\">DEBUG=True</a> is in your settings file and you have not configured any "
|
||||
"URLs."
|
||||
msgstr ""
|
||||
|
||||
#: .\venv\Lib\site-packages\django\views\templates\default_urlconf.html:229
|
||||
msgid "Django Documentation"
|
||||
msgstr ""
|
||||
|
||||
#: .\venv\Lib\site-packages\django\views\templates\default_urlconf.html:230
|
||||
msgid "Topics, references, & how-to’s"
|
||||
msgstr ""
|
||||
|
||||
#: .\venv\Lib\site-packages\django\views\templates\default_urlconf.html:238
|
||||
msgid "Tutorial: A Polling App"
|
||||
msgstr ""
|
||||
|
||||
#: .\venv\Lib\site-packages\django\views\templates\default_urlconf.html:239
|
||||
msgid "Get started with Django"
|
||||
msgstr ""
|
||||
|
||||
#: .\venv\Lib\site-packages\django\views\templates\default_urlconf.html:247
|
||||
msgid "Django Community"
|
||||
msgstr ""
|
||||
|
||||
#: .\venv\Lib\site-packages\django\views\templates\default_urlconf.html:248
|
||||
msgid "Connect, get help, or contribute"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "Tous"
|
||||
|
||||
#~ msgid "Actif "
|
||||
#~ msgstr "Actif"
|
||||
|
||||
#~ msgid "Messages"
|
||||
#~ msgstr "Messages"
|
||||
|
||||
#~ msgid "Site Maps"
|
||||
#~ msgstr "Site Maps"
|
||||
|
||||
#~ msgid "Static Files"
|
||||
#~ msgstr "Static Files"
|
||||
|
||||
#~ msgid "…"
|
||||
#~ msgstr "…"
|
||||
|
||||
#~ msgid "That page number is not an integer"
|
||||
#~ msgstr "Ce numéro de page n'est pas un nombre"
|
||||
|
||||
#~ msgid "That page number is less than 1"
|
||||
#~ msgstr "Ce numéro de page est < à 1"
|
||||
|
||||
#~ msgid "That page contains no results"
|
||||
#~ msgstr "Cette page n'a pas de résultat"
|
||||
|
||||
#~ msgid "Enter a valid value."
|
||||
#~ msgstr "Entrer une valeur valide"
|
Binary file not shown.
@@ -2,6 +2,7 @@ from datetime import datetime, timedelta, time
|
||||
from django.contrib.auth.models import User
|
||||
import datetime as Datetime
|
||||
import pickle
|
||||
import pytz
|
||||
import os
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
@@ -17,6 +18,8 @@ import caldav
|
||||
|
||||
from mycaldav.settings import *
|
||||
|
||||
Key_separator = "--"
|
||||
|
||||
# Create your models here.
|
||||
class cls_caldav():
|
||||
url = ""
|
||||
@@ -44,6 +47,7 @@ class cls_caldav():
|
||||
self.night.sort(key=lambda x: x.key, reverse=reverse)
|
||||
|
||||
|
||||
|
||||
def get_caldav_data(self,periode=1,calendar=None, date=None):
|
||||
ctx = ssl.create_default_context()
|
||||
ctx.check_hostname = False
|
||||
@@ -70,6 +74,7 @@ class cls_caldav():
|
||||
elif periode == 3:
|
||||
today = date + timedelta(days=-2)
|
||||
tomorow = date + timedelta(days=2)
|
||||
print(f"affichage: {today} <> {tomorow}")
|
||||
events = recurring_ical_events.of(Calendar.from_ical(self.data)).between(today,tomorow)
|
||||
elif periode == 7:
|
||||
endweek = date + timedelta(days=7)
|
||||
@@ -81,8 +86,8 @@ class cls_caldav():
|
||||
item = _caldav_item()
|
||||
item.name = event["SUMMARY"]
|
||||
item.uiid = event["UID"]
|
||||
if "-" in item.name:
|
||||
arr = item.name.split("-")
|
||||
if Key_separator in item.name:
|
||||
arr = item.name.split(Key_separator)
|
||||
item.key = arr[0]
|
||||
if "$" in item.key:
|
||||
item.team_transfert = True
|
||||
@@ -166,6 +171,10 @@ class cls_caldav_client():
|
||||
self.a_team = self.data.calendar(cal_id=caldav_id["team"])
|
||||
self.a_vhc = self.data.calendar(cal_id=caldav_id["vhc"])
|
||||
self.a_op = self.data.calendar(cal_id=caldav_id["op"])
|
||||
self.a_task_config = self.data.calendar(cal_id=caldav_id["task_config"])
|
||||
self.a_road = self.data.calendar(cal_id=caldav_id["road"])
|
||||
self.a_rh = self.data.calendar(cal_id=caldav_id["rh"])
|
||||
self.a_manif = self.data.calendar(cal_id=caldav_id["manif"])
|
||||
|
||||
#self.get_events_by_date(self.a_team)
|
||||
def get_event_by_uuid(self,calandar,uuid):
|
||||
@@ -177,13 +186,20 @@ class cls_caldav_client():
|
||||
# print(event.vobject_instance.vevent.eventId)
|
||||
def mark_as_done_task(self,calandar,uuid):
|
||||
event = self.get_event_by_uuid(calandar=calandar,uuid=uuid)
|
||||
if "#Fait" not in event.vobject_instance.vevent.description.value:
|
||||
event.vobject_instance.vevent.description.value = event.vobject_instance.vevent.description.value + " #Fait"
|
||||
else:
|
||||
while "#Fait#Fait" in event.vobject_instance.vevent.description.value:
|
||||
event.vobject_instance.vevent.description.value = event.vobject_instance.vevent.description.value.replace("#Fait#Fait","#Fait")
|
||||
|
||||
event.save()
|
||||
try:
|
||||
_desc = event.vobject_instance.vevent.description.value + "#Fait"
|
||||
_desc.replace("#Fait#Fait","#Fait")
|
||||
except AttributeError:
|
||||
_desc = "#Fait"
|
||||
|
||||
my_event = calandar.save_event(
|
||||
dtstart=event.vobject_instance.vevent.dtstart.value,
|
||||
dtend=event.vobject_instance.vevent.dtend.value,
|
||||
summary=event.vobject_instance.vevent.summary.value,
|
||||
description=_desc,
|
||||
)
|
||||
event.delete()
|
||||
|
||||
|
||||
|
||||
@@ -194,7 +210,7 @@ class cls_caldav_client():
|
||||
array = pickle.load(file)
|
||||
except:
|
||||
array = {"year": 0, "month": 0}
|
||||
print("Erreur lecture fichier débiteur")
|
||||
print("Erreur lecture fichier config")
|
||||
|
||||
if array["month"] == datetime.now().month:
|
||||
if array["year"] == datetime.now().year:
|
||||
@@ -226,11 +242,17 @@ class cls_caldav_client():
|
||||
self.format_data_event(event)
|
||||
return
|
||||
|
||||
def get_lastName_with_MC(self,search):
|
||||
print(f"search équipage 1: {search}")
|
||||
user = User.objects.get(username=f"mc{search}@clerc.ch")
|
||||
last_name = f"{user.last_name} {user.first_name[0]}."
|
||||
return last_name
|
||||
|
||||
def format_data_event(self,event):
|
||||
summary = event.vobject_instance.vevent.summary.value
|
||||
if "-" not in summary:
|
||||
if Key_separator not in summary:
|
||||
return False
|
||||
key = summary.split("-")
|
||||
key = summary.split(Key_separator)
|
||||
if "&" not in key[1]:
|
||||
return False
|
||||
equipage = key[1].split("&")
|
||||
@@ -241,9 +263,8 @@ class cls_caldav_client():
|
||||
if "MC" not in equipage[0]: # check équipage 1
|
||||
team_1 = equipage[0].strip().replace('#', '')
|
||||
try:
|
||||
print(f"search équipage 1: {team_1}")
|
||||
user = User.objects.get(username=f"mc{team_1}@clerc.ch").last_name
|
||||
equipage[0] = equipage[0].replace(team_1, f"MC{team_1} {user}")
|
||||
last_name = self.get_lastName_with_MC(team_1)
|
||||
equipage[0] = equipage[0].replace(team_1, f"MC{team_1} {last_name}")
|
||||
updated = True
|
||||
except :
|
||||
print(f"Error: mc{team_1}@clerc.ch @{summary}")
|
||||
@@ -255,9 +276,8 @@ class cls_caldav_client():
|
||||
elif "MC" not in equipage[1]: # check équipage 2
|
||||
team_2 = equipage[1].strip().replace('#','')
|
||||
try:
|
||||
print(f"search équipage 2: {team_2}")
|
||||
user = User.objects.get(username=f"mc{team_2}@clerc.ch").last_name
|
||||
equipage[1] = equipage[1].replace(team_2, f"MC{team_2} {user}")
|
||||
last_name = self.get_lastName_with_MC(team_2)
|
||||
equipage[1] = equipage[1].replace(team_2, f"MC{team_2} {last_name}")
|
||||
updated = True
|
||||
except :
|
||||
print(f"Error: mc{team_2}@clerc.ch @{summary}")
|
||||
@@ -266,7 +286,7 @@ class cls_caldav_client():
|
||||
print("Already with MC")
|
||||
|
||||
if updated:
|
||||
event.vobject_instance.vevent.summary.value = f"{key[0]} - {equipage[0].strip()} & {equipage[1].strip()}"
|
||||
event.vobject_instance.vevent.summary.value = f"{key[0]} {Key_separator} {equipage[0].strip()} & {equipage[1].strip()}"
|
||||
event.save()
|
||||
|
||||
|
||||
@@ -288,7 +308,7 @@ class cls_caldav_client():
|
||||
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 = datetime.strptime(f"1.{datetime.today().month}.{datetime.today().year}","%d.%m.%Y") + relativedelta(months=1)
|
||||
next_month = (next_month.year, next_month.month, next_month.day)
|
||||
|
||||
today = (datetime.now().year, datetime.now().month, 1)
|
||||
@@ -302,11 +322,14 @@ class cls_caldav_client():
|
||||
print(f"copy de l'événement: {event['SUMMARY']}")
|
||||
|
||||
|
||||
_title = event["SUMMARY"] if ("SUMMARY" in event) else "Sans Titre"
|
||||
_desc = event["DESCRIPTION"] if ("DESCRIPTION" in event) else ""
|
||||
|
||||
my_event = calandar.save_event(
|
||||
dtstart=event["DTSTART"].dt,
|
||||
dtend=event["DTEND"].dt,
|
||||
summary= event["SUMMARY"],
|
||||
description=event["DESCRIPTION"],
|
||||
summary= _title,
|
||||
description= _desc,
|
||||
)
|
||||
|
||||
with open(os.path.join("mycaldav", "last_sync_config.bin"), "wb") as file:
|
||||
@@ -322,6 +345,54 @@ class cls_caldav_client():
|
||||
e.delete()
|
||||
#print(events)
|
||||
|
||||
def reformat_all_events(self,calandar):
|
||||
events = calandar.date_search(start=datetime(2023, 1, 1), end=datetime.now() + relativedelta(years=1),
|
||||
expand=True)
|
||||
|
||||
for event in events:
|
||||
summary = event.vobject_instance.vevent.summary.value
|
||||
print(f"test summary {summary}")
|
||||
if "----" in summary:
|
||||
summary = summary.replace("----", Key_separator)
|
||||
print(f"reformat: [{summary}]")
|
||||
event.vobject_instance.vevent.summary.value = summary
|
||||
event.save()
|
||||
elif "--" in summary:
|
||||
pass
|
||||
elif "-" in summary:
|
||||
summary = summary.replace("-",Key_separator)
|
||||
print(f"reformat: [{summary}]")
|
||||
event.vobject_instance.vevent.summary.value = summary
|
||||
event.save()
|
||||
|
||||
def change_utc_to_zurich_all_events(self,calandar):
|
||||
events = calandar.date_search(start=datetime(2023, 4, 1), end=datetime.now() + relativedelta(years=1),
|
||||
expand=True)
|
||||
|
||||
for event in events:
|
||||
start = event.vobject_instance.vevent.dtstart.value
|
||||
end = start + relativedelta(day=1)
|
||||
|
||||
if start.hour < 12:
|
||||
new_start = datetime(start.year, start.month, start.day,7,0,0, tzinfo = pytz.timezone("Europe/Zurich"))
|
||||
new_end = datetime(start.year, start.month, start.day, 19, 0, 0, tzinfo=pytz.timezone("Europe/Zurich"))
|
||||
elif start.hour > 12:
|
||||
new_start = datetime(start.year, start.month, start.day,19,0,0, tzinfo = pytz.timezone("Europe/Zurich"))
|
||||
new_end = datetime(start.year, start.month,start.day, 23, 59, 0, tzinfo=pytz.timezone("Europe/Zurich"))
|
||||
|
||||
event.vobject_instance.vevent.dtstart.value = new_start
|
||||
event.vobject_instance.vevent.dtend.value = new_end
|
||||
|
||||
|
||||
if new_end<new_start :
|
||||
print(f"{new_start}>{new_end}")
|
||||
print("ERROR")
|
||||
event.vobject_instance.vevent.dtend.value = new_start
|
||||
|
||||
|
||||
event.save()
|
||||
|
||||
|
||||
|
||||
class _caldav_item():
|
||||
key = ""
|
||||
|
@@ -6,9 +6,9 @@
|
||||
<table>
|
||||
{% for task in latest_task_list %}
|
||||
|
||||
<tr>
|
||||
<tr >
|
||||
<td class="td_key" style="vertical-align: top;" >
|
||||
<span style="font-weight: bold;">{{task.key}}</span><br>
|
||||
<a href="{{task.href}}" target="_blank" style="text-decoration: none;color: white" ><span style="font-weight: bold;">{{task.key}}</span><br><br></a>
|
||||
{{task.str_start_date}} - {{task.str_end_date}}<br>
|
||||
{{task.str_start_time}} - {{task.str_end_time}}<br>
|
||||
|
||||
|
@@ -7,14 +7,14 @@
|
||||
{% for task in latest_task_list %}
|
||||
{% if task.str_start_date == today %}
|
||||
|
||||
<tr>
|
||||
<tr href="{{task.href}}" target="_blank" >
|
||||
<td style="vertical-align: top;" class="td_key" >
|
||||
<span style="font-weight: bold;">{{task.key}}</span><br>
|
||||
{{task.str_start_date}} - {{task.str_end_date}}<br>
|
||||
|
||||
</td>
|
||||
<td style="{% if task.done %}text-decoration:line-through{% endif %}">
|
||||
<a href="{{task.href}}" target="_blank" style="text-decoration: none;color: white" >{{ task.name }}<br></a>
|
||||
<a style="text-decoration: none;color: white" >{{ task.name }}<br></a>
|
||||
{{task.desc}}
|
||||
</td>
|
||||
</tr>
|
||||
|
@@ -6,9 +6,9 @@
|
||||
<table>
|
||||
{% for task in latest_task_list %}
|
||||
|
||||
<tr>
|
||||
<tr href="{{task.href}}" target="_blank" >
|
||||
<td style="vertical-align: top;"class="td_key" >
|
||||
<span style="font-weight: bold;">{{task.key}}</span><br>
|
||||
<a href="{{task.href}}" target="_blank" style="text-decoration: none;color: white" ><span style="font-weight: bold;">{{task.key}}</span><br><br></a>
|
||||
{{task.str_start_date}} - {{task.str_end_date}}<br>
|
||||
{{task.str_start_time}} - {{task.str_end_time}}<br>
|
||||
|
||||
|
@@ -82,7 +82,7 @@ let timeout = null;
|
||||
function plusSlides(n) {
|
||||
showSlides(slideIndex += n);
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(resetSlides, 15000);
|
||||
timeout = setTimeout(resetSlides, 17000);
|
||||
}
|
||||
function resetSlides(){
|
||||
console.log("pass_reset slide");
|
||||
@@ -131,12 +131,12 @@ function showSlides(n) {
|
||||
</svg>
|
||||
{% endif %}
|
||||
{% if task.team_manif %}
|
||||
Manif
|
||||
M
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="{% if task.done %}text-decoration:line-through{% endif %}">
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %}; width: 150px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 150px;display: inline-block">{{ task.team_2 }}</span>
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %}; width: 170px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 170px;display: inline-block">{{ task.team_2 }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
@@ -155,14 +155,12 @@ function showSlides(n) {
|
||||
</svg>
|
||||
{% endif %}
|
||||
{% if task.team_manif %}
|
||||
<svg class="team_svg_icon" x="0px" y="0px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
<use class="team_svg_icon" xlink:href="{% static 'mycaldav/images/team_manif.svg' %}#icon"></use>
|
||||
</svg>
|
||||
M
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="{% if task.done %}text-decoration:line-through{% endif %}">
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %};width: 150px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 150px;display: inline-block">{{ task.team_2 }}</span>
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %};width: 170px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 170px;display: inline-block">{{ task.team_2 }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
@@ -188,12 +186,12 @@ function showSlides(n) {
|
||||
</svg>
|
||||
{% endif %}
|
||||
{% if task.team_manif %}
|
||||
Manif
|
||||
M
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="{% if task.done %}text-decoration:line-through{% endif %}">
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %}; width: 150px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 150px;display: inline-block">{{ task.team_2 }}</span>
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %}; width: 170px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 170px;display: inline-block">{{ task.team_2 }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
@@ -212,14 +210,12 @@ function showSlides(n) {
|
||||
</svg>
|
||||
{% endif %}
|
||||
{% if task.team_manif %}
|
||||
<svg class="team_svg_icon" x="0px" y="0px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
<use class="team_svg_icon" xlink:href="{% static 'mycaldav/images/team_manif.svg' %}#icon"></use>
|
||||
</svg>
|
||||
M
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="{% if task.done %}text-decoration:line-through{% endif %}">
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %};width: 150px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 150px;display: inline-block">{{ task.team_2 }}</span>
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %};width: 170px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 170px;display: inline-block">{{ task.team_2 }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
@@ -247,12 +243,12 @@ function showSlides(n) {
|
||||
</svg>
|
||||
{% endif %}
|
||||
{% if task.team_manif %}
|
||||
Manif
|
||||
M
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="{% if task.done %}text-decoration:line-through{% endif %}">
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %}; width: 150px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 150px;display: inline-block">{{ task.team_2 }}</span>
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %}; width: 170px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 170px;display: inline-block">{{ task.team_2 }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
@@ -271,14 +267,12 @@ function showSlides(n) {
|
||||
</svg>
|
||||
{% endif %}
|
||||
{% if task.team_manif %}
|
||||
<svg class="team_svg_icon" x="0px" y="0px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
<use class="team_svg_icon" xlink:href="{% static 'mycaldav/images/team_manif.svg' %}#icon"></use>
|
||||
</svg>
|
||||
M
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="{% if task.done %}text-decoration:line-through{% endif %}">
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %};width: 150px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 150px;display: inline-block">{{ task.team_2 }}</span>
|
||||
<span style="{% if task.team_1_chef %}color: yellow !important;{% endif %};width: 170px;display: inline-block">{{ task.team_1 }}</span>
|
||||
<span style="{% if task.team_2_chef %}color: yellow !important;{% endif %};width: 170px;display: inline-block">{{ task.team_2 }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
@@ -80,6 +80,13 @@ def view_op_caldav(request):
|
||||
|
||||
@xframe_options_exempt
|
||||
def view_team_caldav(request):
|
||||
#Change timezone
|
||||
myclient = cls_caldav_client()
|
||||
#myclient.reformat_all_events(myclient.a_team)
|
||||
#myclient.change_utc_to_zurich_all_events(myclient.a_team)
|
||||
#myclient.reformat_all_events(myclient.a_task_config)
|
||||
#myclient.change_utc_to_zurich_all_events(myclient.a_task)
|
||||
|
||||
o_caldav = cls_caldav(url=caldav_cfg["team"])
|
||||
o_caldav.get_caldav_data(periode=3)
|
||||
template = loader.get_template("team/team_view.html")
|
||||
|
1
nextcloud/README.rst
Normal file
1
nextcloud/README.rst
Normal file
@@ -0,0 +1 @@
|
||||
../doc/nextcloud_app.rst
|
1
nextcloud/__init__.py
Normal file
1
nextcloud/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
default_app_config = 'nextcloud.apps.NextcloudConfig'
|
13
nextcloud/apps.py
Normal file
13
nextcloud/apps.py
Normal file
@@ -0,0 +1,13 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class NextcloudConfig(AppConfig):
|
||||
name = 'nextcloud'
|
||||
|
||||
def ready(self):
|
||||
|
||||
# Load and connect signal recievers
|
||||
import nextcloud.signals
|
3
nextcloud/requirements.txt
Normal file
3
nextcloud/requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
requests
|
||||
Django
|
||||
pyocclient
|
12
nextcloud/settings.py
Normal file
12
nextcloud/settings.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from django.conf import settings
|
||||
|
||||
NEXTCLOUD_HOST = getattr(settings, 'NEXTCLOUD_HOST', 'test.ambulance-clerc.ch')
|
||||
NEXTCLOUD_ADMIN = getattr(settings, 'NEXTCLOUD_ADMIN', 'admin')
|
||||
NEXTCLOUD_PASSWORD = getattr(settings, 'NEXTCLOUD_SECRET', 'Mc33*144')
|
||||
|
||||
NEXTCLOUD_USE_HTTPS = getattr(settings, 'NEXTCLOUD_USE_HTTPS', True)
|
||||
NEXTCLOUD_SSL_IS_SIGNED = getattr(settings, 'NEXTCLOUD_SSL_IS_SIGNED', True)
|
||||
|
||||
NEXTCLOUD_USER_GROUP = getattr(settings, 'NEXTCLOUD_USER_GROUP', "autoGenerated")
|
||||
NEXTCLOUD_USER_QUOTA = getattr(settings, 'NEXTCLOUD_USER_QUOTA', '1GB')
|
||||
NEXTCLOUD_USER_DEFAULT_PASSWORD = getattr(settings, 'NEXTCLOUD_USER_DEFAULT_PASSWORD', 'Mc144*1870')
|
211
nextcloud/signals.py
Normal file
211
nextcloud/signals.py
Normal file
@@ -0,0 +1,211 @@
|
||||
import logging
|
||||
import random
|
||||
import string
|
||||
import requests
|
||||
|
||||
import owncloud as NextCloudCLI
|
||||
|
||||
|
||||
from django.dispatch import receiver
|
||||
from django.db.models.signals import post_save, post_delete
|
||||
from django.contrib.auth.models import User, Group
|
||||
|
||||
from .settings import *
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def log(msg):
|
||||
logger.debug(msg)
|
||||
print(msg)
|
||||
|
||||
|
||||
def adding_nexcloud_user(_user, **kwargs):
|
||||
print("pass add nextcloud user")
|
||||
# Add new member on the nextcloud server
|
||||
|
||||
_pass = NEXTCLOUD_USER_DEFAULT_PASSWORD
|
||||
|
||||
_admin = NEXTCLOUD_ADMIN
|
||||
_admin_key = NEXTCLOUD_PASSWORD
|
||||
|
||||
_url = '%s://%s' % (('http', 'https')[NEXTCLOUD_USE_HTTPS is True], NEXTCLOUD_HOST)
|
||||
|
||||
nc = NextCloudCLI.Client(_url, verify_certs=NEXTCLOUD_SSL_IS_SIGNED)
|
||||
_err = ['login', 'create_user', 'enable_user', 'add_user_to_group', 'set_user_attribute quota']
|
||||
try:
|
||||
nc.login(_admin, _admin_key)
|
||||
print("pass logged")
|
||||
_err.pop(0)
|
||||
try:
|
||||
print(f"NC User Created {_user.username} / {_pass}")
|
||||
nc.create_user(_user.username, _pass)
|
||||
print(f"**NC User Created passed {_user.username} / {_pass}")
|
||||
_err.pop(0)
|
||||
except NextCloudCLI.OCSResponseError as e:
|
||||
if e.status_code == 102:
|
||||
_err.pop(0)
|
||||
nc.make_ocs_request('PUT', 'cloud/users', _user.username + '/enable')
|
||||
else:
|
||||
raise e
|
||||
_err.pop(0)
|
||||
if NEXTCLOUD_USER_GROUP is not None:
|
||||
nc.add_user_to_group(_user.username, NEXTCLOUD_USER_GROUP)
|
||||
_err.pop(0)
|
||||
if NEXTCLOUD_USER_QUOTA is not None:
|
||||
nc.set_user_attribute(_user.username, 'quota', NEXTCLOUD_USER_QUOTA)
|
||||
nc.logout()
|
||||
|
||||
except NextCloudCLI.HTTPResponseError as e:
|
||||
log('adding_nexcloug_user: %s HTTP Error %d' % (_err[0], e.status_code))
|
||||
except requests.exceptions.ConnectionError as e:
|
||||
log('adding_nexcloug_user: %s Connection Error: %s' % (_err[0], e))
|
||||
except NextCloudCLI.OCSResponseError as e:
|
||||
log('adding_nexcloug_user: %s OCSResponse Error %d' % (_err[0], e.status_code))
|
||||
else:
|
||||
log('Adding user %s success' % _user.username)
|
||||
|
||||
|
||||
@receiver(post_delete, sender= User)
|
||||
def deactivating_nexcloud_user(instance, **kwargs):
|
||||
# Remove member on the nextcloud server
|
||||
_user = instance
|
||||
|
||||
_admin = NEXTCLOUD_ADMIN
|
||||
_admin_key = NEXTCLOUD_PASSWORD
|
||||
|
||||
_url = ('http', 'https')[NEXTCLOUD_USE_HTTPS is True] + '://' + NEXTCLOUD_HOST
|
||||
|
||||
nc = NextCloudCLI.Client(_url, verify_certs=NEXTCLOUD_SSL_IS_SIGNED)
|
||||
_err = ['login', 'deactivate_user']
|
||||
try:
|
||||
nc.login(_admin, _admin_key)
|
||||
_err.pop(0)
|
||||
nc.make_ocs_request('PUT', 'cloud/users', _user.username + '/disable')
|
||||
nc.logout()
|
||||
|
||||
except NextCloudCLI.HTTPResponseError as e:
|
||||
log('removing_nexcloug_user: %s HTTP Error %d' % (_err[0], e.status_code))
|
||||
except requests.exceptions.ConnectionError as e:
|
||||
log('removing_nexcloug_user: %s Connection Error: %s' % (_err[0], e))
|
||||
except NextCloudCLI.OCSResponseError as e:
|
||||
log('removing_nexcloug_user: %s OCSResponse Error %d' % (_err[0], e.status_code))
|
||||
else:
|
||||
log('Removing user %s success' % _user.username)
|
||||
print('Removing user %s success' % _user.username)
|
||||
|
||||
|
||||
|
||||
def update_nexcloud_user(_user, **kwargs):
|
||||
log(f"User edited {_user}")
|
||||
# Change user password on the nextcloud server
|
||||
|
||||
|
||||
_admin = NEXTCLOUD_ADMIN
|
||||
_admin_key = NEXTCLOUD_PASSWORD
|
||||
|
||||
_url = ('http', 'https')[NEXTCLOUD_USE_HTTPS is True] + '://' + NEXTCLOUD_HOST
|
||||
|
||||
nc = NextCloudCLI.Client(_url, verify_certs=NEXTCLOUD_SSL_IS_SIGNED)
|
||||
_err = ['login', 'set_user_attribute password']
|
||||
try:
|
||||
nc.login(_admin, _admin_key)
|
||||
_err.pop(0)
|
||||
nc.set_user_attribute(_user.username, 'email', _user.email)
|
||||
nc.set_user_attribute(_user.username, 'displayname', _user.first_name + " " + _user.last_name + get_pseudonyme_from_user(_user.username))
|
||||
_groups = _user.groups.values_list('name', flat=True)
|
||||
groups = list(_groups)
|
||||
for grp in groups:
|
||||
log(f"add a group [{grp}] for {_user}")
|
||||
nc.add_user_to_group(_user.username, grp)
|
||||
nc.logout()
|
||||
|
||||
except NextCloudCLI.HTTPResponseError as e:
|
||||
log('changing_nexcloud_user_password: %s HTTP Error %d' % (_err[0], e.status_code))
|
||||
except requests.exceptions.ConnectionError as e:
|
||||
log('changing_nexcloud_user_password: %s Connection Error: %s' % (_err[0], e))
|
||||
except NextCloudCLI.OCSResponseError as e:
|
||||
log('changing_nexcloud_user_password: %s OCSResponse Error %d' % (_err[0], e.status_code))
|
||||
else:
|
||||
log('Update user %s success' % _user.username)
|
||||
|
||||
def get_pseudonyme_from_user(username):
|
||||
print(username)
|
||||
if "mc" in username:
|
||||
return " (" + username.split("@")[0].replace("mc","MC") + ")"
|
||||
else:
|
||||
return ""
|
||||
|
||||
@receiver(post_save, sender= User)
|
||||
def post_save_User_handler(created,instance, **kwargs):
|
||||
_user = instance
|
||||
if created:
|
||||
adding_nexcloud_user(_user=_user)
|
||||
else:
|
||||
update_nexcloud_user(_user=_user)
|
||||
@receiver(post_save, sender= Group)
|
||||
def adding_nexcloud_group(sender,instance,created, **kwargs):
|
||||
if not created:
|
||||
log(f"group Edited {instance.name}")
|
||||
return False
|
||||
# Add new member on the nextcloud server
|
||||
_group = instance
|
||||
|
||||
|
||||
_admin = NEXTCLOUD_ADMIN
|
||||
_admin_key = NEXTCLOUD_PASSWORD
|
||||
|
||||
_url = '%s://%s' % (('http', 'https')[NEXTCLOUD_USE_HTTPS is True], NEXTCLOUD_HOST)
|
||||
|
||||
nc = NextCloudCLI.Client(_url, verify_certs=NEXTCLOUD_SSL_IS_SIGNED)
|
||||
_err = ['login', 'create_group', 'enable_group']
|
||||
try:
|
||||
nc.login(_admin, _admin_key)
|
||||
print("pass logged")
|
||||
_err.pop(0)
|
||||
try:
|
||||
nc.create_group(_group.name)
|
||||
_err.pop(0)
|
||||
except NextCloudCLI.OCSResponseError as e:
|
||||
if e.status_code == 102:
|
||||
_err.pop(0)
|
||||
else:
|
||||
raise e
|
||||
_err.pop(0)
|
||||
nc.logout()
|
||||
|
||||
except NextCloudCLI.HTTPResponseError as e:
|
||||
log('adding_nexcloug_group: %s HTTP Error %d' % (_err[0], e.status_code))
|
||||
except requests.exceptions.ConnectionError as e:
|
||||
log('adding_nexcloug_group: %s Connection Error: %s' % (_err[0], e))
|
||||
except NextCloudCLI.OCSResponseError as e:
|
||||
log('adding_nexcloug_group: %s OCSResponse Error %d' % (_err[0], e.status_code))
|
||||
else:
|
||||
log('Adding group %s success' % _group.name)
|
||||
|
||||
@receiver(post_delete, sender= Group)
|
||||
def delete_nexcloud_group(sender,instance, **kwargs):
|
||||
print("Remove group")
|
||||
# Remove member on the nextcloud server
|
||||
_group = instance
|
||||
|
||||
_admin = NEXTCLOUD_ADMIN
|
||||
_admin_key = NEXTCLOUD_PASSWORD
|
||||
|
||||
_url = ('http', 'https')[NEXTCLOUD_USE_HTTPS is True] + '://' + NEXTCLOUD_HOST
|
||||
|
||||
nc = NextCloudCLI.Client(_url, verify_certs=NEXTCLOUD_SSL_IS_SIGNED)
|
||||
_err = ['login', 'deactivate_user']
|
||||
try:
|
||||
nc.login(_admin, _admin_key)
|
||||
_err.pop(0)
|
||||
nc.delete_group(_group.name)
|
||||
nc.logout()
|
||||
|
||||
except NextCloudCLI.HTTPResponseError as e:
|
||||
log('removing_nexcloug_group: %s HTTP Error %d' % (_err[0], e.status_code))
|
||||
except requests.exceptions.ConnectionError as e:
|
||||
log('removing_nexcloug_group: %s Connection Error: %s' % (_err[0], e))
|
||||
except NextCloudCLI.OCSResponseError as e:
|
||||
log('removing_nexcloug_group: %s OCSResponse Error %d' % (_err[0], e.status_code))
|
||||
else:
|
||||
log('Removing group %s success' % _group.name)
|
43
nextcloud/tests.py
Normal file
43
nextcloud/tests.py
Normal file
@@ -0,0 +1,43 @@
|
||||
from django.test import TestCase
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
from .models.alerts import MemberAlertManager
|
||||
from .signals import randomStringDigits
|
||||
|
||||
import logging
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class NextcloudTestCase(TestCase):
|
||||
|
||||
myClass = MemberAlertManager()
|
||||
_pass = randomStringDigits()
|
||||
|
||||
def setUp(self):
|
||||
self._usr = User.objects.create_user('4321_test_1234', email='test@example.com', password='password')
|
||||
|
||||
def tearDown(self):
|
||||
self._usr.delete()
|
||||
|
||||
@patch('nextcloud.signals.logger')
|
||||
def test_adding_nexcloud_user(self, mock_logger):
|
||||
self.myClass.handle_new_membership(self._usr)
|
||||
mock_logger.debug.assert_called_with('Adding user %s success' % self._usr.username)
|
||||
_logger.debug('test_adding_nexcloud_user %s success' % self._usr.username)
|
||||
|
||||
@patch('nextcloud.signals.logger')
|
||||
def test_changing_nexcloud_user_password(self, mock_logger):
|
||||
self.myClass.handle_changing_membership_password(self._usr, self._pass)
|
||||
mock_logger.debug.assert_called_with('Changing user %s password success' % self._usr.username)
|
||||
_logger.debug('test_changing_nexcloud_user_password %s success' % self._usr)
|
||||
|
||||
@patch('nextcloud.signals.logger')
|
||||
def test_removing_nexcloud_user(self, mock_logger):
|
||||
self.myClass.handle_ending_membership(self._usr)
|
||||
mock_logger.debug.assert_called_with('Removing user %s success' % self._usr.username)
|
||||
_logger.debug('test_removing_nexcloud_user %s success' % self._usr)
|
@@ -1,5 +1,5 @@
|
||||
arabic-reshaper==2.1.3
|
||||
asgiref==3.4.1
|
||||
asgiref==3.7.2
|
||||
asn1crypto==1.5.1
|
||||
Brotli==1.0.9
|
||||
caldav==0.9.1
|
||||
@@ -10,17 +10,15 @@ click==8.1.3
|
||||
colorama==0.4.4
|
||||
cryptography==37.0.1
|
||||
cssselect2==0.4.1
|
||||
Django==4.0
|
||||
django-admin-rangefilter==0.8.3
|
||||
django-baton==2.2.3
|
||||
fonttools==4.29.1
|
||||
Django
|
||||
django-admin-rangefilter
|
||||
fpdf==1.7.2
|
||||
future==0.18.2
|
||||
html5lib==1.1
|
||||
icalendar==4.0.9
|
||||
idna==3.3
|
||||
lxml==4.8.0
|
||||
mysqlclient==2.1.0
|
||||
lxml
|
||||
# mysqlclient==2.1.0
|
||||
oscrypto==1.3.0
|
||||
pdfkit==1.0.0
|
||||
Pillow==9.0.1
|
||||
@@ -57,3 +55,7 @@ zopfli==0.1.9
|
||||
django-autologin
|
||||
django-summernote
|
||||
django-jazzmin
|
||||
django-default-language
|
||||
gunicorn
|
||||
whitenoise
|
||||
django-filter
|
10
static/css/global.css
Normal file
10
static/css/global.css
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
.cascading-right {
|
||||
margin-right: -50px;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.cascading-right {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
BIN
static/img/login_bg.jpg
Normal file
BIN
static/img/login_bg.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 320 KiB |
BIN
static/img/login_bg_43.jpg
Normal file
BIN
static/img/login_bg_43.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 287 KiB |
Before Width: | Height: | Size: 311 KiB After Width: | Height: | Size: 311 KiB |
BIN
static/img/logo_clerc_200.png
Normal file
BIN
static/img/logo_clerc_200.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
129
studenteval/admin.py
Normal file
129
studenteval/admin.py
Normal file
@@ -0,0 +1,129 @@
|
||||
from django.contrib import admin
|
||||
from django_summernote.admin import SummernoteModelAdmin
|
||||
from studenteval.models import cl_Student_eval
|
||||
from django.db.models import Q
|
||||
from django.urls import reverse
|
||||
from django.utils.html import format_html
|
||||
from . import views
|
||||
from django.contrib.auth.models import User
|
||||
from rangefilter.filters import *
|
||||
from django.core.exceptions import PermissionDenied
|
||||
|
||||
from rangefilter.filters import (
|
||||
DateRangeFilterBuilder,
|
||||
DateTimeRangeFilterBuilder,
|
||||
NumericRangeFilterBuilder,
|
||||
DateRangeQuickSelectListFilterBuilder,
|
||||
)
|
||||
|
||||
def is_member(user, group):
|
||||
return user.groups.filter(name=group).exists()
|
||||
|
||||
class _cl_Student_eval_admin(SummernoteModelAdmin):
|
||||
summernote_fields = ('sDesc_neg','sDesc_pos','sDesc_global')
|
||||
request = None
|
||||
always_show_username = True
|
||||
|
||||
list_display = ('ID','action_buttons','sStudent', "get_ref_of_eval", "nEval_Type", "nEval_Mode", "sAuthor", 'get_mirrored')
|
||||
|
||||
|
||||
|
||||
def action_buttons(self, obj):
|
||||
action1_url = f"/student_eval/show_pdf/{obj.uuid}/?dtDate__range__gte={self.request.GET.get('dtDate__range__gte')}&dtDate__range__lte={self.request.GET.get('dtDate__range__lte')}"
|
||||
return format_html('<a href="{}">Voir PDF</a>', action1_url)
|
||||
|
||||
action_buttons.short_description = 'Voir la fiche PDF'
|
||||
|
||||
def get_queryset(self, request):
|
||||
self.request = request
|
||||
user_obj = request.user
|
||||
if is_member(user_obj, "FI-Encadrants"):
|
||||
return super(_cl_Student_eval_admin, self).get_queryset(request)
|
||||
elif is_member(user_obj, "FI-Étudiants"):
|
||||
return super(_cl_Student_eval_admin, self).get_queryset(request).filter(Q(Author=user_obj.id) | Q(Student=user_obj.id))
|
||||
elif is_member(user_obj, "Intervenants"):
|
||||
return super(_cl_Student_eval_admin, self).get_queryset(request).filter(Author=user_obj.id)
|
||||
else:
|
||||
raise PermissionDenied
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
search_fields = ['sStudent', 'sRef']
|
||||
list_filter = ['sStudent',"sAuthor", "nEval_Type", "nEval_Mode",]
|
||||
#list_filter = ('sStudent', "sAuthor", "nEval_Type", "nEval_Mode", ("dtDate", DateRangeFilterBuilder()),)
|
||||
|
||||
|
||||
|
||||
def get_form(self, request, obj=None, **kwargs):
|
||||
user_obj = request.user
|
||||
if obj is not None:
|
||||
author_id = obj.Author.id if obj.Author is not None else 0
|
||||
student_id = obj.Student.id if obj.Student is not None else 0
|
||||
|
||||
if not user_obj.id == author_id and not user_obj.id == student_id and not is_member(user_obj, "FI-Encadrants"):
|
||||
raise PermissionDenied
|
||||
return super().get_form(request, obj, **kwargs)
|
||||
|
||||
|
||||
|
||||
#fields = ["Vehicle", "nType",'sTitle', "sDesc","dtStart", "dtEnd", "Author"]
|
||||
|
||||
fieldsets = (
|
||||
('Informations générales', {
|
||||
'fields': ('Student','nEval_Type','dtDate')
|
||||
}),
|
||||
("Information propre à l'intervention ou exercice", {
|
||||
'fields': ('sRef','sInter_Desc', 'nInter_Nature', 'nInter_Priority', 'nInter_Complexity', 'nStudent_Role')
|
||||
}),
|
||||
("Appréciation de l'étudiant/stagiaire", {
|
||||
'fields': ("nEval_Mode", "sDesc_neg", 'sDesc_pos', "sDesc_global")
|
||||
}),
|
||||
("Co-écriture du suivi", {
|
||||
'fields': ("Author_2e",)
|
||||
}),
|
||||
)
|
||||
|
||||
|
||||
def save_model(self, request, obj, form, change):
|
||||
obj.Author = request.user
|
||||
obj.sAuthor = request.user.first_name + " " + request.user.last_name
|
||||
print("pass-Save")
|
||||
print(obj.Student)
|
||||
|
||||
obj.sStudent = obj.Student.first_name + " " + obj.Student.last_name
|
||||
print(f"sStudent = {obj.sStudent}")
|
||||
|
||||
print(obj.Author_2e)
|
||||
if obj.Author_2e is not None:
|
||||
print(f"Maj author 2e")
|
||||
obj.sAuthor_2e = obj.Author_2e.first_name + " " + obj.Author_2e.last_name
|
||||
|
||||
obj.save()
|
||||
|
||||
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
|
||||
field = super(_cl_Student_eval_admin, self).formfield_for_foreignkey( db_field, request, **kwargs)
|
||||
if db_field.remote_field.model == User:
|
||||
field.label_from_instance = self.get_user_label
|
||||
return field
|
||||
|
||||
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
|
||||
field = super(_cl_Student_eval_admin, self).formfield_for_manytomany( db_field, request, **kwargs)
|
||||
if db_field.remote_field.model == User:
|
||||
field.label_from_instance = self.get_user_label
|
||||
return field
|
||||
|
||||
def get_user_label(self, user):
|
||||
name = user.get_full_name()
|
||||
username = user.username
|
||||
if not self.always_show_username:
|
||||
return name or username
|
||||
return (name and name != username and '%s (%s)' % (name, username) or username)
|
||||
|
||||
|
||||
|
||||
|
||||
# Register your models here.
|
||||
admin.site.register(cl_Student_eval, _cl_Student_eval_admin)
|
7
studenteval/apps.py
Normal file
7
studenteval/apps.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class StudentevalConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'studenteval'
|
||||
verbose_name = "Suivis étudiants"
|
10
studenteval/filters.py
Normal file
10
studenteval/filters.py
Normal file
@@ -0,0 +1,10 @@
|
||||
import django_filters
|
||||
from studenteval.models import cl_Student_eval
|
||||
|
||||
class cl_Student_eval_Filter(django_filters.FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = cl_Student_eval
|
||||
fields = {
|
||||
'Student' : ['exact']
|
||||
}
|
567
studenteval/import.csv
Normal file
567
studenteval/import.csv
Normal file
@@ -0,0 +1,567 @@
|
||||
ID,Zeitstempel,Student,sStudent,nEval_Type,dtDate,sRef,sInter_Desc,nInter_Priority,nInter_Nature,nInter_Complexity,nStudent_Role,nEval_Mode,sDesc_neg,sDesc_pos,sDesc_global,sAuthor,sAuthor_2e
|
||||
1,26.03.2023 20:38:57,5,MC 39 - Addy Joanna,1,18.03.2023,VS23008498,TCS à Aquaparc,1,1,1,1,2,"Accident de travail bénin : pas de nécessité d'appeler la police. Reconnaitre la simplicité de certaines interventions, sans avoir recours à des moyens supplémentaires.","Bonne PEC. Anamnèse ciblée. Calme, posée vis à vis de la pte. Empathique. Examens secondaires appropriés, évaluation et suivi pendant le trsp. ciblés.","Bonne intervention, fluide, dans le le calme et bon rythme tout de même.",MC 23,
|
||||
2,26.03.2023 20:50:18,5,MC 39 - Addy Joanna,2,18.03.2023,,,,,,,2,Ne te sens pas obligée de rentrer dans un protocole ou une procédure à chaque intervention. Beaucoup de nos prise en charge ne vont pas plus loin que le secondaire et la relève.,Calme. A su être ferme vis à vis du patient (objectif du jour) quant à ses décisions de prise de charge.,2 interventions comme leader et un comme équipier,MC 23,
|
||||
3,28.03.2023 13:11:48,79,MC 32 - Bonvin Aurélie,1,27.03.2023,VS23009212,"Chute accidentelle de sa hauteur, sans TC",2,1,2,1,2,Anticiper plus vite le confort de la patiente (proposer de s'appuyer contre un mur pour la soulager),Evaluation systématique avec un Leadership présent et des prises de décisions pertinentes. Le moyen de relevage est adapté à la situation avec demande de renfort. Attitude calme et rassurante auprès de la patiente et de la témoin.,"C'était une très bonne intervention où tu as pris des décisions pertinentes et adaptées. Bravo, continues ainsi!",MC 14,
|
||||
4,30.03.2023 21:09:00,11,MC 40 - Bourqui Elisa,1,26.03.2023,VS23009101,DRS versus susp. dissection aortique,1,2,3,1,2,"s'affirmer plus devant le médecin, garde l'intervention entre tes mains.","bonne stratégie d'intervention, connait bien ces algorithmes, bon relationnel avec patient, coordonne bien avec les partenaires","bonne intervention, à l'aise avec les pathologies cardiaques.",MC 34,
|
||||
5,31.03.2023 09:43:10,11,MC 40 - Bourqui Elisa,2,23.09.2023,,,,,,,2,Approfondir un peu les liens cliniques des douleurs abdominales attention à certaine proposition de traitement faite (toradol - avec possible hématémèse),Dans l'ensemble bonne évaluation des patients et attitude durant la journée. Les traitements proposés étaient bon pour la majeur partie. ,"Bonne journée dans l'ensemble, peu de point pertinent à amener. ",MC 16,
|
||||
6,31.03.2023 10:04:44,79,MC 32 - Bonvin Aurélie,1,31.03.2023,VS23009496,AVP Piéton Voiture en rue,1,1,1,1,1,"- Prendre ma place en tant que Leader d'intervention auprès du SMUP.
|
||||
- Penser à plutôt prendre la planche que la civière à Aubes et vaccum, on sera plus rapides pour aller au chaud et à l'abri.
|
||||
- Faire une réévaluation primaire dans l'ambulance
|
||||
- Bien comprendre la cinétique car le SMUP ne sera pas avec moi durant le transport","- Bonne empathie avec la patiente
|
||||
- Bonne pose de VVP
|
||||
- Bon coaching pour calmer la patiente",Dans l'ensemble bonne PEC. je dois bien prendre ma place de leader et ne pas oublier de réévaluer la patiente quand je suis dans l'ambulance.,MC 32,
|
||||
7,31.03.2023 17:48:33,79,MC 32 - Bonvin Aurélie,1,31.03.2023,VS23009496,AVP voiture-piéton,1,1,2,1,2,"Positionne toi comme leader sur l'intervention, la stratégie de relevage et de technique relève de tes compétences et pas forcément de celle du médecin sur place. Il est important d'échanger avec lui sur la stratégie générale d'intervention par rapport à son évaluation médicale, la technique employée quant à elle pour le relevage peut être soumise de manière constructive à l'ensemble des intervenants. Comme discuté, tu peux te baser sur l'évaluation du médecin en première intention mais la réévaluation est très importante surtout si le médecin n'accompagne pas le transport.","Très bonne dynamique d'intervention, tu prends en considération l'ensemble des partenaires présents et tu adaptes ta prise en charge. Tu sais rester en retrait quand il le faut et t'imposer quand c'est nécessaire. La relation de confiance que tu établis avec ta patiente est un de tes points forts, tu restes naturelle, humble et extrêmement humaine. Ta stratégie d'intervention est claire et précise, il est facile de te suivre et de pouvoir anticiper tes décisions.",Belle intervention stable/complexe. L'environnement et les différents partenaires présents amènent une composante parfois déstabilisante. Tu ne t'es pas laissée piéger par la complexité de la situation. Bravo! Continue comme ça.,MC 31,
|
||||
8,05.04.2023 23:53:50,64,MC 38 - Tamborini Sylvain,1,04.04.2023,VS23009885,Décompensation BPCO,1,2,3,1,2,"Garde ton rôle de leader (normal à ce stade de la formation), c'est toi qui coordonnes l'intervention.","Bonne connaissance de l'algorithme, primaire précis, bon choix de traitement valide avec son coéquipier en cas de doute, bonne relation avec la patiente, calme et rassurant.","bonne intervention, relation entre théorie et pratique, bon sens pratique.",MC 34,
|
||||
9,07.04.2023 15:24:57,79,MC 32 - Bonvin Aurélie,2,07.04.2023,,,,,,,1,"- Faire un primaire systématique et complet façon école (pour garder ma structure)
|
||||
- Mon ressenti : avoir confiance en moi quand je propose une alternative différente de l'hôpital
|
||||
","- Bonne investigation de la chute, malaise, mécanique ?
|
||||
- Bonne proposition d'alternative à l'Hôpital.
|
||||
- Primaire complet et systématique
|
||||
- Bon questionnement auprès de la fille de la patiente
|
||||
- Pour les deux prises en charge trauma, bonne stratégie de prise en charge énoncée à mon collègue.
|
||||
- Délégation de glycémie durant mon primaire
|
||||
- Recherche de pouls pédieux","Bonnes interventions. J'ai réussi à déléguer des actes à mon collègue durant mon primaire.
|
||||
J'ai posé mes questions à la patiente (même durant mon primaire) pour ne pas oublier de les poser après. Plus facile pour moi de me couper dans mon primaire et le poursuivre ensuite que d'oublier de poser mes questions.
|
||||
Interventions stables de type trauma.",MC 32,
|
||||
10,07.04.2023 18:14:49,79,MC 32 - Bonvin Aurélie,2,07.04.2023,,,,,,,2,"Remplissage des FIP. Anamnèses à améliorer (redondance de mot, ou de phrase qui allonge inutilement l'anamnèse, manque score ISS).","Bonne collaboration verbale, annonce toujours le résultat de ces recherches, fait des demandes adaptées en fonction de ces besoins.","2 situations stables simples, pas de difficultés particulières. Bonnes évaluations et prise en charge pour ces deux interventions. ",MC 5,
|
||||
11,07.04.2023 18:18:58,11,MC 40 - Bourqui Elisa,1,07.04.2023,VS23010101,DRS,1,2,3,1,2,Connaissance préparation médicament,"Objectifs personnels annoncés atteint. Bravo!
|
||||
Bonne collaboration avec le médecin SMUR.",Bonne intervention. Essaie d'avoir toujours un pas d'avance sur ton intervention en envisageant le pire pour espérer le meilleure ;-),MC 29,
|
||||
12,07.04.2023 18:52:09,11,MC 40 - Bourqui Elisa,1,07.04.2023,VS23010101,"Etat de choc septique (hypotension, tachycardie, dyspnée) suspicion pneumonie?",1,2,3,1,1,"- préparation médicament : ne pas se conforter dans mes acquis (prépa du fenta), être capable d'adapter la façon de préparer au besoin -> diminuer la charge cognitive et prendre le temps qu'il faut pour éviter les erreurs
|
||||
- position de leader : avoir toujours un pas d'avance durant l'intervention, afin d'être prêt à toute éventualité (ici, penser à observer la météo et le terrain pour un éventuel trsprt héliporté)
|
||||
- être capable de donner mon avis et mon point de vue à la médecin sans ressentir une forme de ''hiérarchie'' des rôles, car nous avons tous des compétences et des visions différentes","- répartition des rôles claire avec le SMUR 222 et bonne collaboration avec un retour dans l'ambulance pour le partage d'informations récoltées
|
||||
- chercher, trouver, traiter qui a permis de stabiliser le patient, bonne structure du primaire avec réévaluation
|
||||
- délégation des gestes
|
||||
- j'essaie de prendre l'intervention étape par étape et ne pas me laisser submerger par le nombre d'informations et de gestes à faire ","Je me suis sentie dans mes bottes dans mon rôle de leader et les investigations effectuées étaient fournies, ce qui a permis de traiter les menaces vitales immédiates et de mettre en place des traitements ''secondaires'' lorsque le patient était stabilisé. Bonne collaboration avec le SMUR, mais je dois encore m'affirmer devant le médecin et réfléchir en même temps sans me reposer sur lui. Je suis aussi responsable du patient, d'autant plus que j'étais seule avec lui pour le trajet. ",MC 40,
|
||||
13,08.04.2023 14:54:22,79,MC 32 - Bonvin Aurélie,1,08.04.2023,VS23010209,Intervention de trouble psychiatrie,2,2,1,1,1,"- Plus m'imposer quand la patient élève la voix et essayer de la canaliser.
|
||||
- Penser à ma sécurité envers la patiente même si elle n'était pas dangereuse.
|
||||
","- Bonne entente avec la patiente même si elle n'est pas très collaborante.
|
||||
- Questions cernées sans trop rentrer dans les détails
|
||||
- J'ai réussi à m'imposer quand la patiente s'est détachée de la ceinture de sécurité.
|
||||
- Bonne FIP complète","Bonne intervention, simple. C'était ma première PEC seule avec un trouble psychiatrique. J'ai essayé de communiquer avec la patiente, de lui expliquer ce que nous allions faire et de ne pas monter en pression quand la patiente élève la voix.
|
||||
J'ai adapté mon primaire lors de cette intervention car la patiente nous attendais debout dans les couloirs de son immeuble.
|
||||
",MC 32,
|
||||
14,08.04.2023 19:07:19,79,MC 32 - Bonvin Aurélie,1,08.04.2023,VS23010209,PEC décompensation psychiatrique,2,2,1,1,2,Aurélie pourrait être un peu plus cadrante (patiente impolie qui impose ses règles). Mais c'est une première PEC psychiatrique seule et cela viendra avec l'habitude.,"Bonne maîtrise des outils opérationnels -> Radio / RescueTrack / Google Maps pour adresse
|
||||
|
||||
Très bonne approche avec la patiente qui était passablement décompensée. La communication était difficile mais Aurélie a eu une attitude très adaptée, à la fois calme tout en posant un cadre. Bonne recherche d'anamnèse. Bonne transmission. Très bon remplissage de la FIP qui a été rapidement terminée (appréciable), bonne synthèse en n'oubliant aucun élément.",Bonne attitude et bonne PEC pour une première seule sur un cas psychiatrique.,MC 15,
|
||||
15,09.04.2023 14:48:16,79,MC 32 - Bonvin Aurélie,1,09.04.2023,VS23010324,P2 chute douleur hanche,2,1,1,1,2,"Ne pas se mettre la pression par rapport à l'encadrant.
|
||||
Accueillir l'intervention à mesure quelle arrive sans la subir.","Garde son rôle de leader malgré être déstabilisée par sa PEC.
|
||||
Identifie et traite le PP. ","Première intervention avec Aurélie. Post intervention elle a exprimé s'être mise la pression par rapport à l'encadrant et s'est sentie déstabilisée par sa propre PEC qui n'était pas structurée comme elle aurait désiré. (choix personnel de PEC d'Aurélie, pas d'intervention du responsable à ce niveau là). J'attend de voir les interventions suivante pour voir une évolution par rapport à la pression ressentie par Aurélie. ",MC 29,
|
||||
16,09.04.2023 15:24:24,79,MC 32 - Bonvin Aurélie,1,09.04.2023,VS23010324,"Chute de sa hauteur, sans TC, PC, AC. Douleur hanche gauche",2,1,1,1,1,"- Ne pas imaginer l'intervention avant d'arriver sur le lieu car si un élément change, je vais être perturbée.
|
||||
- Oser couper les témoins quand ils me parlent durant mon évaluation afin de ne pas être déstabilisée.
|
||||
- Faire un primaire systématique et complet pour avoir toutes les informations avant d'envoyer mon collègue pour le relevage.
|
||||
- Attendre d'être en face du patient pour me présenter dans le but d'éviter qu'il tourne la tête (trauma)
|
||||
- Lors de délégation d'antalgie, dire complètement ce que je veux (ex: 6 mg de Fentanyl avec 4 ml de Nacl pour avoir 30mcg/ml. Poids du patient à 60 kg.
|
||||
","- Bonne gestion de l'antalgie et réévaluation régulières, douleurs passées de 6 à 1.
|
||||
- Bonne recherche et questions pour comprendre la scène","J'ai été trop stressée et ceci m'a fait me sentir par en confort durant mon intervention.
|
||||
J'aurais pu faire beaucoup mieux. Etre plus en confiance, je dois travailler sur le fait de connaitre mieux mes médicaments, CI, dosage.
|
||||
Essayer de faire la part des choses entre ce que je ressens à l'intérieur de moi et ce qu'il s'est vraiment passé sur l'intervention. ",MC 32 ,
|
||||
17,10.04.2023 23:45:27,40,MC 28 - Michaud Samuel,1,10.04.2023,VS23010469,P1 Dyspnée / DRS,1,,1,1,2,"un peu plus de précision sur l'anamnèse écrite, notamment les éléments de recherche qui te permettent d'exclure ou d'inclure un DD.
|
||||
","bonne structure
|
||||
bonne recherche complète avec un large panel de DD
|
||||
|
||||
Attitude calme et rassurante chez un patient stressé, en pleure, apeuré
|
||||
|
||||
Même si tu n'as pas eu de cours sur la lecture d'ECG, j'ai bien aimé que tu le regardes quand même et que tu analyses ce que tu peux avec tes connaissances. (7 questions ECG) C'est top !","Bonne intervention dans sa globalité, stable simple. Une discussion de préparation dans l'ambulance sur le trajet aller permet de dresser un large spectre de DD que Samuel a éliminé au fur et à mesure de l'intervention pour garder le côté psy sur cette inter. Bon questionnement sur la nécessité de faire des gestes invasives ou non (VVP) qui n'était pas forcément indiqué sur cette intervention.",MC 33,
|
||||
18,15.04.2023 16:15:50,5,MC 39 - Addy Joanna,1,15.04.2023,VS23010763,Transfert S3 psychiatrie avec accompagnement police,6,2,2,1,2,"N'ai pas d'appréhension face à ce genre de patient ou de situation.
|
||||
N'oublie pas de te protéger (prendre le nom du médecin qui te transmet l'ordre médical)","Tu es toujours très empathique et patiente avec tes patients.
|
||||
Fais part de ses craintes.","C'est une bonne PEC car bien que ce soit un transfert elle reste complexe. Cependant, je sens encore pas mal d'appréhension de ta part face à ce genre de patient ou de situation. Là, tu es dans un cadre hospitalier donc prend le temps de comprendre la situation et de faire une première approche de la patiente sans besoin d'une patrouille de police.
|
||||
Sur le terrain c'est différent il faut te protéger davantage.
|
||||
Attention de toujours te protéger lorsque tu demandes des délégations médicales
|
||||
intra-hospitalière.",MC 11,
|
||||
19,15.04.2023 16:37:51,40,MC 28 - Michaud Samuel,1,15.05.2023,VS23010741,P1 Détresse respiratoire,1,2,3,1,2,Recherches clinique et anamnestique de la détresse respiratoire et retranscription des éléments recherchés et exclus. ,Reste systématique et calme.,Samuel ne sait pas actuellement ce qu'il doit chercher sur une détresse respiratoire et que faire des éléments récoltés. Il sait cependant administrer les bons traitements sous délégations et effectuer les surveillances adéquats. Ces connaissances seront normalement complétées lors du prochains bloc.,MC 29,
|
||||
20,16.04.2023 18:48:14,5,MC 39 - Addy Joanna,2,16.04.2023,,,,,,,2,"- communication en exercice, boucle fermée et quittance adaptée aux communications radio
|
||||
- Culture de l'erreur avec signalement immédiat d'événement lors d'erreur d'administration (adré en exercice)
|
||||
- Lors de prise en charge réels, pousser plus l'anamnèse. Body-check complet lors de traumatismes
|
||||
- investigations du statu vaccinal et moyen d'expression de douleurs ou désaccord de patients avec troubles de la communication.","- Connaissance des algorithmes
|
||||
- Accompagnement et contact patient
|
||||
- Systématique dans le primaire
|
||||
- Stratégie de prise en charge",Bonne journée avec de bonnes prestations. Il reste des détails à améliorer.,MC 30,
|
||||
21,18.04.2023 22:29:43,40,MC 28 - Michaud Samuel,1,18.04.2023,VS23010999,P1 à la permanence de Monthey pour DRS avec ECG modifié mais sans STEMI pour Rennaz,1,2,1,1,2,Peaufiner l'anamnèse de ta FIP,"- Bon relationnel avec la pte, il a su la rassurer et la calmer durant le trsp (pte stressée ++)
|
||||
- Bonne anticipation de l'algorithme DRS -> proposition au médecin de la permanence de donner l'Aspirine per os, Isoket et Morphine","Bonne intervention, bravo !",MC 21,
|
||||
22,19.04.2023 10:19:32,11,MC 40 - Bourqui Elisa,1,19.04.2023,exercice,Exercice,7,2,4,1,2,"- Attention à tes dilutions de médicament (dosage adrénaline faux)
|
||||
- Surélève ta perfusion, sinon le soluté ne sera pas administré
|
||||
|
||||
","- Lors du début de la Réa, le positionnement du pt n'était pas optimal pour ton ergonomie, chose que tu as évalué et corrigé rapidement.
|
||||
- Bon travail des DD, dès lors que tu as suspecté une méningite, vous vous êtes rapidement protégées
|
||||
- Rythme d'intervention adapté.
|
||||
- Demande de renfort rapide.
|
||||
|
||||
|
||||
",Bonne intervention dans l'ensemble,MC 20,MC 48
|
||||
23,19.04.2023 10:24:10,11,MC 40 - Bourqui Elisa,1,19.04.2023,Exercice,Exercice état de choc septique pédiatrique sur méningite avec REA,7,2,4,1,1,"- réactivité lors de la péjoration du patient et de son passage en ACR -> j'étais beaucoup dans la réflexion au début de la prise en charge dans la recherche de mes DD. J'aurais dû refaire mon primaire et traiter mes priorités cliniques, en me détachant de la paraclinique
|
||||
- revoir la préparation de l'adrénaline et effectuer le double contrôle systématiquement, en réfléchissant avec le binôme si besoin (en intervention réelle, prendre le temps avant d'arriver sur site pour se mettre d'accord sur la préparation des médicaments selon message d'appel, cf algorithmes)
|
||||
- prendre 10"" pour la gestion de la place de travail
|
||||
- prendre en considération la maman et lui expliquer ce qu'on fait (consentement etc.)
|
||||
- retravailler la communication avec les boucles fermées surtout en pédiatrie ","- recherche des diagnostics différentiels du trouble de la conscience et de l'état fébrile
|
||||
- gestion de la réa avec les tournus (BLS, respect des 2min, ventilation, monitorage)
|
||||
- traitements adéquats pour le choc septique et la méningite","Bonne impression pour le début de la prise en charge, au niveau de la gestion des priorités et de la recherche des DD puis moins à l'aise et difficulté à se plonger dans la procédure de réa ped, un peu brouillon au début puis réanimation effectuée de manière correcte et efficace par la suite ",MC 40,
|
||||
24,19.04.2023 10:25:47,5,MC 39 - Addy Joanna,1,19.04.2023,Exercice,P1 enfant 2 ans inconscient. Choc septique -> ACR,7,2,4,2,2,"- Amélioration des boucles fermées et faire attention de ne pas perturber le leader.
|
||||
- Faire attention lors de désaccord avec les partenaires de ne pas se braquer, mais d'argumenter son point de vue (risque de couper court avec le médecin)","- Rapidité d'exécution.
|
||||
- Anticipation ",Bonne intervention,MC 20,MC 40
|
||||
25,19.04.2023 14:15:06,5,MC 39 - Addy Joanna,1,19.04.2023,VS23011032,P2 trauma genou,2,1,1,1,2,Aucun,"PEC décontractée mais professionnelle, en prenant une part de plaisir (objectif d'intervention).
|
||||
Structurée, complète en étant adaptée au problème principal.
|
||||
Accompagne et encadre un étudiant tout en prenant en charge.","Bravo, belle prestation! Tu arrive au bout de la ligne droite!",MC 29,
|
||||
26,19.04.2023 14:28:37,33,MC 62 - Losa Ralph,2,18.04.2023,,,,,,,1,"Avoir une vue d'ensemble et pouvoir anticiper et communiquer avec le leader afin de savoir si je peux préparer quelque chose.
|
||||
|
||||
Assimiler les gestes afin de pouvoir les réaliser tout en restant disponible à ce qui se passe autour de façon multitâche.
|
||||
|
||||
Garder autant que possible le regard au loin afin d'anticiper et de fluidifier ma conduite du véhicule en optimisant mes trajectoires.
|
||||
Dans la conduite en feux bleus-sirène, imposer sans forcer mon passage en toute sécurité","Je suis attentif au bien-être du patient, et adéquat avec lui et les autres acteurs de l'intervention.
|
||||
Je suis à l'écoute et essaye de profiter au mieux de l'expérience et des conseils de l'équipage.
|
||||
","Très positif, la journée a été instructive, intéressante et constructive",MC 62,
|
||||
27,19.04.2023 16:35:19,11,MC 40 - Bourqui Elisa,1,19.04.2023,VS23011027 / VS23011040,Transfert pour US pour suspicition d'hemarthrose du genou gauche,6,2,1,1,2,"- Fait attention de ne pas te faire happer par l'infirmière. Même si elle est pressée, insiste si le rapport est incomplet et prend le temps dont tu as besoin pour faire les choses (chose que tu as très bien faite une fois que je t'ai donné l'impulsion).
|
||||
- Ne néglige pas le relationnel, tu as pu remarquer qu'avec certain pt ça fonctionne bien.
|
||||
","- Très bonne gestion de l'antalgie que ce soit médical ou relationnelle
|
||||
- Rapport complet et précis",Bonne intervention,MC 48,
|
||||
28,19.04.2023 17:00:32,11,MC 40 - Bourqui Elisa,2,16.04.2023,,,,,,,1,"- bien observer l'environnement et chercher des indices de potentielle intoxication
|
||||
- gestion du déroulement de l'intervention avec différents intervenants et témoins -> être capable de m'imposer et être directive dans mes ''ordres''
|
||||
- relevage à mieux organiser et être claire pour la répartition des rôles
|
||||
- mettre un peu plus de rythme dans l'inter, patient stabilisé mais toujours GCS 8","- bonne évaluation primaire, ''chercher, trouver, traiter'' et recherche des DD
|
||||
- bonne collaboration avec le SMUR, j'ai réussi à donner mon avis sans être bloquée par le fait que ce soit un médecin ","Globalement contente de ma prise en charge, objectifs de collaboration avec le SMUR atteint mais je dois encore m'améliorer sur la gestion globale de l'intervention avec les autres intervenants (First, témoins sur site), afin que les ordres soient clairs et précis -> plus m'affirmer",MC 40,
|
||||
29,19.04.2023 18:51:05,5,MC 39 - Addy Joanna,2,19.04.2023,,,,,,,1,"Je me sens à l'aise en intervention mais je ressens encore la pression de l'évaluation. Je dois encore m'entrainer pour être capable de prendre du plaisir en intervention.
|
||||
|
||||
Dans mon rôle de second, je peux encore améliorer ma connaissance du secteur. Si je fais une erreur (trompé de route), je dois faire un travail sur moi-même pour ne pas effectuer une réaction en cascade en me rajoutant la pression de l'évaluation.",J'ai pu intégrer un étudiant dans ma prise en charge stable et l'accompagner selon son niveau de formation.,"Bon avis global sur la journée, je développe mes outils de développement personnel.",MC 39,
|
||||
30,19.04.2023 19:01:35,5,MC 39 - Addy Joanna,1,19.04.2023,Exercice,enfant 2 ans inconscient. Choc septique -> ACR,1,2,4,2,1,"Communication avec mon leader pour le double contrôle des dosages, surtout si je ne comprends pas ce qu'elle a préparé, sans perturber mon leader.
|
||||
|
||||
Utilisation du scope avec option métronome et chronomètre.
|
||||
|
||||
En fonction du poids du patient, utilisation d'une perfusion de 250ml pour effectuer le remplissage pédiatrique peut être pratique.
|
||||
|
||||
Anticipation des patch et du ballon.","Bonne anticipation de manière générale (place de travail, ...) malgré le peu d'informations sur la situation. Situation complexe très intéressante. Je suis contente car je n'ai pas ressenti de stress.","Bonne impression générale, très intéressant, j'ai pris du plaisir durant cette intervention.",MC 39,
|
||||
31,20.04.2023 09:34:12,64,MC 38 - Tamborini Sylvain,2,19.04.2023,,,,,,,2,"- oser essayer lors de situation de décompensation psychiatrique afin de trouver tes techniques afin d'aider le patient au mieux
|
||||
- essayer d'anticiper la suite après l'évaluation primaire et secondaire afin de gagner du temps sur la suite (relève, voie dans l'ambu...)","- connait ses limites
|
||||
- communication avec les patients
|
||||
- conduite sans signaux fluide
|
||||
- exclus rapidement les signes de gravité, fait des lien théories-pratique (risque de rebond lors d'anaphylaxie)
|
||||
","très bonne journée de travail avec Sylvain, on peut lui faire confiance sur ce qu'il fait et dit quand il ne se sent pas à l'aise",MC 20,
|
||||
32,20.04.2023 09:49:19,64,MC 38 - Tamborini Sylvain,2,19.04.2023,,,,,,,1,"- Oser faire mes expériences lors des prises en charge de patient psy.
|
||||
- Anticipation de la suite de prise en charge (par exemple TTT, destination)
|
||||
- Dialogue avec patient lors de gestes techniques","- Anamnèse FIP
|
||||
- Compréhension global de la situation (simple)
|
||||
- J'étais à l'aise dans la situation malgré le message d'alarme
|
||||
- Bon encadrement de Lucie qui permet d'être à l'aise dans la PEC",Les prises en charge m'ont beaucoup apporté. Très bonne collaboration avec Lucie. Je prends gentiment mes marques en équipage.,MC 38,
|
||||
33,20.04.2023 17:17:34,5,MC 39 - Addy Joanna,1,20.04.2023,VS23011096,Douleur abdo - maladie de Crohn,2,2,2,1,2,"- Recherche anamnestique globale, aller chercher toutes les pathologies abdominales même si cela semble être une crise de maladie de Crohn. Il faut exclure les autres diagnostiques différentiels
|
||||
- Palpation abdominale, favorise une seule palpation systématique en 9 cadrans plutôt que de revenir dessus palper une seconde fois un abdomen déjà douloureux
|
||||
- Transmission hospitalière doit être plus structurée, peut-être dans ce cas un ABCDE aurait été plus adapté","- Bonne connaissance des diagnostics différentiels des douleurs abdominales
|
||||
- Bonne évaluation systématique du patient, examen spécifique abdo bien maitrisé
|
||||
- Présentation (fait en débriefing) complète et bien structurée.",Bonne intervention avec plein d'apprentissage,MC 30,
|
||||
34,21.04.2023 08:50:16,11,MC 40 - Bourqui Elisa,1,16.04.2023,VS23010849,P1 Trouble de l'état de conscience,1,2,3,1,2,"Apprendre à gérer les témoins ainsi que les renforts présents sur site.
|
||||
Apprendre à t'imposer lors de tes PEC.","Ton primaire est bien structuré.
|
||||
Tu es restée calme tout le long de l'intervention.
|
||||
Tu as compris le problème principal et les enjeux importants dans cette PEC.","Bonne PEC avec un primaire structuré qui t'a permis de détecter rapidement le problème principal de ton patient. Ce qui en a permis une bonne stratégie d'intervention.
|
||||
En revanche, il faut que tu apprennes à t'imposer sur ce genre de PEC où il y a des témoins, des partenaires... car ta stratégie de PEC en souffre.",MC 11,
|
||||
35,21.04.2023 09:12:19,11,MC 40 - Bourqui Elisa,2,14.03.2023,,,,,,,2,"En tant que leader sur une intervention avec beaucoup d'intervenants (smur, stagiaire ambulancier + médecin, infirmière, médecin du cabinet médical) ne pas hésiter à bien répartir les rôles dès l'arrivée des renforts.
|
||||
En cas de D perturbé bien comprendre et demander son état neurologique habituel","Contact avec les patients, collaboration avec l'infirmière du CMS, délégation des ordres au second sur l'intervention au domicile.",2 interventions stables leadées par Elisa,MC 35,
|
||||
36,21.04.2023 09:24:48,1,MC 60 - Ballifard Julien,2,07.04.2023,,,,,,,2,"Lors des manœuvres et accès difficile, prendre aucun risque et ne pas hésiter à faire sortir le leader et prendre le temps (ce qu'on a fait)
|
||||
Mieux investiguer et creuser la plainte principale (hémorragie MI) avant de parler ""de tout et de rien""","Sur une intervention de suspicion de burn out, a bien tenu sa place de second où il fallait uniquement ""observer"".
|
||||
A entendu les alarmes
|
||||
Être au maximum à jour avec les Fips et papier en cas d'enchainement d'intervention (3 interventions enchainées en début de nuit)","Première nuit de Julien en binôme, la nuit s'est bien déroulée",MC 35,
|
||||
37,23.04.2023 20:34:47,1,MC 60 - Ballifard Julien,2,21.04.2023,,,,,,,2,"Conduite en urgence.
|
||||
Connaissance globale de ton rôle de TA.
|
||||
Approfondir tes connaissances théoriques et pratique.",Tu es à l'écoute des remarques que l'on te fait.,"Journée avec trois interventions en P1
|
||||
La conduite en urgence reste beaucoup trop hésitante, c'est bien d'être prudent mais tu hésites beaucoup trop et ça pourrait devenir dangereux.
|
||||
Il faut approfondir tes connaissances surtout dans les cas maladies afin de pouvoir anticiper sur ton leader ce qui permettrais de décharger celui-ci.
|
||||
Préparation de l'antalgie n'a pu être observée par mes soins mais il me semble que tu n'as pas eu trop de difficulté pour la préparation du médicament.
|
||||
",MC 11,
|
||||
38,25.04.2023 17:21:33,33,MC 62 - Losa Ralph,2,25.04.2023,,,,,,,2,"( 2 interventions S1 et P1)
|
||||
Ne pas hésiter à anticiper le monitorage quand le leader fait son évaluation et utiliser le temps ""libre"" quand le leader est occupé pour anticiper le déplacement d'un meuble en prévision de la sortie ou de demander les infos à la famille.","( 2 interventions S1 et P1
|
||||
Bonne maitrise des moyens techniques, Ralph écoute attentivement la remise infirmière lors d'une intervention à Malévoz et connait ainsi les pathologies du patient avant d'entrer dans la chambre, quittance les demandes du leader, attitude très professionnelle avec les patients et sais garder la bonne distance naturellement avec eux, ","Très bon niveau de début de formation, comprends rapidement les situations et applique les conseils rapidement.
|
||||
(remarque de MC17: je constate qu'il est toujours difficile pour les étudiants de s'adapter aux différents fonctionnements des collègues et je regrette que certains collègues demandes aux étudiants de ne rien anticiper tant qu'on ne leur demande rien car c'est l'opposé de la réalité lorsqu'ils travailleront en binômes. Je constate fréquemment que les étudiants doivent s'adapter au fonctionnement du collègue du jour plutôt que de pouvoir jouer le vrai rôle du second. A disposition pour en discuter si besoin.",MC 17,MC 20
|
||||
39,26.04.2023 22:22:14,33,MC 62 - Losa Ralph,2,25.04.2023,,,,,,,1,Spontanéité et anticipation dans mon travail de second. Avancer ce qui peut être fait dans les plus brefs délais ainsi que donner du rythme à mes gestes afin de conserver une vision globale et ne pas m'enfermer dans une vision tunnel en gardant en mémoire ma to-do list d' intervention. ,"Ma communication s'améliore grâce au CRM, et ma vision périphérique commence à évoluer. Je reste concentré et à l'écoute de ce que l'équipage me transmet.",J'ai passé un journée très intéressante et d'une très bonne dynamique. La diversité des interventions et le savoir-faire des équipages est passionnant à observer et très formateur. ,MC 62,
|
||||
40,27.04.2023 17:56:32,1,MC 60 - Ballifard Julien,2,17.04.2023,,,,,,,2,"Conduite : Comme demandé, je vous fait un retour sur ma journée avec Julien où mon évaluation est essentiellement ciblée sur la conduite et plus particulièrement sur la conduite en urgence.
|
||||
|
||||
Concernant la conduite sans signaux prioritaire, je n'ai pas de grand commentaire à faire, Julien est plutôt prudent, il active les indicateurs de direction et anticipe plutôt bien les freinages. Les améliorations possibles sont les entrées sur l'autoroute et les sorties de villages où il a tendance à ne pas assez accélérer afin de rentrer d'une manière fluide dans le trafic. J'ai également eu l'impression qu'il n'est pas encore très à l'aise avec les dimensions du véhicule.
|
||||
|
||||
Concernant la conduite avec signaux prioritaire, cela est beaucoup plus compliqué. Dès les premiers mètres, je me suis rendu compte qu'il y a de gros manquements en terme de dimensions du véhicule (sa passe où sa ne passe pas), de fluidité dans la conduite, roule trop lentement (les véhicules qui précédent ne se pousse pas), ne montre pas son intention (pas de décalage sur la gauche quand cela est possible est donc les véhicules venant en sens inverse ne freine pas), le leader peut guider mais il serait bien que le chauffeur ait une idée globale du lieux d'intervention (dans cette situation, je me suis retrouvé a devoir guider et en même temps coacher Julien ce qui a mener a faire un détour, heureusement sans conséquences pour le patient cette fois-ci). Finalement vu le diagnostique du patient nous devions nous rendre en urgence à Sion et avons finalement été dévié sur Martigny. Je dois donc dire qu'après avoir vu la conduite jusqu'au site d'intervention je n'était pas très tranquille sur le trajet. Globalement je pense que Julien doit vraiment pouvoir être coaché pour la conduite en urgence et qu'il faudrait qu'il puissent éventuellement faire quelques jours en troisième position et absolument axer ces journées sur la conduite. Dans l'idéal il faudrait également que ces journées se déroulent sur des journées où je suis présent. ",Marche arrière dans une rue relativement étroite,"Je pense que Julien à prit conscience de ces manquements et même si il y a beaucoup de points à améliorer et travailler, il n'y a pas eu de mise en danger.",MC 5,
|
||||
41,30.04.2023 15:42:42,64,MC 38 - Tamborini Sylvain,1,04.05.2023,VS23009885,Décompensation BPCO,1,2,3,1,1,Prise de décisions et définition de la stratégie. ,"Suivi du traitement, relationnel avec la patiente. Les algorithmes commencent à se mettre en place sans trop de réfléxions.",Prise en charge très instructive. Une ambiance de travail très agréable pour apprendre et progresser avec MC 34,MC 38,
|
||||
42,01.05.2023 11:06:35,1,MC 60 - Ballifard Julien,2,24.04.2023,,,,,,,2,"N'oublie pas de le bodycheck lors d'évaluation traumatique.
|
||||
Essaye d'exposer plus rapidement la plainte.","Bon rôle de second (de ce que j'ai pu observer, pas évident lorsqu'on est en binôme d'évaluer ce point là)
|
||||
Prise en charge de la globalité bonne, quelques points à peaufiner pour être plus à l'aise.","Bonne journée dans l'ensemble, bon investissement et à l'écoute des retours que je te donne . Essaye de te rattacher à ta systématique afin d'être plus à l'aise et de ne rien oublier.",MC 16,
|
||||
43,01.05.2023 11:09:58,64,MC 38 - Tamborini Sylvain,2,25.04.2023,,,,,,,2,"Hésite pas à te lancer dans les prises en charges, même si tu ne métrises pas encore totalement la matière. Peut-être que c'était la mauvaise nuit, mais travaille encore sur la pose de vvp afin d'être plus à l'aise et d'acquérir de l'expérience. ","Bonne connaissance du rôle de second, bonne évaluation traumatique et proposition de traitement adéquat. ","Bonne nuit dans l'ensemble, hésite pas de prendre un petit temps pour lire le dossier médical du patient lorsque la situation le permet, ainsi que les directives anticipées.",MC 16,
|
||||
44,01.05.2023 17:06:51,33,MC 62 - Losa Ralph,2,01.05.2023,,,,,,,2,Oser se lancer pour une évaluation primaire sur un patient stable,"Anticipe bien lorsqu'il est second (HGT, scope...)","Deux interventions ce jour, bonne compréhension globale des problématiques. Bonne communication avec les membres de l'équipage ainsi qu'avec les patients et l'entourage.
|
||||
Ralph est au tout début de son apprentissage, mais il arrive très bien à connaître sa place et ses limites.",MC 6,MC 19
|
||||
45,04.05.2023 10:09:45,64,MC 38 - Tamborini Sylvain,2,25.04.2023,,,,,,,1,"- Communication radio avec la centrale
|
||||
- Oser prendre des décisions malgré que je ne métrise pas les algorithmes parfaitement. Je peux toujours me reposer sur mon équipier et savoir rapidement si je me situe juste au niveau de la stratégie.",J'étais à l'aise pour les prises en charge que nous avons faites dans mes rôles. ,La dynamique est bien différente la nuit. Ce qui est très intéressant. Je dois encore prendre mes marques lors des nuits. ,MC 38 ,
|
||||
46,04.05.2023 23:53:12,79,MC 32 - Bonvin Aurélie,1,04.05.2023,VS23012116,S1 - Malévoz Pt inconscient,4,2,2,1,1,"Prendre le temps à la fin de mon primaire de discuter avec les témoins pour bien comprendre toute la situation.
|
||||
Ne pas oublier de verbaliser stable/instable.
|
||||
Accepter que je n'ai pas forcément de diagnostic mais traiter la clinique et si le patient n'a pas de problème au niveau A,B,C, on peut poursuivre l'intervention sans entamer de traitement ou de pose de VVP inutile.
|
||||
","Bon primaire rapide et adapté en fonction de la situation.
|
||||
Bon remplissage de FIP.
|
||||
Essayer de coacher le patient pour calmer sa respiration.
|
||||
Toujours présente avec le patient, explication de la suite de la prise en charge, lieux, destination.
|
||||
Bon rapport à l'infirmier, structuré et les infos importantes ont été énoncés.","Bonne intervention. Au message d'alarme j'aurais dis à mon collègue de prendre lui en charge car je n'étais pas sûre de moi, mais au final j'ai su gérer et je me suis sentie en confiance avec l'ambulancier et je me suis lancée. Donc contente de moi",MC 32,
|
||||
47,07.05.2023 08:41:25,79,MC 32 - Bonvin Aurélie,2,04.05.2023,,,,,,,2,"S'assurer d'avoir toutes les informations durant l'intervention, faire le point avec son collègue.
|
||||
Essayer de peaufiner ton auto-évaluation, être très précise. Par exemple comme discuté : détailler ce qui est bien dans ton relationnel (empathie, mise en confiance, calme, qualité d'écoute, bienveillance, ....)","Évaluation primaire et secondaire, adaptée à chaque situation et pertinente (maladie - trauma).
|
||||
Organisation de l'intervention et priorisation.
|
||||
Relationnel adapté, rassurant, mis en confiance à l'écoute et toujours présente.
|
||||
Transmission à l'hôpital (synthèse et pertinence)
|
||||
Auto-évaluation.
|
||||
Prend l'initiative de leader des interventions qui pour le moment sont hors de sa zone de confiance (psychiatrie).",Très bonnes interventions,MC 4,
|
||||
48,08.05.2023 16:00:37,79,MC 32 - Bonvin Aurélie,2,08.05.2023,,,,,,,2,-,-,"Journée du 08.05.23
|
||||
|
||||
Aurélie a demandé de ne pas être évaluée sur la journée car rencontre un stress important suite à sa première REA des derniers jours + le fait de travailler avec moi.
|
||||
|
||||
Une discussion suite à son ressenti post REA s'en est suivi. Le conseille d'en parler à son coéquipier de REA ou à un collègue ou à un pair débriefeur lui a été donné.
|
||||
|
||||
Aurélie a pu travailler et s'est sentie plus à l'aise au fils de la journée.
|
||||
|
||||
Une discussion entre collègue (pas dévaluation étudiant) s'est déroulée à la cuisine en lien avec la première intervention de la journée.
|
||||
|
||||
Aurélie a été informée qu'une note serait apportée au suivi des étudiants suite à sa demande de ne pas être évaluée, de son ressenti de stress suite à sa première REA et que son référent sera informé de la journée.",MC 29,
|
||||
49,08.05.2023 16:40:37,79,MC 32 - Bonvin Aurélie,2,08.05.2023,,,,,,,1,"C'était une première fois pour moi la filière AVC, j'ai discuté avec mon collègue afin de savoir quels éléments important il fallait avoir avant de passer l'appel.
|
||||
L'accès était difficile et je dois penser avant au matériel car l'ambulance n'était pas proche de nous et il y avait énormément de boue. Donc si possible matériel minimum.
|
||||
En cas de DRS; faire d'office un 12 D et non pas seulement qu'un 3D.
|
||||
Penser que je peux utiliser la même tubulure pour Nacl et Perfalgan.","Bonne intervention, complexe car plusieurs problèmes à traiter.
|
||||
J'ai réagi au moment où le patient me parle de DRS à commencer un contrôle en pensant au 3D.
|
||||
Surveillance régulière du patient, réévaluation des douleurs et signes et symptômes","J'ai demandé ce jour à mon collègue de travailler en tant que collègue et non pas être évaluée ou donner des objectifs de la journée au vu de la dernière intervention qui s'était mal passée.
|
||||
J'ai discuté ce matin avant de débuter la garde du fait que j'avais eu une intervention compliquée (première REA) et que j'étais hyper stressée pour cette journée. À savoir si le problème vient de mon intervention ou le fait d'être stressée de travailler avec lui.
|
||||
L'intervention s'est bien déroulée. Je n'ai pas ressenti de stress important et j'ai pu discuter durant la prise en charge avec lui et écouter ses conseils.
|
||||
Il a été étonné en bien que je lui demande si je pouvais prendre en charge la première intervention. Pour moi il est important de me confronter aux choses que je ''n'aime pas'' et me confronter aux interventions qui sont difficiles pour moi.
|
||||
Je pense avoir bien géré mon stress et mon intervention malgré ne pas encore avoir eu la théorie sur les AVC.
|
||||
Je me sens soulagée car ce matin en arrivant, je pensais ne pas avoir les compétences pour ce métier et tout remis en question. ",MC 32,
|
||||
50,09.05.2023 10:50:15,79,MC 32 - Bonvin Aurélie,1,09.05.2023,VS23012388,P2 - Trauma Dls MSD dans un EMS,2,1,1,1,1,"- Ne pas oublier de faire une palpation du rachis même si la patiente est dans un EMS et qu'elle a été relevée et remise au lit.
|
||||
- Lors de la prise du rapport, faire un retour à mon collègue dès que j'arrive vers lui (était déjà auprès de la patiente)
|
||||
- Penser à regarder directement les MI lors de douleurs au bassin. J'y ai pensé mais un peu plus tard.
|
||||
- Penser à demander plus rapidement si la patiente est sous anticoagulant pour avoir l'info plus rapidement( infirmière n'était pas au courant du ttt de la patiente).
|
||||
- J'ai un peu de peine lors de la fin de mon primaire (si pas de traitement à débuter ou quelque chose à traiter) à donner l'impulsion pour la suite de la prise en charge (par exemple demander le relevage). ","- Bon primaire. Je n'ai pas fait systématiquement car plusieurs infos arrivaient en même temps mais au final j'ai eu toutes les informations.
|
||||
- Bonne recherche et questions sur le fait de la chute. Délégation à mon collègue de faire une glycémie.
|
||||
- Bon questionnement sur l'état de conscience de la personne en demandant comment la patiente était habituellement. Orientée TEP. Questionnement de l'état de santé de la patiente, urine, état fébrile ces derniers jours qui auraient pu induire une chute.
|
||||
- Bonne argumentation de non pose de VVP (antalgie supportable par la patiente même si paraissait crispée. Transport rapide jusqu'à l'Hôpital et route non sinueuse). La patiente avait une langue rôtie et un pli cutané positif mais débuter une réhydratation en ambulance n'était pas optimale pour moi.
|
||||
- Éléments à contrôler en cas de TC énoncés à mon collègue.
|
||||
- Bonne remise infirmière.","Bonne intervention, stable et simple. Je me suis sentie en sécurité avec mon collègue. Je commence à avoir les arguments de pourquoi je fais les choses et pourquoi je ne les fait pas. ",MC 32 ,
|
||||
51,09.05.2023 11:04:09,79,MC 32 - Bonvin Aurélie,1,09.05.2023,VS23012388,"Chute durant la nuit, dlrs huméral D avec déformation.",2,1,1,1,2,"Chute durant la nuit, tu as pu avoir que très peu d'information du team infirmier (avec des discours discordant entre les infirmières) -> pense à faire un tête aux pieds complet pour exclure d'autres fractures.","Bonne réflexion sur les possibles péjorations de la pte, tu sais où mettre ton attention.
|
||||
Bonne stratégie, tu sais argumenter tes choix.","Bon intervention, bravo",MC 48,
|
||||
52,11.05.2023 23:57:20,79,MC 32 - Bonvin Aurélie,1,11.05.2023,VS23012568,P1 - Douleur thoracique,1,2,1,1,1,"- Penser à demander comment est la douleur (constante, en pic, brûlure...)
|
||||
- Penser à dire au patient de ne plus boire ni fumer ce soir.","- Pas de vision tunnel car patient connu pour plusieurs interventions du même type
|
||||
- Bonne recherche de questions et anamnèse
|
||||
- Bon primaire, systématique et complet
|
||||
- Bonne délégation de gestes à mon coéquipier
|
||||
- Bonne évaluation de l'ECG
|
||||
- Prise de décision de laisser le patient sur site avec bonnes explications de la situation, écartement de problème cardiaque au patient.
|
||||
- À l'écoute du patient concernant son angoisse, pas de jugement. ","Intervention stable et simple. Je n'ai pas eu de vision tunnel. Les explications que j'ai données au patient étaient justes et simples. J'ai proposé au patient des moyens de se détendre, appel à un ami pour lui tenir compagnie. Je pense avoir été rassurante pour le patient et à son écoute. Il est parfois difficile pour moi de prendre la décision de ne pas transporter le patient car je n'ai pas encore toutes les connaissances mais bonne discussion avec mon collègue qui était en accord avec cela et le patient aussi. ",MC 32,
|
||||
53,12.05.2023 05:28:18,79,MC 32 - Bonvin Aurélie,1,11.05.2023,VS23012568,"Annonce : Respiration anormale. Une fois sur site -> pt anxieux (connu pour anxiété, multiples PEC par notre service), OH chronique + consommation cannabis.",1,2,1,1,2,"Le pt, tu as fait un baisemain et de passer la main sur la joue, n'hésite pas à dire non et à le recadre (selon le type de pt calmement ou plus directement).","- On a parlé du pt avant d'arriver sur site. Tu n'es pas tombé dans un effet tunnel, tu as vraiment été chercher et exclure les diagnostics différentiels.
|
||||
- Très bonne gestion du patient, tu as su rassurer le pt et lui expliquer la situation. Au final bon choix stratégique de le laisser sur site.","Très bonne intervention, bravo",MC 48,
|
||||
54,17.05.2023 09:01:17,40,MC 28 - Michaud Samuel,1,21.04.2023,VS23011217,suspicion convulsion avec chute,1,2,2,1,2,"- recherche anamnestique large, ne pas hésiter à chercher toutes les causes potentielles d'un malaise avec chute et investiguer les différentes causes de convulsion. P.ex: faire un 3 brins sur un malaise avec PC même si on suspecte une convulsion.","- Evaluation systématique
|
||||
-. prise de décision et rythme
|
||||
- Contact patient pour le convaincre de venir avec nous malgré son refus",Bonne intervention,MC 30,
|
||||
55,17.05.2023 09:07:44,5,MC 39 - Addy Joanna,1,20.04.2023,VS23011133,Tachycardie enfant 8 ans,1,2,4,2,2,"- Communication: Lors de détection d'une erreur d'administration d'un médicament par un équipier SMUR, le dire directement soit à tous soit au leader pour permettre une correction rapide.","- Bonne détection de la limite des compétences permettant que je reprenne le lead très rapidement.
|
||||
- Efficacité dans les actions demandées, scope, 12D, Patch, prepa VVP et pose hélico.",Bonne intervention,MC 30,
|
||||
56,24.05.2023 14:52:19,33,MC 62 - Losa Ralph,1,24.05.2023,VS23013418,P3 du domicile en médecine,3,2,1,2,2,"- Observer l'environnement du patient afin de facilité l'objectif de cette PEC: d'anticipation
|
||||
- Connaître le matériel de l'ambulance. Après 3 mois, Ralph n'est pas sûr de l'emplacement du matériel. Pour exemple, la bouteille d'O2 de réserve.","- Investi dans la prise en charge.
|
||||
- Manipulation du brancard adaptée
|
||||
- Quittance et semble comprendre les informations","Ralph s'est investi pour fournir une bonne prestation. Dans l'ensemble on peut être satisfait de sa PEC en tant que second.
|
||||
Personnellement, je suis déçu que Ralph ne connaisse pas l'emplacement du matériel dans l'ambulance malgré les explications des premiers jours, les rappels sur l'importance de la connaissance du matériel ces derniers mois.
|
||||
Ce jour, j'ai proposé à Ralph de refaire le tour du matériel de l'ambulance et de répéter cela jusqu'à ce qu'il soit alèze avec l'emplacement du matériel.
|
||||
Dès que cet objectif sera atteint (juillet/août), il pourra me présenter ses progrès. ",MC 29,
|
||||
57,29.05.2023 11:53:22,11,MC 40 - Bourqui Elisa,1,28.05.2023,VS23013716,patient transféré au CHUV pour suspicion hémorragie interne artère sus claviculaire,4,2,3,1,1,"- rythme de l'intervention à l'hôpital de départ, infirmière fait une longue remise mais S1 donc patient doit être acheminé rapidement -> prioriser les infos nécessaires et pertinentes puis rapidement conditionner le patient pour le trsprt, quitte à ''secouer'' le personnel soignant sur place
|
||||
- contrôler d'avoir toutes les infos de l'anamnèse sur les faxmed (dans ce cas, pas de liste de médicaments sur la feuille transmise), seulement transmission orale de l'infirmière
|
||||
- sécuriser le pousse seringue... -> trouver une méthode pour la prochaine fois","- demande avis médical par rapport au statut hémodynamique du patient -> amines? pendant le transport si TA<90mmHg
|
||||
- j'exprime ne pas me sentir à l'aise avec l'utilisation du pousse-seringue -> on trouve une solution pour que je n'aie pas à le manipuler durant le trsprt + demande si batterie tient la charge pdt le transport
|
||||
- sécurité personnelle pendant le transport lors de manipulations
|
||||
- surveillance monitoring patient + clinique ","Mise à part le rythme du début de l'intervention qui aurait pu être plus soutenu en raison de l'urgence, j'ai anticipé une éventuelle décompensation hémodynamique du patient en communiquant avec la médecin et j'ai pu exprimer la limite de mes compétences par rapport au pousse-seringue. La communication avec le personnel soignant de l'hôpital de départ était bonne, avec des boucles fermées et une bon leadership à mon sens. ",MC 40,
|
||||
58,29.05.2023 14:04:07,11,MC 40 - Bourqui Elisa,1,26.05.2023,VS23013580,"patiente présente des épigastralgies depuis quelques jours qui ne cèdent pas -> a effectué un contrôle médical aux urgences la veille qui a détecté des ESV + BBG à l'ECG, radiographies abdo RAS, prise de sang RAS. Rentre à domicile avec médicaments IPP, motilium. Ce jour, douleurs ne cèdent pas donc appelle le 144. Patiente hémodynamiquement stable",1,2,1,1,1,"- ne pas faire d'examen juste pour ''se rassurer'' -> réfléchir à la nécessité pour le patient et pour l'évaluation
|
||||
- attention au non verbal (je fais des gros yeux lors de l'évaluation du 3 brins)","- je ne me suis pas reposée sur le fait que la patiente a déjà eu des contrôles médicaux dont un 12D la veille -> anamnèse complète de la situation pour chercher à comprendre le problème actuel et exclure des menaces vitales immédiates (infarctus, dissection, trouble du rytme, problèmes resp)
|
||||
- bonne synthèse et compréhension de l'évènement (patiente parle beaucoup et va dans tous les sens)","Intervention simple mais qui nécessite de bien creuser l'anamnèse pour exclure un problème cardiaque aigu. Patiente prend beaucoup de place, j'ai réussi à la canaliser pour obtenir les réponses dont j'avais besoin, tout en gardant un bon relationnel. ",MC 40,
|
||||
59,30.05.2023 13:48:00,5,MC 39 - Addy Joanna,1,28.05.2023,VS23013675,Agression par lame trauma perforant du thorax et hémothorax,1,1,3,1,1,"Je dois améliorer ma connaissance du secteur de monthey (nom des rues, ...)
|
||||
|
||||
Je dois améliorer ma place de travail dans l'ambulance malgré l'utilisation de beaucoup de matériel.
|
||||
|
||||
J'aurais pu optimiser le temps en m'occupant de l'hémostase pendant mon collègue préparait le brancard.
|
||||
|
||||
Je dois prendre le temps de bien me focaliser afin de réussir mes VVP du premier coup.","La collaboration interpartenaires s'est bien passée (police et SMUR). J'ai pensé à évaluer notre sécurité (gilets par lame, rester hors de l'appartement).
|
||||
|
||||
La stratégie (load and go) et les traitements (02, couverture, 2x VVP, TXA, antalgie) étaient adéquats.","Bonne impression générale, je suis fière de ma première prise en charge de traumatisme perforant car j'ai su mettre en pratique ce que j'avais appris en formation.",MC 39,
|
||||
60,01.06.2023 22:19:46,79,MC 32 - Bonvin Aurélie,2,29.05.2023,,,,,,,2,N'oublie pas les clés :),"Conduite très adaptée en urgence que ce soit à vide ou avec un patient.
|
||||
Très bon rôle de second avec anticipation et logique dans les gestes et les priorités.
|
||||
|
||||
En tant que leader, bonne gestion de l'intervention et prise en charge de la globalité de la situation. C'est très bien et important de prendre en compte l'aspect social (vit seul, aide CMS ..) Aurélie a su s'adapter aux situations (appel pour AVC et au final la patiente nous attend devant l'immeuble debout avec le sourire), Aurélie n'a pas perdu ses moyens et a bien su gérer son intervention.
|
||||
|
||||
Bon remplissage des FIP avec vocabulaire adaptés et rapidité dans le remplissage.
|
||||
|
||||
Continue comme ça ! :):)",Très bonne journée et beaucoup de plaisir durant cette journée !,MC 27,
|
||||
61,02.06.2023 11:55:13,64,MC 38 - Tamborini Sylvain,1,02.06.2023,VS23014048,P2 PAFA pour Malévoz,2,2,1,1,2,"En gagnant en confiance en toi, tu pourras être plus faire et plus clair dans tes questions et tes réponses.","Calme, relationnel adéquat avec le pt, ose poser des questions. ",Très bonne intervention de la part de Sylvain qui découvre le milieu psychiatrique et ses particularités. Possède déjà de bonnes connaissances à ce sujet que ce soit sur les pathologies et ses procédures légales.,MC 29,
|
||||
62,04.06.2023 09:33:51,64,MC 38 - Tamborini Sylvain,1,03.06.2023,VS23014147,"Chute, suspicion de fracture col du fémur",2,1,1,1,1,"- Verbalisation complète de la stratégie de l'antalgie
|
||||
- Être plus factuel dans mon anamnèse
|
||||
- Confiance en moi
|
||||
","- Communication avec l'équipier pour le relevage
|
||||
- Relationnel avec la patiente
|
||||
- Réévalutation de la patiente",Je me suis senti bien lors de cette intervention. La fluidité de mes décisions concernant la suite de prise en charge s'améliore avec l'expérience. ,MC 38,MC 30
|
||||
63,04.06.2023 23:43:17,11,MC 40 - Bourqui Elisa,1,03.06.2023,VS23014182,"AVP au rallye du Chablais, pilote perd la maitrise de son véhicule à environ 100km/h, voiture fait un tonneau et se retrouve dans un talus sur le toit. Co-pilote sort par lui-même de la voiture mais pilote incarcéré avec douleurs cervicales et déficit neuro-sensitivo-moteur des 4 membres. ",1,1,2,1,1,"- pose de VVP plus tôt avant d'être coincée derrière le patient et que ce soit le médecin qui doive la faire -> s'imposer auprès des pompiers et prioriser
|
||||
- prendre du recul sur la gestion globale de l'intervention (impossible si dans la voiture avec le patient tout le long de la prise en charge)
|
||||
- trouver ma place en tant que leader ambulance lorsque patient est sorti de la voiture et que le médecin se met à la tête ","- Réévaluation régulière du patient
|
||||
- anticipation et discussion avec collègue avant de me rendre dans la voiture près du patient
|
||||
- bonne communication avec les différents partenaires, points de situation réguliers avec l'équipier
|
||||
- communication et relationnel avec le patient ","je suis restée auprès du patient tout le long de la désincarcération car il nécessitait des soins et de l'accompagnement, mais je n'avais pas la vision d'ensemble de l'intervention -> cela a nécessité des points de situation réguliers avec l'équipier et les partenaires mais ce n'était pas clair pour moi comment allait se passer l'extraction jusqu'au dernier moment",MC 40,
|
||||
64,06.06.2023 08:27:11,79,MC 32 - Bonvin Aurélie,2,29.05.2023,,,,,,,1,"Lors de suspicion AVC, ne pas oublier de demander si la patiente a consommé de l'alcool.
|
||||
Lors de suspicion AVC, penser à demander à la patiente si elle aurait eu un évènement stressant, une contrariété ou autre problème psychologique, qui pourrait faire mimer des symptômes d'absence.","Détresse respiratoire: j'ai effectué un bon primaire ave délégation des gestes techniques à ma collègue.
|
||||
Bonne recherche anamnestique auprès du patient, j'ai ciblé le problème principale qui n'était pas vraiment celui du message d'alarme.
|
||||
J'ai pensé à demander au patiente s'il avait de l'oxygène à domicile et combien de litres il avait.
|
||||
Bon moyen de relevage (accès pas immédiat à l'ambulance, j'ai opté de faire marcher le patient avec notre soutient jusqu'à l'ambulance).
|
||||
Lors du transport, saturation en baisse, j'ai observé l'état général du patient et grâce à la clinique, j'ai décidé de ne pas mettre de l'O2 en discussion avec ma collègue.
|
||||
|
||||
Suspicion AVC; la patiente nous attendait au bord de la route, je n'ai pas eu de vision tunnel mais j'ai effectué un primaire complet avec un G-FAST afin de tout exclure.
|
||||
Délégation des gestes techniques à ma collègue durant mon primaire.
|
||||
|
||||
Pour cette journée, mes transmissions infirmières étaient structurées et complètes. Bon remplissage de FIP durant le trajet tout en discutant avec les patients. A l'écoute des patients, j'ai su les rassurer et me montrer sûre de moi.
|
||||
Je suis satisfaite de mes prises en charge et je me suis sentie en confiance avec ma collègue. ","Bonnes interventions. Je me sens de plus en plus en confiance lors de mes prises en charge. J'arrive à déléguer des gestes tout en effectuant mon primaire. Mise en avant du problème principal lors de la remise infirmière.
|
||||
",MC 32,
|
||||
65,07.06.2023 00:52:12,11,MC 40 - Bourqui Elisa,1,03.06.2023,VS23014365,"AVP Rallye du Chablais. Véhicule fait un tonneau. Co-pilote sort de lui-même, désincarcération de deux heures pour le pilote qui présente une tétraplégie sur site.",1,1,4,1,2,S'équiper correctement en terme d'EPI avant de s'approcher du véhicule encore non sécurisé. A noter qu'Elisa s'est rendue sur site avec la Medical car et que quand l'alarme à sonné tout est parti très vite. Je suis arrivé 1 minute après et je tiens à préciser qu'Elisa n'est pas entrée dans le véhicule sans l'équipement adéquat. ,"Rapidité d'exécution sur les besoins du patient (aspiration), collaboration multipartenaires, attitude calme et rassurante envers le patient ","Elisa à très bien géré cette intervention et à eu une attitude très rassurante pour le patient, elle à également effectué les gestes nécessaire qu'il était possible de faire au vu de la situation complexe de la position du patient et de la place à disposition. La communication au niveau du binôme ambulancier ainsi qu'avec les différents partenaires était calme et de bonne qualité.",MC 5,
|
||||
66,07.06.2023 01:04:25,11,MC 40 - Bourqui Elisa,1,03.06.2023,VS23014182,AVP Rallye du Chablais. Deux patient dont un incarcéré. ,1,1,1,1,2,Aucun,"En arrivant sur site s'est assurée que le co-pilote qui s'est extrait seul de l'habitacle aille bien. Attitude rassurante, durant le transport à pris le temps de discuté et de distraire le patient avec les centres d'intérêt de celui-ci et n'as pas trop divulgué d'information alarmantes sur l'état du pilote. ","Bonne prise en charge, pas de geste technique à effectué. Transport pour contrôle à HRC Rennaz en lien avec la cinétique de l'accident et les légères plaintes du patient. ",MC 5,
|
||||
67,07.06.2023 01:18:57,11,MC 40 - Bourqui Elisa,1,30.05.2023,VS23013880,"Homme 35 ans, OH +++, stupéfiant ?, agité +++, insultes et menaces verbales, police sur site",1,2,2,1,2,Attention à la distance avec le patient même si il est menotté et en décubitus ventral. Il peut te craché dessus ce qu'il à fait à plusieurs reprises dans l'ambulance.,Elisa est restée très calme malgré les insultes et menaces incessantes. Bonnes prise d'informations au près de la famille présente sur place. Collaboration avec police et smur.,"Bonne prise en charge car la situation avec le patient était très compliquée de part son agitation et son attitude globale. Bonne discussion avec le smur et la police de la stratégie à adopter afin de pouvoir sédater le patient pour le transport depuis Martigny jusqu'à l'hôpital de Sion.
|
||||
Bonne surveillance.",MC 5,
|
||||
68,07.06.2023 18:06:12,64,MC 38 - Tamborini Sylvain,2,07.06.2023,,,,,,,2,"Exclure une prise en charge trauma lors d'une chute dans ton primaire sur site.
|
||||
Remise infirmière: proposition de mettre les mots-clés sur une feuille vierge pour t'aider lors de la remise.
|
||||
Apprendre à réussir à cadrer gentiment un patient lorsque celui-ci parle trop et que l'on a besoin qu'il réponde à nos questions.","Bravo pour avoir osé prendre en charge une P1!
|
||||
Bonne recherche anamnestique.",Deux interventions sur cette journée et que tu as leadé. Pas de geste technique à faire mais les prises en charge ont nécessité de devoir être curieux pour exclure tes diagnostiques différentiels chose que tu as bien faite. ,MC 7,MC 38
|
||||
69,04.07.2023 21:56:55,79,MC 32 - Bonvin Aurélie,2,03.07.2023,,,,,,,1,"Penser à discuter avec le personnel infirmier au domicile du patient et la fille afin de comprendre l'entier de la situation de vie du patient.
|
||||
Lors du trauma perforant, penser à enlever le garrot que le patient a mis lui-même (attache plastique) pour éviter les lésions neurologiques.
|
||||
Je dois penser à m'assurer que la police a été appelée pour accident de travail.
|
||||
","1. Primaire adapté lors de l'évaluation traumatique avec plaie au niveau du poignet/pouce. Bonne recherche de sensibilité et motricité de tous les doigts de la main.
|
||||
2. J'ai fait rapidement mon primaire en voyant le patient allongé sur son lit qui donnait une mauvaise impression que j'ai pu exclure rapidement.
|
||||
3. Anamnèse difficile avec un patient, j'ai repris chaque étape une après l'autre afin de m'assurer d'avoir compris juste les informations.
|
||||
|
||||
Première journée avec une stagiaire, j'ai pu lui expliquer quelques fonctionnements, lui expliquer le primaire et répondre à ses questions.
|
||||
Bon remplissage de FIP rapide.",Je pense que c'était une bonne journée avec différentes interventions que j'ai su gérer de façon autonome. Bonne conduite du véhicule avec marche arrière compliquée,MC 32,
|
||||
70,07.07.2023 22:20:45,79,MC 32 - Bonvin Aurélie,1,07.07.2023,VS23016807,AVC signe évident,1,2,2,1,1,"Lorsque j'arrive sur place et qu'il y a un First (Sylvain) j'écoute ce qu'il a à me dire à propos de son évaluation, mais je ne me suis pas sentie sécurisée car je n'ai pas fait de primaire de suite sur place pour avoir moi-même les informations. Première fois où j'ai ce genre de situation avec un First et je retiens pour la prochaine fois de faire ma propre évaluation de suite en arrivant.
|
||||
|
||||
Ne pas oublier de garder la trousse médicament proche de moi pour anticiper les convulsions car suspicion AVC.
|
||||
|
||||
Penser à éventuellement demander au 144 de prévenir l'hélico de notre intervention afin qu'il soit déjà prêt à partir. Nous avons discuté machine ou pas, puis après discussion avec le second, le temps d'attendre sur l'hélico alors que le patient était déjà sur le brancard, nous avons opté pour faire le transport en ambulance.","Bon appel précis à la filière AVC.
|
||||
Très bonne transmission au Déchoc, structurée, rapide et précise.
|
||||
Je ne me suis pas laissée déstabiliser par le médecin au déchoc qui m'a posé la question des médicaments et j'ai répondu que le patient n'en prenait aucun et qu'il a reposé la question au patient. Quand le médecin m'a fait la réflexion entre ''...'' qu'il devait être transféré au CHUV car il a un cancer ORL et qu'une lyse n'est pas possible sur sion en raison de son cancer, j'ai pu lui confirmer que cette information avait été annoncée lors de l'appel à la filière et que nous n'avons pas fait une machine car le temps que l'hélico arrive sur place, nous étions déjà en route et le temps de notre trajet a été de 35 minutes.
|
||||
","Bonne intervention. Je me suis sentie un peu déstabilisée par la remise du First. Cependant, j'ai appris de mon erreur et je ferai mon primaire moi-même complet la prochaine fois.
|
||||
",MC 32,
|
||||
71,10.07.2023 05:50:23,79,MC 32 - Bonvin Aurélie,1,07.07.2023,VS23016807,Déficit neurologique avec hémisyndrome complet D,1,2,2,1,2,"Ne pas hésiter à reprendre la systématique d'évaluation, en cas de doute.",Attitude calme avec des prises de décision rapide et pertinentes. Structurée dans l'ensemble de la prise en charge. Gestes techniques précis. Excellente communication avec tous les intervenants.,C'était une excellente prise en charge avec un leadership affirmé. Attitude rassurante et professionnelle auprès du patient et de la compagne. Précise lors de la transmission au déchoc. ,MC 14,
|
||||
72,10.07.2023 17:02:30,79,MC 32 - Bonvin Aurélie,1,10.07.2023,VS23017038,"connu hypertendu, homme 75 ans, vertiges",1,2,3,1,2,"- venir plus rapidement avec une glycémie pour les vertiges
|
||||
- expliquer plus rapidement la problématique principale (hypertension) dans le rapport infirmier car est venu en dernier","- aurélie a bien travaillé ces diagnostics différentielles sur une intervention qui n'était pas simple avec des vertiges, une sensation de malaise ainsi qu'une hypertension mais non traitable
|
||||
- délègue rapidement ce qu'elle veut pour la relève
|
||||
- fait des retours constructifs à son encadrant et dit sa stratégie de traitement et d'intervention",une très bonne intervention avec une beau savoir-être avec le patient et sa femme,MC 20,
|
||||
73,10.07.2023 17:06:31,79,MC 32 - Bonvin Aurélie,1,10.07.2023,VS23017092,P1 - DRS,1,2,3,1,1,Ne pas hésiter à poser les patchs de défibrillation car j'ai hésité et j'ai demandé l'avis du SMUR ,"Arrivée sur site, Dr Kirchner était présent et je prenais en charge, il attendait sur ma collègue pour me faire le rapport et je me suis imposée et lui demandant 2 fois s'il pouvait me faire le rapport de ce qu'il avait. J'ai écouté le rapport du médecin mais je voulais avoir moi-même les info du patient donc j'ai requestionné le patient
|
||||
12 D en place, analyse rapide et sur élévation du ST. J'ai pu énoncer que je voulais donner l'Aspirine 500 mg, puis pas d'Isoket car inférieur et que j'allais préparer la VVP et la Morphine le temps qu'elle aille chercher la chaise pour le relevage.
|
||||
Une stagiaire était présente avec nous sur l'intervention, J'ai délégué qu'elle note sur un papier les heures auxquelles j'ai passé les médicaments. Bonne pose de VVP, rapide.
|
||||
SMUr arrivé par la suite, le Dr à fait sa transmission. Dans l'ambulance, j'ai pu discuter avec le SMUR et garder ma place en tant que leader.
|
||||
L'intervention s'est bien déroulée. Bonne recherche anamnestique, bon questionnement au patient (heure du début des douleurs, éléments déclenchant, respirodépendante, reproductible à la palpation). Explication à son épouse qui semblait un peu dépassée par les évènements. Bon remplissage de FIP rapide et infos complètes.",Je me suis sentie à l'aise durant cette intervention. Je connais bien mon algorithme et très bonne entente avec ma collègue. Je me suis sentie écoutée et elle a été très bienveillante,MC 32,
|
||||
74,10.07.2023 17:09:44,79,MC 32 - Bonvin Aurélie,1,10.07.2023,VS23017057,P1 - Accouchement en cours,1,2,4,2,1,"Connaitre mieux le matériel du sac pédiatrique
|
||||
Pouvoir anticiper le matériel lors d'accouchement mais je n'ai pas encore eu la formation école, ceci n'est pas une excuse mais je vais y travailler","Bonne communication en boucle fermée pour m'assurer de comprendre ce que je devais faire et après avoir préparé la demande du leader, j'ai reconfirmé ce que j'avais préparé.
|
||||
Bon second selon mes connaissances scolaires et terrain.
|
||||
Bonne communication radio et collaboration avec le SMUR et 2ème ambulance.","Premier accouchement, j'étais très stressée car aucune idée du déroulement et de l'anticipation. Durant le trajet, ma collègue m'a dit ce que je de devais préparer et le job a été fait. ",MC 32,
|
||||
75,10.07.2023 17:13:39,79,MC 32 - Bonvin Aurélie,1,10.07.2023,VS23017057,"accouchement sur site, physiologique, bébé avec bonne adaptation",1,2,4,2,2,- ,"- aurélie connait ses limites et les exprimes rapidement
|
||||
- écoute ce qu'on lui demande et pose des questions si ce n'est pas clair
|
||||
- reste à disposition lorsque des moments sont plus calme
|
||||
- connait son matériel et sait le préparer","une intervention difficile à évaluer car j'étais énormément concentré sur la patiente et l'accouchement mais aurélie a préparé tout ce que je lui avais demandé dans l'ambulance (place réa néonatale). aurélie a bien collaboré avec l'infirmière smur en se partageant les tâches et s'identifiant clairement afin qu'elle puisse la guider aussi.
|
||||
|
||||
Aurélie a été tout à fait adaptée par rapport à son regard de la situation et à son comportement bienveillant et encourageant pendant l'accouchement.
|
||||
|
||||
elle a pris le temps de pouvoir observer après avoir fini ses tâches afin d'apprendre un maximum de la situation. dans la salle d'accouchement, est restée pour observer la délivrance et voir à quoi ressemble un placenta.
|
||||
|
||||
une intervention tout à fait agréable de travailler avec Aurélie avec sa disponibilité et sa motivation de travailler et d'apprendre. malgré le stress qu'elle exprime en début et fin d'intervention ne le fait pas ressentir à la patiente ainsi qu'aux intervenants sur site
|
||||
|
||||
la conduite en feu bleu est maitrisée, ne prend pas de risque mais prend sa place sur la route
|
||||
|
||||
je ne mets pas de point à améliorer car elle n'a pas vu la pédiatrie et l'obstétrique et que son savoir-être et faire des geste connues pour elle sont clairement acquis",MC 20,
|
||||
76,10.07.2023 17:17:25,79,MC 32 - Bonvin Aurélie,1,10.07.2023,VS23017038,P1- DRS ,1,2,1,1,1,"- Penser à faire une TA différentielle
|
||||
- Pas oublier d'énoncer dès le début de ma transmission que le patient est connu pour HTA et la première tension sur site (est arrivé un peu tard dans la transmission). Contrôler si éventuels signes de méningite. ","Bonne recherche et questionnement anamnestique. En arrivant j'ai tout de suite demandé au patient comment étaient les douleurs thoraciques (il n'en avait pas) J'ai ensuite pu prendre le temps de faire mon primaire correctement. J'ai pu exclure certains diagnostics différentiels. Primaire rapide et complet. Bonne analyse du 3D puis 12 D dans l'ambulance avec confirmation de la collègue. Durant le déplacement sur le site, j'ai pu anticiper les traitements éventuels et confirmer les valeurs cibles avec ma collègue et les dosages. Explications de pourquoi je voulais pas poser de VVP (pas de nécessité immédiate).
|
||||
durant l'intervention, j'ai fait un retour régulier à ma collègue de la situation et de la clinique.
|
||||
Bonne remise infirmière, structurée et rapide. Bon guidage pour arriver sur site à ma collègue. ","Bonne intervention, j'ai été rapide et j'ai pu énoncer à ma collègue ma stratégie d'intervention. Je me suis sentie en sécurité et à l'aise durant cette intervention. Je ressens l'amélioration et la confiance en moi qui s'installe.",MC 32,
|
||||
77,10.07.2023 17:24:35,79,MC 32 - Bonvin Aurélie,1,10.07.2023,VS23017092,DRS avec stemi hypertendu,1,2,3,1,2,- aspirine peut être donnée plus rapidement mais c'est un détail car est venue directement après l'ecg,"- délégation à l'infirmier smur de préparer des médicaments pendant qu'elle fait des examens ainsi qu'un rapport au smur, collaboration avec médecin smur
|
||||
- diagnostique rapidement le stemi et applique rapidement ses algorithmes qu'elle connait avec ses contre-indications (nitrés)
|
||||
- rapidité dans les gestes techniques
|
||||
- aurélie explique rapidement la stratégie voulu qui est tout à fait adapté
|
||||
- SMUP pas vraiment collaborant sur site (kirchner) donne les informations aux comptes gouttes, aurélie n'a pas perdu de temps et c'est assez rapidement fait son idée du patient en faisant les examens et son anamnèse directement auprès du patient malgré le smup qui est son MT car n'apporte pas énormément d'information","très bonne intervention, c'était un cas école où l'on peut remarquer qu'aurélie maitrise ce type d'intervention.
|
||||
|
||||
sur la journée je dirais qu'aurélie est quelqu'un avec qui il est agréable de travailler car exprime ses besoins, doutes, limites, craintes... et ceci donne envie de lui faire confiance. Elle remarque rapidement les petits trucs à faire pour que le leader soit confortable et reste à disposition. les gestes sont effectués efficacement et de manière sécuritaire. sa conduite en feu bleu est fluide, elle ose prendre la place sur la route en ne prenant pas de risque.
|
||||
|
||||
une journée très intéressante avec des interventions que l'on ne fait pas tous les jours mais elle a réussi à garder son calme et rester adaptée.",MC 20,
|
||||
78,13.07.2023 17:57:15,33,MC 62 - Losa Ralph,1,13.07.2023,VS23017375,P2 OM crise de goutte,2,2,1,2,2,Evaluer à l'alarme si il est judicieux de prendre en charge ou seconder une intervention de ce site. Que pourra tu tirer profit de cette intervention?,"Conduite souple avec anticipation et sécuritaire.
|
||||
Relevage efficace.",Rôle de second atteint sur ce type d'intervention. A part conduite et relève aucune autre action n'a pu être délégué.,MC 29,
|
||||
79,15.07.2023 14:03:17,79,MC 32 - Bonvin Aurélie,2,14.07.2023,,,,,,,1,"- Le stress s'est fait ressentir par l'ambulancier dès le départ d'intervention (première fois pour moi que je tourne avec un étudiant et avec Ralph) mais il est redescendu au moment ou nous sommes arrivés vers la patiente.
|
||||
- Ne pas poser plusieurs fois la même question à la patiente (était asymptomatique et j'ai demandé plusieurs fois si elle avait des céphalées ou nausées)
|
||||
- Ma transmission peut être plus courte. J'ai dis tout ce que j'avais pas ex: pas de ptose labiale, pas de déviation du regard, mais un GFAST négatif aurait suffit (je le fais pour me rassurer et ''prouver'' que ces examens ont été effectués mais cela viendra avec l'expérience et la confiance en moi.
|
||||
- En tant que second, difficile pour moi d'écouter ce que Ralph faisait à l'arrière, me concentrer et essayer de réfléchir à tout ce qui a été fait et rajouter des compléments.
|
||||
- Lors de ma PEC, faire un retour de mon primaire et ma stratégie d'intervention à Ralph et non pas à l'ambulancier (mais j'ai encore besoin d'être rassurée sur mes choix et ma stratégie)","Journée en binôme avec Ralph étudiant 1ère année:
|
||||
P1 crise hypertensive en tant que leader:
|
||||
- Un de mes objectifs de stage est de déléguer mes demandes à mon collègue sans anticipation de sa part, avec Ralph c'était très intéressant car j'ai du tout déléguer ce que je voulais et précisément.
|
||||
- Sur le trajet, j'ai regardé mes algorithmes afin d'être sûre des valeurs cibles tensionnelles et du dosage du ttt.
|
||||
- Bon primaire adapté sur le terrain.
|
||||
- Bonne prise d'info auprès de l'infirmière.
|
||||
- Bonne communication en boucle fermée pour m'assurer qu'il puisse bien comprendre ce que je voulais.
|
||||
- Bonne transmission aux urgences.
|
||||
- Bon remplissage de FIP.
|
||||
- Bonne recherche d'éléments à inclure ou exclure lors de crise hypertensive.
|
||||
- Bonne collaboration avec le second, échanges constructifs et pas de discussion inutile.
|
||||
- J'ai oser m'imposer auprès de la patiente sans attendre l'avis de l'ambulancier quand elle a demandé si elle pouvait fumer une cigarette avant de partir.
|
||||
|
||||
P2, Chute la veille avec TC et nausées vomissement en tant que second:
|
||||
- J'ai du écouter les questions que Ralph posait à l'infirmière et compléter avec mes connaissances scolaire, c'était une première pour moi et j'ai du beaucoup me concentrer afin d'écouter ses questions et faire des compléments.
|
||||
- Bon retour d'intervention avec des améliorations et des conseils personnels que j'ai pu donner à Ralph et qui sont confirmées par l'ambulancier.
|
||||
- J'ai écouté sa remise infirmière et j'ai pu compléter les points manquants
|
||||
|
||||
Durant la journée, on a pris un moment avec Ralph pour la préparation des médicaments en injection, j'ai pu lui expliquer quelques dilutions et lui donner des astuces.","Journée très intéressante, qui m'a fait encore plus prendre confiance en moi. Je dois essayer la prochaine fois de ne pas me retourner vers l'ambulancier pour confirmer ma stratégie et mes choix de PEC mais en discuter avec l'étudiant. La façon de faire de la journée (nous laisser travailler à deux) a été très instructive et m'a fait développer d'autres compétences et affirmer ma position et mes choix. Avec le temps, l'expérience et l'augmentation de mes connaissances, je pourrais travailler et coacher seule l'étudiant.
|
||||
Super journée et je me suis sentie en confiance et bien entourée.",MC 32,
|
||||
80,17.07.2023 21:37:52,33,MC 62 - Losa Ralph,2,14.07.2023,,,,,,,1,"Dans mon rôle de second, je dois améliorer mon stress en début d'intervention afin de garder une vision globale et ne pas m'enfermer dans une vision tunnel, ne pas partir trop vite, trop fort et au final garder un certain équilibre dans le rythme de l'intervention.
|
||||
|
||||
Dans mon rôle de leader, je dois continuer à driller mon primaire, secondaire, et ma remise afin d'avoir une solide base sur laquelle m'appuyer afin d'être complètement disponible à ma collecte ou transmission d'information. Je dois plus rester dans mon rôle et déléguer le plus possible, afin de me concentrer sur le patient et sur les informations qui me sont données. Je dois collecter le maximum d'information avant mon départ et ne pas compter sur le trajet pour élaborer mon anamnèse mais en avoir une idée déjà claire dès le départ du Home.","Dans mon rôle de second, ma conduite et adaptée à la situation et ma communication avec mon leader en boucle fermée passe bien. J'effectue ce qui m'est demandé avec attention, et la collaboration est fluide.
|
||||
|
||||
Dans mon rôle de leader, l'ordre de ma remise s'améliore même si cela reste fluctuant. J'ose plus me lancer et avec l'aide de mon second j'apprends beaucoup de la stratégie d'intervention avant de partir. ","Bonne journée dans l'ensemble, je suis satisfait ma prestation à mon niveau",MC 62,
|
||||
81,19.07.2023 11:51:12,79,MC 32 - Bonvin Aurélie,1,19.07.2023,VS23017879,"Crise d'angoisse laisser sur site: Aurélie Leader, Ralph équipier",1,2,1,1,2,"Prise en compte de l'entourage, exclusion de tout le diagnostic adaptée à la situation de la famille","Posture de leadership, connaissance physio. path.","Une grande partie de ton travail actuel est de trouver des outils pour avoir confiance en tes décisions et recherches :
|
||||
Solutions proposées :
|
||||
- Séparer les objectifs durant les interventions dans un premier temps et les ré-insérer par la suite (exemple : guidage et préparer le protocole au départ)
|
||||
- Intégrer les protocoles de l'entreprise pour fonctionner par exclusion et en arriver à une décision de prise en charge
|
||||
- Se donner la chance de faire faux!
|
||||
- Tenter le truc fou dans la vie privée qui te prouvera que tu es capable! ;-)",MC 26,
|
||||
82,19.07.2023 11:52:57,79,MC 32 - Bonvin Aurélie,1,19.07.2023,VS23017879,P1 - Respiration anormale,1,2,1,1,1,"- Prendre confiance en moi, Oser prendre les décisions pour la suite du ttt (j'ai pensé au médecin traitant mais j'ai de la peine à me positionner et énoncer cette stratégie)
|
||||
- Essayer de moins stresser en partant lors de la première intervention
|
||||
- Connaissance du secteur (j'ai dû guider avec MAPS Ralph et je n'ai pas pu durant ce temps-là me concentrer sur mes algorithmes.","-J'ai rapidement pu cadrer la patiente et la coacher pour la respiration
|
||||
- Bon primaire systématique et rapide
|
||||
- Bonne délégation au second
|
||||
- Bon leadership
|
||||
- Attitude calme et rassurante auprès de la patiente et du second (Ralph)
|
||||
- Bonne recherche d'exclusion ou d'inclusion (douleur thoracique)
|
||||
- Bon appel au MT avec anamnèse rapide et précise pour délégation de ttt","Je pense avoir eu une bonne intervention. Tourner avec un étudiant m'aide petit à petit à prendre confiance en moi. Je dois travailler là-dessus et ce sera un de mes prochains objectifs.
|
||||
J'ai bien gardé ma place de leader tout au long de l'intervention et j'ai apprécié cette intervention.",MC 32,
|
||||
83,19.07.2023 17:33:10,79,MC 32 - Bonvin Aurélie,1,19.07.2023,VS23017907,P2 - chute avec TC et PC,2,1,1,1,1,"- Ne pas oublier la palpation du crâne en cas de TC
|
||||
- Plus avoir confiance en moi quand je décide de ma stratégie de relevage et m'affirmer
|
||||
- Réfléchir seule et m'affirmer quand je souhaite appeler la fille du patient pour prendre des infos ","- Retour fait à l'étudiant et à l'ambulancier
|
||||
- Meilleure prise de décision pour le relevage
|
||||
- Bonne collaboration avec la Police sur place et bonne prise d'informations
|
||||
- Bonne remise infirmière et FIP rapide et claire
|
||||
- Bonne collaboration avec l'étudiant qui était second
|
||||
- Bonne recherche anamnestique et exclusion d'éléments ","Magali: Avis général sur la journée : Bonne journée avec deux étudiants en binôme avec une belle évolution et prise en compte au fur et à mesure des interventions ! Aurélie est très exigeante envers elle, mais en est consciente :-)
|
||||
Aurélie: bonne intervention, je dois vraiment prendre confiance en moi. Essayer d'énoncer 1 seul objectif précis par intervention et travailler dessus",MC 32,MC 26
|
||||
84,20.07.2023 13:27:41,40,MC 28 - Michaud Samuel,1,20.07.2023,VS23017959,Dlrs abdo / angoisse / hyperventilation femme de 87ans,1,2,2,1,2,Ne pas te perdre dans tes réflexions en oubliant ce qui se trouve autour de toi.,"Bon primaire avec les bonnes recherches qui en découlent.
|
||||
Tu restes calme et posé.","Bonne PEC avec un bon accompagnement de la patiente, des bonnes recherches, de bons diagnostics différentiels.
|
||||
Attention lorsque des patients demande beaucoup d'attention et pas mal de réflexion de ne pas délaisser les témoins.",MC 11,
|
||||
85,20.07.2023 16:34:45,40,MC 28 - Michaud Samuel,1,20.07.2023,VS23017997,"Homme 61ans, tachycardie + DRS",1,2,3,1,2,Attention à tout transmettre les informations en ta possession lors des transmissions.,"Calme.
|
||||
Organisation.
|
||||
Connaissance.","Très bonne PEC ou tu as identifié rapidement le problème principal et mis en place les actions nécessaires pour cette situation.
|
||||
Très bonne collaboration avec le SMUR ou tu as su maintenir ton leadership, proposer et anticipé.",MC11,
|
||||
86,22.07.2023 01:45:21,79,MC 32 - Bonvin Aurélie,1,21.07.2023,VS23018138,p1 - DRS HypoTA,1,2,1,1,1,"- Ne pas oublier de demander si Allergie avant de déléguer au second l'Aspirine
|
||||
","- Bon primaire complet et rapide
|
||||
- J'ai décidé de coucher le patient dès notre arrivée car mauvaise impression
|
||||
- Aspirine demandée rapidement au second
|
||||
- Bonne prise d'info rapides auprès de la famille pour faire ma transmission lors de l'arrivé du SMUR.
|
||||
- Transmission SMUR rapide et structurée
|
||||
- Bonne recherche d'exclusion, EP
|
||||
- Bonne décision de relevage sans aide du second","Bonne intervention, rapide structurée, lead conservé durant toute l'intervention",MC 32,
|
||||
87,24.07.2023 11:30:02,79,MC 32 - Bonvin Aurélie,1,21.07.2023,VS23018138,DRS,1,2,2,1,2,"Ne pas oublier de poser les questions sur les allergies, contre-indications etc. avant de débuter un traitement.","Décision de coucher le patient très rapidement (mauvaise impression générale initiale), décision de donner l'aspirine PO très rapide, explore rapidement les bonnes pistes (DRS, EP, etc.), bonne collaboration avec le SMUR.","Bonne intervention, le niveau attendu à ce stade de la formation me semble largement atteint (aussi sur les autres inter de la même nuit)",MC 13,
|
||||
88,27.07.2023 15:33:59,79,MC 32 - Bonvin Aurélie,1,27.07.2023,VS23018653,P1 - Problème psychiatrique - Intention de se suicider - patient agressif,1,2,1,1,1,"- Penser à ma sécurité (ne pas marcher devant le patient)
|
||||
- Utiliser les bons termes et avoir des connaissances de vocabulaire (pénitencier, prison préventive...)
|
||||
- Lors de la transmission, essayer de plus raconter une histoire que d'expliquer les faits. ","- Bonne posture cadrante avec le patient durant toute l'intervention
|
||||
- Bonne relation de confiance effectuée avec le patient
|
||||
- Pensé à avoir écarté le chien en arrivant dans le domicile
|
||||
- J'ai pu énoncer ma stratégie et la décision du lieu de destination (SPAUL) sans l'aide de mon collègue",Je suis contente de ma prise en charge car je n'ai pas eu beaucoup d'intervention de ce genre. Je pense avoir une bonne relation avec les patients grâce à mon expérience. J'ai pu affirmer mes choix de PEC et l'intervention s'est très bien déroulée. Quelques points d'amélioration auxquels je serai attentive lors de la prochaine PEC.,MC 32,
|
||||
89,28.07.2023 14:14:44,64,MC 38 - Tamborini Sylvain,1,24.07.2023,VS23018318,ACR avec ROSC,1,2,4,1,2,"Essayer de mieux suivre l'administration de médicaments afin d'avoir un maximum d'information pour le remplissage de la FIP. Soit profiter du trajet pour faire un récapitulatif avec le médecin, soit prendre note des infos au moment de la transmission du SMUR au déchoc.","Bonne gestion de l'ensemble de l'intervention malgré de multiples partenaires (SMUR, SMUP, pompiers...) Bonne gestion de l'entourage du patient.","Première réa en tant que leader. Bonne systématique, bonne répartition des rôles aux différents intervenants.",MC 6,
|
||||
90,29.07.2023 10:25:26,64,MC 38 - Tamborini Sylvain,2,17.07.2023,,,,,,,1,"- Connaissance des moyens externes sociaux
|
||||
- Bien récapituler les informations recueillies afin de prendre confiance en moi pour la prise de décisions dans ce genres de situations
|
||||
- Ne pas hésiter à prendre position par rapport à la situation ","- Soutien des collègues
|
||||
- Expériences par rapport à ce genre de PEC
|
||||
- Connaissances des ressources sociales de l'hôpital","Sur deux interventions, la stratégie d'intervention m'a mis en difficulté, la première pour un laissé sur site et la deuxième pour une situation qui sort de l'ordinaire. Le fait d'être démuni par rapport à la deuxième situation au niveau social et de la pathologie du patient (Alzheimer) m'ont fait beaucoup réfléchir sur le rôle de l'ambulancier dans ce genre de situation et les limites de nos moyens. ",MC 38,
|
||||
91,30.07.2023 10:40:47,64,MC 38 - Tamborini Sylvain,1,29.07.2023,VS23018860,P1 Altération du niveau de conscience,1,2,3,2,2,Confort conduite avec pt et équipage,"Très bonne prestation de la part de Sylvain en terme assistance sur cette P1. Calme, précis et efficace.","Comme discuté avec Sylvain très bonne intervention.
|
||||
|
||||
Conduite avec bon placement sur la route, bon rythme avec fluidité. Les traversées de carrefour doit se faire à faible allure surtout lorsque le feux est rouge pour nous. Attention à la vitesse du véhicule de 4.2to sur route mouillée. Les distance de freinages sont rallongées pour nous et les véhicules venant en face. Attention aussi avec les changements de direction brusques sous la pluie. Donc prudence tout de même, garde ta fluidité et ton anticipation, la vitesse n'est pas un gain de temps probant. Avec un pt, de plus instable et un équipage qui doit régulièrement se détacher pour effectuer des actions, il faut adopter une conduite souple.
|
||||
|
||||
Sylvain possède déjà un bon niveau technique et de bonnes connaissances théoriques pour son cursus.
|
||||
|
||||
Bravo, continue comme ça ! ",MC 29,
|
||||
92,02.08.2023 18:12:30,40,MC 28 - Michaud Samuel,1,02.08.2023,VS23019211,Réaction anaphylactique,1,2,3,1,2,Garde ta systématique ABCDE et n'oublie pas de regarder tes VAS surtout sur une difficulté respiratoires liées à une réaction anaphylactique (œdèmes?),"Bonne gestion globale de l'intervention, tu as tout de suite ciblé la problématique et entrepris le traitement adapté. Bonne collaboration avec les partenaires (SMUP + SMUR)",Continue comme ça!,MC 6,
|
||||
93,08.08.2023 09:09:05,79,MC 32 - Bonvin Aurélie,1,04.08.2023,VS23019388,ACR,1,2,3,1,1,"- Essayer de me concentrer sur ce que me dit le second pour le retour des infirmières du CMS qu'il a eu car je n'ai pas pu emmagasiner toutes les infos.
|
||||
- I-Gel bien en place? légère résistance lors de la ventilation et bruits de gargouillis","- Bon coaching des First pour le massage, compter les cycles
|
||||
- Bonne réévaluation du rythme tous les 5 cycles
|
||||
- Pose I-Gel
|
||||
- Discussion avec le coeur wallis post-inter qui me semblait pas au top, proposition d'aide post-intervention.","Première intervention en tant que Leader sur un ACR. Je me suis concentrée sur le coaching des first pour le massage et je suis restée à la tête durant toute l'intervention. Je n'ai pas réussi à tout retenir ce que m'a dit le second par rapport aux infos qu'il a eu des infirmières sur site. Je pense avoir gardé ma place durant l'intervention et j'ai eu une grande charge cognitive et avec l'expérience, cela ira mieux et je pourrais faire moi-même la transmission au SMUR. ",MC 32,
|
||||
94,10.08.2023 11:00:03,72,Bernal Julie,1,10.08.2023,VS23019850,"Personne désorientée,, insalubre, dernière preuve de bonne santé il y a 3 jours",2,2,1,3,2,"Les techniques de relevages sont encore en phase d'acquisition (brancard, chaise, ...) et ont encore besoin d'être pratiquées afin qu'elle puisse se sentir à l'aise.","Elle est pro-active, elle essaie et se remet en question, elle fait de son mieux pour correspondre aux critères de qualité de l'entreprise.","Julie se met beaucoup de pression, elle se pose beaucoup de questions quant au niveau qu'elle est censée avoir à ce stade de la formation. Elle semble avoir besoin d'un cadre et des objectifs clairs quant à ce qui est attendu d'elle afin de pouvoir gagner en confiance et se concentrer sur un élément à la fois.",MC 39,
|
||||
96,11.08.2023 16:06:45,72,Bernal Julie,2,11.08.2023,,,,,,,1,"- pour la préparation des médicament, ne pas oublier le double contrôle, connaître les dilution et préparation (au cours de l'apprentissage des algorithmes)
|
||||
- reprendre confiance en moi pour les interventions en tant que ""second""","- pose d'une voie dans l'ambulance en roulant
|
||||
- préparation des médicaments (geste, asepsie)","j'ai eu du plaisir aujourd'hui bien que le rôle d'observateur était prévu, j'ai pu réaliser des gestes techniques. Je me sent a l'aise avec l'emplacement du matériel dans l'ambulance. [Avis pour la journée du 11.08 à 16h00 pour les deux interventions de 11h et 13h environ.]",MC 66,
|
||||
97,11.08.2023 23:15:23,79,MC 32 - Bonvin Aurélie,2,10.08.2023,,,,,,,2,Dans un contexte de douleurs abdos avec nausées et vomissements : pense à demander si le patient a été en contact avec des personnes malades. Et demander s'il y a du sang dans les selles. ,"Très bonne prise en charge de douleurs abdominales chez un jeune sportif de 22 ans : Très bonne recherche anamnestique, compréhension de la situation, prise en compte des besoins et des souhaits du patient (pas d'antalgie opiacés car suivi doping), prise en compte de la compagne. Bravo très bien !
|
||||
|
||||
Très bonne prise en charge avec prise en compte de la situation de la patiente : vivant seule au domicile, proche aidant les voisins, contexte de SV pour 1 semaine. tu as très bien su rassurer la patiente :)
|
||||
|
||||
En tant que seconde, bonne anticipation sur ce qui était nécessaire et bonne conduite :)
|
||||
|
||||
Beaucoup de plaisir durant cette nuit de travail. ",-,MC 27,
|
||||
97,11.08.2023 23:15:23,79,MC 32 - Bonvin Aurélie,2,10.08.2023,,,,,,,2,Dans un contexte de douleurs abdos avec nausées et vomissements : pense à demander si le patient a été en contact avec des personnes malades. Et demander s'il y a du sang dans les selles. ,"Très bonne prise en charge de douleurs abdominales chez un jeune sportif de 22 ans : Très bonne recherche anamnestique, compréhension de la situation, prise en compte des besoins et des souhaits du patient (pas d'antalgie opiacés car suivi doping), prise en compte de la compagne. Bravo très bien !
|
||||
|
||||
Très bonne prise en charge avec prise en compte de la situation de la patiente : vivant seule au domicile, proche aidant les voisins, contexte de SV pour 1 semaine. tu as très bien su rassurer la patiente :)
|
||||
|
||||
En tant que seconde, bonne anticipation sur ce qui était nécessaire et bonne conduite :)
|
||||
|
||||
Beaucoup de plaisir durant cette nuit de travail. ",-,MC 27,
|
||||
98,16.08.2023 11:44:11,79,MC 32 - Bonvin Aurélie,2,10.08.2023,,,,,,,1,"- Ne pas oublier de demander s'il y a du sang dans les selles.
|
||||
- Me renseigner si le patient a été en contact avec des personnes malades durant ces derniers jours","- J'ai pensé à demander si la copine du patient avait mangé les mêmes aliments que lui
|
||||
- Bonne connaissance des médicaments à prescrire (Paracétamol, Buscopan et Primpéran)
|
||||
- Bonne prise d'info auprès du témoin
|
||||
- Bonne réévaluation des douleurs durant le trajet","Bonne intervention, j'ai osé énoncer ce que je voulais, je me suis sentie en confiance",MC 32,
|
||||
99,16.08.2023 17:38:02,79,MC 32 - Bonvin Aurélie,2,16.08.2023,,,,,,,2,"L: clarifier/préciser les attentes du pt, être claire dans les demandes et s'assurer qu'elles ont été comprises.
|
||||
|
||||
S: protéger le matériel contre les liquides biologiques et soigner la conduite avec le pt","L: choisi et propose des solutions alternatives au pt lors que le trsp en ambulance n'est pas nécessaire, adapte sa PEC et son approche en fonction de la situation
|
||||
|
||||
S: propose et assiste le Leader dans la PEC","Bonne journée dans la globalité où Aurélie a PEC une pt pour un NACA 1 laissé S/S, secondé une P2 chute à domicile avec TC PC tout cela en accompagnant une étudiante. Je sens une progression dans ses PEC et une prise de confiance.
|
||||
|
||||
Elle doit restée attentive sur le travail hors PEC qui concerne le retour du véhicule et son alimentation sur secteur ainsi que le respect des mesures de nettoyage qui sont demandé au sein de l'entreprise.",MC 29.,
|
||||
100,16.08.2023 17:44:05,72,Bernal Julie,2,16.08.2023,,,,,,,2,-,-,"Julie a cherché et a obtenu des réponses sur le cadre de son stage et les met en application. Elle cherche vite à faire beaucoup de chose et peu s'y perdre.
|
||||
|
||||
La journée s'est bien passée, elle a pu profiter d'observer la majorité du temps vu la présence d'une deuxième étudiante au sein de l'équipage.",MC 29.,
|
||||
101,16.08.2023 18:21:21,79,MC 32 - Bonvin Aurélie,2,16.08.2023,,,,,,,1,"En tant que leader : P2 chute - Dls cheville
|
||||
- Penser à demander ce que nous pouvons faire actuellement pour la patiente
|
||||
- Quand mon collègue me parle, je dois être attentive et le regarder (discussion dans l'ambulance au retour)
|
||||
|
||||
En tant que second - p2 chute TC
|
||||
- Penser à mettre un moltex sur le brancard (plaie tête)","Leader:
|
||||
- Primaire adapté à la situation
|
||||
- Proposition de prendre un taxi ou autre moyen alternatif que l'ambulance
|
||||
- Bonne suggestion de mettre une poche de glace et surélever le membre
|
||||
|
||||
Second P2 - Chute TC Stable:","Bonne intervention en tant que leader, j'ai réussi à me faire confiance et à oser proposer des moyens alternatifs et stratégie.
|
||||
en tant que second, je n'ai pas fait beaucoup de choses donc bonne inter simple.
|
||||
Je me sens toujours un peu stressée par rapport à mon collègue du jour mais cela va mieux",MC 32,
|
||||
102,16.08.2023 18:27:57,72,Bernal Julie,2,16.08.2023,,,,,,,2,"- Penser à mettre un moltex sur le brancard avec la plaie à la tête (mais je n'y ai pas pensé non plus)
|
||||
- Penser à vraiment bien définir ta place lors des interventions (second, leader, observation)","- Bonne prise d'initiative de s'occuper de la femme du patient même si tu avais décidé d'observer uniquement ce jour.
|
||||
- Tu as retenu des infos et trucs et astuces de tes dernières interventions, que tu as pu mettre en pratique aujourd'hui et améliorer ces points (positionnement du brancard)","Tu étais ce jour en tant qu'observatrice mais tu as pu intervenir durant l'intervention et t'occuper de la femme du patient car tu as vu que cela était compliqué, donc bonne initiative.
|
||||
Défini vraiment ta place lors des interventions et justifie de pourquoi tu veux être second ou leader (sur inter trauma second car potentiellement des gestes techniques à effecturer)
|
||||
C'est bien de venir devant avec moi durant le trajet comme ça je peux t'expliquer ce que je fais, Rescue Track et autre. Bonne intervention et je me réjouis de tourner avec toi durant ton stage",MC 32,
|
||||
103,17.08.2023 09:38:06,72,Bernal Julie,2,16.08.2023,,,,,,,1,"- Pour mon objectif du jour, à savoir ""rôle du second"", commencer à prendre en compte les témoins lors des intervention où j'interviens.
|
||||
- toujours un peu de peine à avoir du plaisir quand je sors en intervention avec l'équipage avec lequel j'ai perdu confiance, mais je vois de l'évolution vers le mieux, grâce aux discussions avant et après les interventions.","- les interventions se passent bien et je pense commencer à assurer les relevage efficacement et à anticiper les demandes du leader. Je pense aussi être à l'aise avec la connaissance du matériel et des ambulances.
|
||||
- la communication est bonne avec les équipages, notamment au niveau des feed-back, je trouve des points qui ont déjà été améliorés au fils des interventions. Je ressens la bienveillance des équipages. ","Je pense que lors de ce début de troisième semaine de stage, j'ai enfin réussi à trouver mes marques et savoir ce qui est attendu de moi en entreprise à ce moment de la formation. Je pense être sur le bon timing pour l'atteinte de mes objectifs à court terme. La place de troisième étant difficile à trouver, j'essaie à présent de me proposer pour le rôle de second ou de leader (pas encore effectué) si la situation le permet. L'entretien avec mon référent m'a été favorable.",MC 66,
|
||||
104,18.08.2023 08:13:03,72,Bernal Julie,2,17.08.0023,,,,,,,1,"Pas encore assez cadrante avec un patient non collaborant (première expérience), je n'ai pas osé ""l'empoigner"" pour l'inviter à s'installer sur le brancard après 10 minutes","Lead d'une intervention secondaire s3, j'ai amélioré ma prise de notes à la transmission et la pertinence de mes questions par rapport à la dernière que j'ai effectué. J'ai pensé à demander les directives anticipées","Je me suis sentie à l'aise sur cette intervention. Une seule intervention ce jour. Intégration avec le dicastère hygiène commencé au cours de la journée pour faciliter mon intégration à venir. J'ai trouvé pertinent de commencer, car cela permet de mieux connaitre les procédures déjà pendant ce stage donc être plus efficace.",MC 66,
|
||||
105,19.08.2023 10:20:24,72,Bernal Julie,2,16.08.2023,,,,,,,2,Remarque du second faite après l'intervention : se propose pour aller chercher la chaise pour le relevage avant d'avoir consulté le leader (éventualité d'un relevage couché pas encore exclue selon les éléments de l'anamnèse en cours). ,Rôle de collaboration avec le second (qui participe aussi). Pose des questions par anticipations pendant le trajet pour pouvoir se positionner au mieux durant l'intervention. Sur place prend l'initiative de scoper la patiente durant l'anamnèse. Ensuite s'organise avec le second pour se répartir les rôles. ,"Bonne intervention, la prochaine fois le second devrait vraiment en retrait pour que Julie puisse au mieux pratiquer son rôle dans des conditions réelles dans les situations stables.",MC17,
|
||||
106,21.08.2023 07:57:16,11,MC 40 - Bourqui Elisa,2,18.08.2023,,,,,,,2,Connaissance et pratique du rôle de second.,Bon contact avec la pte de la 2ème intervention avec prise d'initiative.,"Julie s'emble se mettre beaucoup de pression malgré les situations stable simple.
|
||||
|
||||
Beaucoup de choses/situations sont exprimées comme nouveaux pour elle.
|
||||
|
||||
J'ai pu observer que si une tâche lui est déléguée et qu'elle est laissé en autonomie sans supervision direct elle s'emble beaucoup plus fluide, autonome et prend même des initiative ( demande d'installer la patient sur le brancard et de rentrer dans l'ambulance + monitorage exécuté sans peine et débute sur son initiative la protection d'une plaie superficielle et un sampler) .",MC 29.,
|
||||
107,21.08.2023 08:59:30,72,Bernal Julie,1,18.08.2023,18.08.2023,lead d'une intervention trauma personne demente ne parlant pas fr,2,1,1,1,1,prendre en compte tous les documents ne paa oublier de les copier avant de les remettre a l'infirmière ,relationnel et transmission ,"la communication avec la patiente etait agreable, plaisir de leader une intervention ",MC 66,
|
||||
108,27.08.2023 07:40:17,33,MC 62 - Losa Ralph,2,24.08.2023,,,,,,,2,Oser se lancer et sortir de sa zone de confiance tout en profitant du soutien de l'encadrant lors de cette première année.,"Bon contact avec le patient
|
||||
Prend l'initiative de préparer et approcher le brancard auprès du patient, informe et se renseigne auprès du L avant de mobiliser le patient","Ralph nous a accompagnée sur les 2 dernières intervention de la journée du 24.08. Il s'est montré proactif et a mis en application les précédents conseilles reçus.
|
||||
|
||||
De plus sur la journée, il est venu me chercher pour montrer qu'il avait travaillé ses connaissances sur l'emplacement du matériel dans l'ambulance et les différents sacs. Ralph a pris le temps de travailler cet objectif avant de le démontrer. Il a aussi choisi le moment adapté dans la journée pour le démontrer. Il a pu démontrer qu'il connaissait l'emplacement du matériel.
|
||||
|
||||
Bravo pour le travail fourni et continu dans cette direction !",MC 29.,
|
||||
109,07.09.2023 09:06:18,79,MC 32 - Bonvin Aurélie,1,04.09.2023,VS23022242,P1 - DRS - Cardioversion,1,2,4,2,1,"- Penser à l'Aspirine plus rapidement dès l'annonce de DRS bien que nous sommes partis sur l'algorithme TDR
|
||||
- Pose de 12 D postérieur (que j'ai confirmé avec l'ambulancier d'AG)
|
||||
- Première intervention de ce type, lors de la prochaine, je pourrais plus anticiper en fonction de mes connaissances et de l'expérience.","- Pose de 3 D directement sans attendre la demande du leader.
|
||||
- Bon encadrement du fils du patient qui est arrivé durant l'intervention, explications simples et rapides de la situation et je lui ai dit de se mettre dans la chambre jusqu'à ce que sa maman, puis explications à la maman dès son arrivée
|
||||
- Très bonne communication en boucle fermée, double contrôle préparation médic et dilution.
|
||||
- Je pense avoir été rapide et efficace dans mes gestes et bonne adaptation du rythme de l'intervention
|
||||
- Bonne collaboration avec le SMUR
|
||||
- Bon contact rassurant avec le patient tout au long de l'intervention.",Bonne intervention. Je me suis reposée sur les demandes du leader. J'ai effectué à nouveau les calculs de dilation post-intervention dans le calme et c'est clair pour moi. Je me suis sentie bien entourée et en confiance lors de cette intervention. Première intervention instable complexe pour moi. ,MC 32,
|
||||
110,07.09.2023 09:11:18,79,MC 32 - Bonvin Aurélie,1,06.09.2023,VS23022369,"P2 - Dls abdo, contsipation",2,2,1,1,1,"Penser à demander si la patiente à toujours les règles ou rapport sexuel ces derniers jours
|
||||
Je pense que cette intervention était plutôt simple et à refaire, je ferais de la même façon","- Bon relationnel avec la patiente, cadrante avec la patiente qui était légèrement agressive et connue bipolaire. J'ai posé des questions simples et précises car elle ne voulait pas communiquer avec nous.
|
||||
Était agacée envers nous et ne voulait pas qu'on la touche, j'ai pu lui expliquer les raisons de nos gestes avec calme et compréhension de sa part.
|
||||
Bonne collaboration avec ma collègue
|
||||
Bonne transmission rapide et complément lorsque la patiente était dans une autre pièce.
|
||||
- Pas de vision tunnel, car connue bipolaire
|
||||
","Bonne intervention, je prend plus confiance en moi sur ces interventions et j'arrive à cadrer les gens sans que mon collègue doive intervenir",MC 32,
|
||||
111,08.09.2023 09:32:30,79,MC 32 - Bonvin Aurélie,1,04.09.2023,VS23022242,TV avec pouls,1,2,4,2,2,"En tant que leader de cette intervention, je n'ai pas pu observer pleinement Aurélie. L'encadrement d'étudiant en 2ème position sur ce genre d'intervention est quasiment impossible. Cependant je n'ai pas remarqué de lacune ou de points nécessitant une amélioration.","Bon positionnement en tant que second, a répondu correctement à toutes mes demandes. Nous avons du faire plusieurs gestes techniques qui ont tous été exécutés avec brio par Aurélie. Lorsqu'elle avait un doute elle a verbalisé son interrogation et j'ai pu lui donner les compléments nécessaires. ",Il est difficile d'encadrer un étudiant en 2ème position correctement à mon sens. Sur des interventions complexes encore plus. Le leader ou le second a déjà beaucoup de choses à faire et à penser. Cependant l'intervention s'est très bien déroulée. Elle a fait preuve d'écoute et de réactivité. Une intervention très intéressante pour une étuidante. ,MC 16,
|
||||
112,08.09.2023 18:10:00,79,MC 32 - Bonvin Aurélie,2,07.09.2023,,,,,,,2,"Rédaction FIP, nuancer l'anamnèse tout en restant factuel sans interprétation.","Calme, structurée, avance par étape, cherche une solution lorsqu'elle rencontre une problématique, arrive à poursuivre sa PEC après résolution de la problématique. ",Belle progression de la part d'Aurélie lors de ces deux journée du 07-08.09.23. 6 interventions au total. 3L 3S. Construit son rôle professionnel par l'enseignement scolaire mais aussi au travers de sa pratique professionnelle en prenant le meilleure de chaque intervenant. Sait s'adapter au situation tout en se rappelant des précédentes interventions qui lui permettent d'améliorer ses PEC. ,MC 29.,
|
||||
113,08.09.2023 18:17:59,79,MC 32 - Bonvin Aurélie,2,08.09.2023,,,,,,,1,"1ère journée:
|
||||
Penser à téléphoner au médecin répondant en cas de doute sur laisser le patient ss.
|
||||
Connaissance du fait que je peux demander une délégation au médecin répondant pour du mida pour détendre la patiente.
|
||||
|
||||
2ème journée:
|
||||
C'était la première fois que je faisais poser un hélico et je n'avais pas toutes les informations. Demande d'aide au SMUR présent, j'ai appris et vivement la prochaine fois!","1ère journée:
|
||||
Bonne prise d'informations, j'ai insisté auprès du personnel médical de me faire voir le patient rapidement car il voulait me donner un rapport à l'extérieur et nous n'avions pas d'info précise sur l'état du patient. Réévaluations régulières de l'état de santé du patient qui était en GCS 6, appel au MCU de sion avec bonnes informations, rapides et précises quant au lieu de destination. Pas de vision tunnel sur l'état du patient.
|
||||
Bonne antalgie régulière et recherche de moyens (TA aux 3 minutes pour être précise dans les heures et avoir une bonne antalgie), recherches structurées d'autre problème de santé en plus de la trauma. Bonne utilisation des témoins pour prise d'infos et nous aider avec le matériel à ramener dans l'ambulance. Bonne communication en boucle fermée pour les dosages médicamenteux avec informations données à mon collègue des Mg et Ml que je voulais, j'ai été attentive aux patients et j'ai eu un bon relationnel.
|
||||
|
||||
2ème journée, second sur du instable
|
||||
Communication en boucle fermée. Validation des gestes demandés. ","Evaluations de deux journées passées avec mon collègue. Je pense avoir de plus en plus confiance en moi, en mes choix. J'énonce mes stratégies de façon claire et précise qui sont de plus en plus justes. Deux journées agréables avec plusieurs gestes à effectuer que je n'avais jamais fait et j'ai beaucoup appris.",MC 32,
|
|
15
studenteval/list_pdf_export.py
Normal file
15
studenteval/list_pdf_export.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from django.http import HttpResponse
|
||||
from django.template.loader import get_template
|
||||
from xhtml2pdf import pisa
|
||||
|
||||
|
||||
def render_to_pdf(template_src, context_dict={}):
|
||||
template = get_template(template_src)
|
||||
html = template.render(context_dict)
|
||||
response = HttpResponse(content_type='application/pdf')
|
||||
pdf_status = pisa.CreatePDF(html, dest=response)
|
||||
|
||||
if pdf_status.err:
|
||||
return HttpResponse('Some errors were encountered <pre>' + html + '</pre>')
|
||||
|
||||
return response
|
258
studenteval/models.py
Normal file
258
studenteval/models.py
Normal file
@@ -0,0 +1,258 @@
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
from django.conf import settings
|
||||
from django.utils import timezone
|
||||
from django.contrib import admin
|
||||
import uuid
|
||||
|
||||
EVAL_TYPE = [
|
||||
('1', 'Intervention'),
|
||||
('2', 'Journée'),
|
||||
('3','Exercice')
|
||||
]
|
||||
INTER_NATURE = [
|
||||
('1', 'Trauma'),
|
||||
('2', 'non-Trauma'),
|
||||
]
|
||||
INTER_PRIORITY = [
|
||||
('1', 'P1'),
|
||||
('2', 'P2'),
|
||||
('3', 'P3'),
|
||||
('4', 'S1'),
|
||||
('5', 'S2'),
|
||||
('6', 'S3'),
|
||||
('7', 'Exercice'),
|
||||
]
|
||||
INTER_COMPLEXITY = [
|
||||
('1', 'Stable / Simple'),
|
||||
('2', 'Stable / Complexe'),
|
||||
('3', 'Instable / Simple'),
|
||||
('4', 'Instable / Complexe'),
|
||||
]
|
||||
|
||||
STUDENT_ROLE = [
|
||||
('1', 'Leader'),
|
||||
('2', 'Équipier'),
|
||||
('3', '3e position (observateur)'),
|
||||
]
|
||||
|
||||
EVAL_MODE = [
|
||||
('1', 'Auto-évaluation'),
|
||||
('2', 'Encadrant'),
|
||||
]
|
||||
def increment_ID():
|
||||
obj = cl_Student_eval.objects.all().order_by('ID').last()
|
||||
|
||||
if obj is None:
|
||||
return 1
|
||||
|
||||
last_id = int(obj.ID)
|
||||
return last_id + 1
|
||||
|
||||
class cl_Student_eval(models.Model):
|
||||
uuid = models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True)
|
||||
ID = models.IntegerField("ID du Suivi", editable=False, unique=True, default=increment_ID)
|
||||
|
||||
# Informations sur l'auteur
|
||||
Author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name="Auteur", on_delete=models.SET_NULL, null=True, related_name="eval_author")
|
||||
sAuthor = models.CharField("Auteur", max_length=120)
|
||||
Author_2e = models.ForeignKey(settings.AUTH_USER_MODEL,limit_choices_to={'groups__name': "FI-Encadrants"}, verbose_name="Co-auteur", on_delete=models.SET_NULL, null=True, related_name="eval_second_author", blank=True,)
|
||||
sAuthor_2e = models.CharField("Co-auteur", max_length=120, blank=True,)
|
||||
|
||||
#Information sur l 'étudiant/stagiaire
|
||||
Student = models.ForeignKey(settings.AUTH_USER_MODEL,limit_choices_to={'groups__name': "FI-Étudiants"}, verbose_name="Nom du stagiaire/étudaint", on_delete=models.SET_NULL, null=True)
|
||||
sStudent = models.CharField("Nom de l'étudiant/stagiaire", max_length=120)
|
||||
|
||||
#Information sur le suivi
|
||||
nEval_Type = models.CharField('Type de suivi', max_length=1, choices=EVAL_TYPE, default=0)
|
||||
dtDate = models.DateField("Date concernée", default=timezone.now)
|
||||
sRef = models.CharField("N° de référence / FIP", max_length=120, blank=True,)
|
||||
nEval_Mode = models.CharField('Mode de suivi ', max_length=1, choices=EVAL_MODE, default=0)
|
||||
sDesc_neg = models.TextField("Points à améliorer")
|
||||
sDesc_pos = models.TextField("Points positifs")
|
||||
sDesc_global = models.TextField("Avis global sur l'intervention/journée/exercice")
|
||||
|
||||
#Information sur l'intervention
|
||||
nInter_Nature = models.CharField('Nature', max_length=1, choices=INTER_NATURE, default=0, blank=True,)
|
||||
nInter_Priority = models.CharField('Priorité', max_length=1, choices=INTER_PRIORITY, default=0, blank=True,)
|
||||
nInter_Complexity = models.CharField('Nature de complexité', max_length=1, choices=INTER_COMPLEXITY, default=0, blank=True,)
|
||||
sInter_Desc = models.TextField("Description courte", blank=True,)
|
||||
nStudent_Role = models.CharField("Rôle de l'étudiant/stagiaire", max_length=1, choices=STUDENT_ROLE, default=0, blank=True,)
|
||||
|
||||
|
||||
#Automatic data
|
||||
dtUpdated = models.DateTimeField('date updated', auto_now=True)
|
||||
dtCreated = models.DateTimeField('date published', auto_now_add=True)
|
||||
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.a_evals = None
|
||||
|
||||
self.o_Auto_eval = None
|
||||
self.o_Encadrant_eval = None
|
||||
self.mirrored = False
|
||||
|
||||
|
||||
|
||||
@admin.display(description='Référence du suivi')
|
||||
def get_ref_of_eval(self):
|
||||
sRet = ""
|
||||
|
||||
if int(self.nEval_Type) == 1:
|
||||
sRet = self.sRef
|
||||
elif int(self.nEval_Type) == 2:
|
||||
sRet = self.dtDate.strftime("%d.%b.%Y")
|
||||
|
||||
|
||||
#print(sRet)
|
||||
#print(f"Eval_Type = {self.nEval_Type} => {int(self.nEval_Type)-1}")
|
||||
return f"{EVAL_TYPE[int(self.nEval_Type)-1][1]}: {sRet}"
|
||||
|
||||
def get_mirror_eval(self, evals):
|
||||
#print(self)
|
||||
for eval in evals:
|
||||
eval = eval["eval"]
|
||||
|
||||
to_be_set = False
|
||||
if eval.ID == self.ID:
|
||||
to_be_set = True
|
||||
else:
|
||||
#print(f"check eval {eval} {eval.nEval_Type} ({eval.nEval_Type == 1}) ? {eval.sRef} == {self.sRef} => {eval.sRef == self.sRef} {self}")
|
||||
if eval.nEval_Type == "1" and eval.sRef == self.sRef:
|
||||
print(f"Eval mirror found {eval} / {self}")
|
||||
to_be_set = True
|
||||
elif eval.nEval_Type == "2" and eval.dtDate == self.dtDate:
|
||||
print(f"Eval mirror found {eval} / {self}")
|
||||
to_be_set = True
|
||||
|
||||
if to_be_set:
|
||||
if eval.nEval_Mode == "1":
|
||||
self.o_Auto_eval = eval
|
||||
elif eval.nEval_Mode == "2":
|
||||
self.o_Encadrant_eval = eval
|
||||
|
||||
|
||||
|
||||
if self.o_Encadrant_eval is not None and self.o_Auto_eval is not None:
|
||||
self.mirrored = True
|
||||
#print(f" auto = {self.o_Auto_eval} / encadrant = {self.o_Encadrant_eval}")
|
||||
|
||||
|
||||
def get_all_evals_for_student(self,sStudent=None):
|
||||
if sStudent is None:
|
||||
sStudent = self.sStudent
|
||||
|
||||
print(f"get_all_evals_for_student launched ! {sStudent}")
|
||||
|
||||
self.a_evals = []
|
||||
evals = cl_Student_eval.objects.filter(sStudent=sStudent).order_by('sRef')
|
||||
for eval in evals:
|
||||
self.a_evals.append({"uuid":eval.uuid,"sRef":eval.sRef, "nEval_Mode": eval.nEval_Mode, "nEval_Type": eval.nEval_Type, "eval":eval, "dtDate": eval.dtDate})
|
||||
|
||||
|
||||
#print(self.a_evals)
|
||||
return self.a_evals
|
||||
|
||||
@admin.display(description="Mirroir ?", boolean=True)
|
||||
def get_mirrored(self):
|
||||
self.get_all_evals_for_student()
|
||||
self.get_mirror_eval(self.a_evals)
|
||||
return self.mirrored
|
||||
|
||||
|
||||
def get_inter_priority(self):
|
||||
try:
|
||||
return INTER_PRIORITY[int(self.nInter_Priority) - 1][1]
|
||||
except:
|
||||
return f"Unknown {self.nInter_Priority}"
|
||||
|
||||
def get_eval_mode(self):
|
||||
try:
|
||||
return EVAL_MODE[int(self.nEval_Mode) - 1][1]
|
||||
except:
|
||||
return f"Unknown {self.nEval_Mode}"
|
||||
|
||||
def get_student_role(self):
|
||||
try:
|
||||
return STUDENT_ROLE[int(self.nStudent_Role) - 1][1]
|
||||
except:
|
||||
return f"Unknown {self.nStudent_Role}"
|
||||
|
||||
def get_inter_nature(self):
|
||||
try:
|
||||
return INTER_NATURE[int(self.nInter_Nature) - 1][1]
|
||||
except:
|
||||
return f"Unknown {self.nInter_Nature}"
|
||||
|
||||
def get_eval_type(self):
|
||||
try:
|
||||
return EVAL_TYPE[int(self.nEval_Type) - 1][1]
|
||||
except:
|
||||
return f"Unknown {self.nEval_Type}"
|
||||
|
||||
def get_inter_complexity(self):
|
||||
try:
|
||||
return INTER_COMPLEXITY[int(self.nInter_Nature) - 1][1]
|
||||
except:
|
||||
return f"Unknown {self.nInter_Nature}"
|
||||
|
||||
def __str__(self):
|
||||
try:
|
||||
return f"#{self.ID} { self.sStudent } => {self.get_ref_of_eval()} ({EVAL_MODE[int(self.nEval_Mode)-1][1]} / {EVAL_TYPE[int(self.nEval_Type)-1][1]})"
|
||||
except:
|
||||
return ""
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Suivi étudiants"
|
||||
verbose_name_plural = "Suivis étudiants"
|
||||
ordering = ["-ID"]
|
||||
|
||||
|
||||
import csv
|
||||
import os
|
||||
from datetime import datetime
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
chemin_actuel = os.path.dirname(__file__)
|
||||
def import_data_csv():
|
||||
with open(os.path.join(chemin_actuel, 'import.csv'), 'r', encoding='utf-8') as file_csv:
|
||||
file_csv = csv.DictReader(file_csv)
|
||||
first_line = True
|
||||
for line in file_csv:
|
||||
# Ne rien faire avec la première ligne = Header
|
||||
|
||||
|
||||
new_eval = cl_Student_eval()
|
||||
|
||||
for key in line.keys():
|
||||
if key == "Zeitstempel":
|
||||
continue
|
||||
value = line[key]
|
||||
if key == "dtDate":
|
||||
value = datetime.strptime(value, "%d.%m.%Y").date()
|
||||
elif key == "Student" and value != "":
|
||||
print(f"user == pk{value}")
|
||||
try:
|
||||
temp_user = User.objects.get(pk=int(value))
|
||||
setattr(new_eval, "Student", temp_user)
|
||||
except:
|
||||
print(f"User not found {int(value)} {line}")
|
||||
pass
|
||||
continue
|
||||
elif key == "ID":
|
||||
pass
|
||||
|
||||
if key in ["nEval_Type","nInter_Priority","nInter_Nature","nInter_Complexity","nStudent_Role","nEval_Mode"]:
|
||||
print(f"key [{key}] => {value}")
|
||||
value = int(value) if value != "" else ""
|
||||
|
||||
setattr(new_eval, key,value)
|
||||
print(f"try to save {line}")
|
||||
try:
|
||||
new_eval.save()
|
||||
print(f"Save new eval {new_eval.ID}")
|
||||
except:
|
||||
print(f"Error to save {new_eval.ID}")
|
||||
|
||||
#import_data_csv()
|
51
studenteval/templates/base.html
Normal file
51
studenteval/templates/base.html
Normal file
@@ -0,0 +1,51 @@
|
||||
{% load static %}
|
||||
<!doctype html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport"
|
||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Custom CSS -->
|
||||
<link rel="stylesheet" href="{% static 'bootstrap.min.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'style.css' %}">
|
||||
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.16/dist/tailwind.min.css" rel="stylesheet">
|
||||
<title>Intranet StudentEval</title>
|
||||
</head>
|
||||
<body class="bg-gray-100">
|
||||
<div id="wrap">
|
||||
<nav class="navbar navbar-expand navbar-dark bg-primary mb-3 ps-3 pe-3">
|
||||
<a href="" class="navbar-brand">Intranet Ambulance Clerc</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor01"
|
||||
aria-controls="navbarColor01"
|
||||
aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="w-100">
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
|
||||
</li>
|
||||
<li class="nav-item mr-auto">
|
||||
<a href="{% url 'admin:index' %}" class="nav-link" target="_blank">Administration intranet</a>
|
||||
</li>
|
||||
{% block url_nav %}
|
||||
{% endblock %}
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
<footer class="mt-2 text-center">© 2023 <a href="https://ambulance-clerc.ch"
|
||||
target="_blank">Ambulance Clerc</a></footer>
|
||||
|
||||
{% block script %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
178
studenteval/templates/studenteval/all_pdf_template.html
Normal file
178
studenteval/templates/studenteval/all_pdf_template.html
Normal file
@@ -0,0 +1,178 @@
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
@page{
|
||||
size: A4 landscape;
|
||||
margin: 2cm;
|
||||
}
|
||||
|
||||
@page regular_template { margin: 2cm; }
|
||||
.header-info{
|
||||
font-size: 8pt;
|
||||
}
|
||||
|
||||
.header-info,.global , .desc {
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
.header-info th {
|
||||
text-align: left;
|
||||
padding: 3px;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.header-info td {
|
||||
width: 40%;
|
||||
padding: 1mm;
|
||||
}
|
||||
.header-info th{
|
||||
width: 20%;
|
||||
padding: 1mm;
|
||||
}
|
||||
.desc {
|
||||
padding: 1mm;
|
||||
font-size: 10pt;
|
||||
}
|
||||
.desc td{
|
||||
width 50%;
|
||||
}
|
||||
.global{
|
||||
padding: 1mm;
|
||||
font-size: 10pt;
|
||||
}
|
||||
.global td{
|
||||
width: 100%;
|
||||
}
|
||||
h3{
|
||||
font-size: 14pt;
|
||||
}
|
||||
.clerc-logo{
|
||||
width: 100px;
|
||||
right: 0;
|
||||
top: 500px;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
|
||||
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{%for object in objects%}
|
||||
<table style="padding-bottom: 0.2cm">
|
||||
<tr>
|
||||
<td width="90%">
|
||||
<h3>Liste des évaluations #{{object.ID}} {{object.sStudent}}</h3>
|
||||
</td>
|
||||
<td><img src="https://cloud.ambulance-clerc.ch/index.php/s/CpHfC8HoXNfdoCZ/preview" alt="ClercNet Logo" class="clerc-logo" style="float: right"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table class="header-info">
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class=" " align="center" >Date de suivi</th>
|
||||
<td class="">{{ object.dtDate }}</td>
|
||||
<th class=" " align="center">Date de d'écriture</th>
|
||||
<td class="">{{ object.dtCreated }}</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="" align="center">Auteur</th>
|
||||
<td class="">{{ object.sAuthor }}</td>
|
||||
<th class=" " align="center">Second auteur</th>
|
||||
<td class="">{{ object.sAuthor_2e }}</td>
|
||||
</tr>
|
||||
|
||||
<tr class="">
|
||||
<th class=" "align="center">Type de suivi</th>
|
||||
<td class="">{{ object.get_eval_type }}</td>
|
||||
</tr>
|
||||
{% if object.nEval_Type == "1" %}
|
||||
<tr class="">
|
||||
<th class=" "align="center">N° FIP</th>
|
||||
<td class="">{{ object.sRef }}</td>
|
||||
<th class=" "align="center">Priorité</th>
|
||||
<td class="">{{ object.get_inter_priority }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class=" "align="center">Description</th>
|
||||
<td class="" >{{ object.sInter_Desc }}</td>
|
||||
<th class=" "align="center">Rôle de l'étudiant</th>
|
||||
<td class="">{{ object.get_student_role }}</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class=" "align="center">Nature de l'intervention</th>
|
||||
<td class="">{{ object.get_inter_nature }}</td>
|
||||
<th class=" "align="center">Complexité de l'intervention</th>
|
||||
<td class="" >{{ object.get_inter_complexity }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<table class="desc">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="">
|
||||
Éléments positifs (auto-évaluation)
|
||||
</th>
|
||||
<th class="">
|
||||
Éléments positifs (Encadrant)
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="" >
|
||||
{{object.o_Auto_eval.sDesc_pos | safe}}
|
||||
</td>
|
||||
<td class="" >
|
||||
{{object.o_Encadrant_eval.sDesc_pos | safe}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="">
|
||||
Éléments à améliorer (auto-évaluation)
|
||||
</th>
|
||||
<th class="">
|
||||
Éléments améliorer (Encadrant)
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="" >
|
||||
{{object.o_Auto_eval.sDesc_neg | safe}}
|
||||
</td>
|
||||
<td class="" >
|
||||
{{object.o_Encadrant_eval.sDesc_neg | safe}}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table class="global">
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="">Avis Global</th>
|
||||
|
||||
</tr>
|
||||
<tr class="">
|
||||
<td class="">{{ object.o_Encadrant_eval.sDesc_global | safe }}</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="">Avis Global (auto)</th>
|
||||
|
||||
</tr>
|
||||
<tr class="">
|
||||
<td class="">{{ object.o_Auto_eval.sDesc_global | safe}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<pdf:nextpage />
|
||||
{%endfor%}
|
||||
|
||||
</body>
|
||||
</html>
|
8
studenteval/templates/studenteval/base_studenteval.html
Normal file
8
studenteval/templates/studenteval/base_studenteval.html
Normal file
@@ -0,0 +1,8 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container w-full%">
|
||||
{% block cl_content %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
124
studenteval/templates/studenteval/cl_student_eval.html
Normal file
124
studenteval/templates/studenteval/cl_student_eval.html
Normal file
@@ -0,0 +1,124 @@
|
||||
<div class="container mx-auto p-6">
|
||||
<h1 class="text-2xl font-bold mb-4">{% block title %}Détails de l'évaluation ({{ object.ID }}) étudiant de {{ object.sStudent }}{% endblock %}</h1>
|
||||
<div class="flex rounded-lg shadow overflow-hidden">
|
||||
<div class="bg-white rounded-lg shadow overflow-hidden w-1/3 m-3">
|
||||
<table class="w-full table-auto">
|
||||
<tbody>
|
||||
<tr class="border-b">
|
||||
<th class="py-2 px-1 text-left font-semibold">Date de suivi</th>
|
||||
<td class="py-2 px-1">{{ object.dtDate }}</td>
|
||||
<th class="py-2 px-1 text-left font-semibold">Date de d'écriture</th>
|
||||
<td class="py-2 px-1">{{ object.dtCreated }}</td>
|
||||
</tr>
|
||||
<tr class="border-b">
|
||||
<th class="py-2 px-1 text-left font-semibold">Auteur</th>
|
||||
<td class="py-2 px-1">{{ object.sAuthor }}</td>
|
||||
<th class="py-2 px-1 text-left font-semibold">Second auteur</th>
|
||||
<td class="py-2 px-1">{{ object.sAuthor_2e }}</td>
|
||||
</tr>
|
||||
|
||||
<tr class="border-b">
|
||||
<th class="py-2 px-1 text-left font-semibold">Type de suivi</th>
|
||||
<td class="py-2 px-1" colspan="3">{{ object.get_eval_type }}</td>
|
||||
</tr>
|
||||
{% if object.nEval_Type == "1" %}
|
||||
<tr class="border-b">
|
||||
<th class="py-2 px-1 text-left font-semibold">N° FIP</th>
|
||||
<td class="py-2 px-1">{{ object.sRef }}</td>
|
||||
<th class="py-2 px-1 text-left font-semibold">Priorité</th>
|
||||
<td class="py-2 px-1">{{ object.get_inter_priority }}</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="py-2 px-1 text-left font-semibold">Description</th>
|
||||
<td class="py-2 px-1" colspan="3">{{ object.sInter_Desc }}</td>
|
||||
</tr>
|
||||
<tr class="border-b">
|
||||
<th class="py-2 px-1 text-left font-semibold">Rôle de l'étudiant</th>
|
||||
<td class="py-2 px-1">{{ object.get_student_role }}</td>
|
||||
</tr>
|
||||
<tr class="border-b">
|
||||
<th class="py-2 px-1 text-left font-semibold">Nature de l'intervention</th>
|
||||
<td class="py-2 px-1">{{ object.get_inter_nature }}</td>
|
||||
</tr>
|
||||
<tr class="border-b">
|
||||
<th class="py-2 px-1 text-left font-semibold">Complexité de l'intervention</th>
|
||||
<td class="py-2 px-1" colspan="2">{{ object.get_inter_complexity }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="bg-white rounded-lg shadow overflow-hidden w-3/4 m-3">
|
||||
<table class="w-full table-auto border-solid">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="py-2 px-4 border-solid border-b border-r">
|
||||
Éléments positifs (auto-évaluation)
|
||||
</th>
|
||||
<th class="py-2 px-4 border-solid border-b border-l">
|
||||
Éléments positifs (Encadrant)
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="py-2 px-4 border-solid border-b border-r" >
|
||||
{{object.o_Auto_eval.sDesc_pos | safe}}
|
||||
</td>
|
||||
<td class="py-2 px-4 border-solid border-b border-l" >
|
||||
{{object.o_Encadrant_eval.sDesc_pos | safe}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="py-2 px-4"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="py-2 px-4 border-solid border-b border-r">
|
||||
Éléments à améliorer (auto-évaluation)
|
||||
</th>
|
||||
<th class="py-2 px-4 border-solid border-b border-l">
|
||||
Éléments améliorer (Encadrant)
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="py-2 px-4 border-solid border-b border-r" >
|
||||
{{object.o_Auto_eval.sDesc_neg | safe}}
|
||||
</td>
|
||||
<td class="py-2 px-4 border-solid border-b border-l" >
|
||||
{{object.o_Encadrant_eval.sDesc_neg | safe}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bg-white rounded-lg shadow overflow-hidden w-full" style="margin-top:10px;">
|
||||
<table class="w-full">
|
||||
<tbody>
|
||||
<tr class="border-b">
|
||||
<th class="py-2 px-4 text-left font-semibold">Avis Global</th>
|
||||
|
||||
</tr>
|
||||
<tr class="border-b">
|
||||
<td class="py-2 px-4">{{ object.o_Encadrant_eval.sDesc_global | safe }}</td>
|
||||
</tr>
|
||||
<tr class="border-b">
|
||||
<th class="py-2 px-4 text-left font-semibold">Avis Global (auto)</th>
|
||||
|
||||
</tr>
|
||||
<tr class="border-b">
|
||||
<td class="py-2 px-4">{{ object.o_Auto_eval.sDesc_global | safe}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
@@ -0,0 +1,20 @@
|
||||
{% extends 'studenteval/base_studenteval.html' %}
|
||||
{% load i18n admin_urls jazzmin %}
|
||||
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
|
||||
|
||||
{% block url_nav %}
|
||||
<li>
|
||||
<a href="{% url 'studenteval:student_eval_list' object.uuid %}?dtDate__range__gte={{ dtDate__range__gte }}&dtDate__range__lte={{ dtDate__range__lte }}" class="nav-link" target="_self">Voir toutes les évaluations</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{% url 'studenteval:export_pdf' object.uuid %}?dtDate__range__gte={{ dtDate__range__gte }}&dtDate__range__lte={{ dtDate__range__lte }}" class="nav-link" target="_self">Imprimer liste PDF</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" onClick="javascript:history.go(-1);" class="nav-link">{% trans "Retour" %}</a>
|
||||
</li>
|
||||
{% endblock %}
|
||||
{% block cl_content %}
|
||||
{% include 'studenteval/cl_student_eval.html' with object=object %}
|
||||
{% endblock %}
|
||||
|
||||
|
29
studenteval/templates/studenteval/cl_student_eval_list.html
Normal file
29
studenteval/templates/studenteval/cl_student_eval_list.html
Normal file
@@ -0,0 +1,29 @@
|
||||
{% extends 'studenteval/base_studenteval.html' %}
|
||||
{% load i18n admin_urls jazzmin %}
|
||||
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
|
||||
|
||||
{% block title %}Liste des évaluations{% endblock %}
|
||||
|
||||
{% block url_nav %}
|
||||
<li>
|
||||
<a href="{% url 'studenteval:export_pdf_all' uuid %}?dtDate__range__gte={{ dtDate__range__gte }}&dtDate__range__lte={{ dtDate__range__lte }}" class="nav-link" target="_self">Imprimer liste PDF</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" onClick="javascript:history.go(-2);" class="nav-link">{% trans "Retour" %}</a>
|
||||
</li>
|
||||
{% endblock %}
|
||||
{% block cl_content %}
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
{% if object_list %}
|
||||
{% for obj in my_objects %}
|
||||
{% include 'studenteval/cl_student_eval.html' with object=obj %}
|
||||
{% if not forloop.last %}
|
||||
<hr>{% endif %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<p>There is no post.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
4
studenteval/tests.py
Normal file
4
studenteval/tests.py
Normal file
@@ -0,0 +1,4 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
18
studenteval/urls.py
Normal file
18
studenteval/urls.py
Normal file
@@ -0,0 +1,18 @@
|
||||
from django.urls import path
|
||||
|
||||
|
||||
|
||||
from . import views
|
||||
|
||||
|
||||
app_name = "studenteval"
|
||||
|
||||
urlpatterns = [
|
||||
path('show_pdf/<uuid:pk>/', views.student_eval_detail.as_view(), name='student_eval_detail'),
|
||||
path('show_pdf_all/<uuid:pk>/', views.student_eval_list.as_view(), name='student_eval_list'),
|
||||
path('export_pdf_all/<uuid:pk>/', views.export_pdf_all, name='export_pdf_all'),
|
||||
path('export_pdf/<uuid:pk>/', views.export_pdf, name='export_pdf'),
|
||||
#path('peremptions', views.view_peremptions, name='view_peremptions'),
|
||||
|
||||
]
|
||||
|
125
studenteval/views.py
Normal file
125
studenteval/views.py
Normal file
@@ -0,0 +1,125 @@
|
||||
import requests
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.http import HttpResponse, Http404
|
||||
from django.shortcuts import render
|
||||
from django.views.generic import ListView, UpdateView, DetailView, FormView, CreateView
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from studenteval.list_pdf_export import render_to_pdf
|
||||
|
||||
from studenteval.models import cl_Student_eval
|
||||
from studenteval.filters import cl_Student_eval_Filter
|
||||
|
||||
def show_pdf(request, uuid):
|
||||
# Votre logique pour l'action 1 ici
|
||||
return HttpResponse("Action 1 a été effectuée pour l'objet avec l'ID : {}".format(uuid))
|
||||
|
||||
|
||||
def is_member(user, group):
|
||||
return user.groups.filter(name=group).exists()
|
||||
class student_eval_detail(LoginRequiredMixin,DetailView):
|
||||
model =cl_Student_eval
|
||||
login_url = ""
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
user_obj = self.request.user
|
||||
|
||||
author_id = self.get_object().Author.id if self.get_object().Author is not None else 0
|
||||
student_id = self.get_object().Student.id if self.get_object().Student is not None else 0
|
||||
|
||||
if not user_obj.id == author_id and not user_obj.id == student_id and not is_member(user_obj,"FI-Encadrants"):
|
||||
raise PermissionDenied
|
||||
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["dtDate__range__gte"] = self.request.GET.get('dtDate__range__gte')
|
||||
context["dtDate__range__lte"] = self.request.GET.get('dtDate__range__lte')
|
||||
|
||||
self.object.get_all_evals_for_student()
|
||||
self.object.get_mirror_eval(self.object.a_evals)
|
||||
|
||||
|
||||
return context
|
||||
class student_eval_list(LoginRequiredMixin,ListView):
|
||||
model = cl_Student_eval
|
||||
login_url = ""
|
||||
|
||||
|
||||
|
||||
def get_queryset(self):
|
||||
print(self.kwargs)
|
||||
object = cl_Student_eval.objects.get(pk= self.kwargs['pk'])
|
||||
return cl_Student_eval.objects.filter(Student=object.Student)
|
||||
|
||||
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
user_obj = self.request.user
|
||||
|
||||
#self.object_list.filter(Student=requests.GET['Student'])
|
||||
|
||||
|
||||
'''
|
||||
author_id = self.get_object().Author.id if self.get_object().Author is not None else 0
|
||||
student_id = self.get_object().Student.id if self.get_object().Student is not None else 0
|
||||
|
||||
if not user_obj.id == author_id and not user_obj.id == student_id and not is_member(user_obj,"FI-Encadrants"):
|
||||
raise PermissionDenied
|
||||
'''
|
||||
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
||||
context['my_objects'] =[]
|
||||
|
||||
print(self.get_queryset())
|
||||
for object in self.get_queryset():
|
||||
object.get_all_evals_for_student()
|
||||
object.get_mirror_eval(object.a_evals)
|
||||
context['my_objects'].append(object)
|
||||
context["uuid"] = object.uuid
|
||||
|
||||
|
||||
return context
|
||||
|
||||
def export_pdf_all(request,pk):
|
||||
'''
|
||||
if not "dtDate__range__gte" in request.GET.keys():
|
||||
start = datetime.today().replace(day=1,hour=0, minute=0)
|
||||
else:
|
||||
start = request.GET['dtDate__range__gte']
|
||||
if not "dtDate__range__lte" in request.GET.keys():
|
||||
end = datetime.now()
|
||||
else:
|
||||
end = request.GET['dtDate__range__lte']
|
||||
'''
|
||||
template_name = "studenteval/all_pdf_template.html"
|
||||
records = cl_Student_eval.objects.filter(Student=cl_Student_eval.objects.get(pk=pk).Student)
|
||||
objects=[]
|
||||
for record in records:
|
||||
record.get_all_evals_for_student()
|
||||
record.get_mirror_eval(record.a_evals)
|
||||
objects.append(record)
|
||||
return render_to_pdf(template_name,{"objects": objects, })
|
||||
|
||||
def export_pdf(request,pk):
|
||||
'''
|
||||
if not "dtDate__range__gte" in request.GET.keys():
|
||||
start = datetime.today().replace(day=1,hour=0, minute=0)
|
||||
else:
|
||||
start = request.GET['dtDate__range__gte']
|
||||
if not "dtDate__range__lte" in request.GET.keys():
|
||||
end = datetime.now()
|
||||
else:
|
||||
end = request.GET['dtDate__range__lte']
|
||||
'''
|
||||
template_name = "studenteval/all_pdf_template.html"
|
||||
objects = []
|
||||
record = cl_Student_eval.objects.get(pk=pk)
|
||||
record.get_all_evals_for_student()
|
||||
record.get_mirror_eval(record.a_evals)
|
||||
objects.append(record)
|
||||
|
||||
return render_to_pdf(template_name,{"objects": objects, })
|
24
templates/admin/carnet_rouge/cr_message/change_form.html
Normal file
24
templates/admin/carnet_rouge/cr_message/change_form.html
Normal file
@@ -0,0 +1,24 @@
|
||||
{% extends 'admin/change_form.html' %}
|
||||
|
||||
{% load i18n jazzmin %}
|
||||
{% get_jazzmin_settings request as jazzmin_settings %}
|
||||
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
|
||||
|
||||
{% block submit_buttons_bottom %}
|
||||
{{ block.super }}
|
||||
{% if change or add %}
|
||||
{% if original.bEnabled or add %}
|
||||
<div class="submit-row" style="margin-top: 1rem">
|
||||
<div class="form-group">
|
||||
<input type="submit" class="btn btn-secondary form-control" value="{% trans 'Enregister en brouillon' %}" name="_temp_save">
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="submit-row" style="margin-top: 1rem">
|
||||
<div class="form-group">
|
||||
<input type="submit" class="btn btn-success form-control" value="{% trans 'Publier' %}" name="_publish_save">
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
12
templates/admin/change_form_object_tools.html
Normal file
12
templates/admin/change_form_object_tools.html
Normal file
@@ -0,0 +1,12 @@
|
||||
{% load i18n admin_urls jazzmin %}
|
||||
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
|
||||
|
||||
{% block object-tools-items %}
|
||||
{% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
|
||||
<a class="btn btn-block {{ jazzmin_ui.button_classes.secondary }} btn-sm" href="#" onclick="javascript:history.go(-1);">{% trans 'Retour' %}</a>
|
||||
<a class="btn btn-block {{ jazzmin_ui.button_classes.secondary }} btn-sm" href="{% add_preserved_filters history_url %}">{% trans 'History' %}</a>
|
||||
|
||||
{% if has_absolute_url %}
|
||||
<a href="{{ absolute_url }}" class="btn btn-block {{ jazzmin_ui.button_classes.secondary }} btn-sm">{% trans "View on site" %}</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
76
templates/admin/login.html
Normal file
76
templates/admin/login.html
Normal file
@@ -0,0 +1,76 @@
|
||||
{% extends "registration/base.html" %}
|
||||
|
||||
{% load i18n jazzmin %}
|
||||
{% get_jazzmin_settings request as jazzmin_settings %}
|
||||
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
|
||||
|
||||
{% block content %}
|
||||
<p class="login-box-msg">{{ jazzmin_settings.welcome_sign }}</p>
|
||||
<form action="{{ app_path }}" method="post">
|
||||
{% csrf_token %}
|
||||
{% if user.is_authenticated %}
|
||||
<p class="errornote">
|
||||
<div class="callout callout-danger">
|
||||
<p>
|
||||
{% blocktrans trimmed %}
|
||||
You are authenticated as {{ username }}, but are not authorized to
|
||||
access this page. Would you like to login to a different account?
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
</div>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if form.errors %}
|
||||
{% if form.username.errors %}
|
||||
<div class="callout callout-danger">
|
||||
<p>{{ form.username.label }}: {{ form.username.errors|join:', ' }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if form.password.errors %}
|
||||
<div class="callout callout-danger">
|
||||
<p>{{ form.password.label }}: {{ form.password.errors|join:', ' }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if form.non_field_errors %}
|
||||
<div class="callout callout-danger">
|
||||
{% for error in form.non_field_errors %}
|
||||
<p>{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" name="username" class="form-control" placeholder="{{ form.username.label }}" required>
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-user"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group mb-3">
|
||||
<input type="password" name="password" class="form-control" placeholder="{{ form.password.label }}" required>
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-lock"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% url 'admin_password_reset' as password_reset_url %}
|
||||
{% if password_reset_url %}
|
||||
<div class="mb-3">
|
||||
<div class="password-reset-link" style="text-align: center;">
|
||||
<a href="{{ password_reset_url }}">
|
||||
{% trans 'Forgotten your password or username?' %}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<button type="submit" class="btn {{ jazzmin_ui.button_classes.primary }} btn-block">
|
||||
{% trans "Log in" %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
79
templates/admin/login_jazzmin.html
Normal file
79
templates/admin/login_jazzmin.html
Normal file
@@ -0,0 +1,79 @@
|
||||
{% extends "registration/base.html" %}
|
||||
|
||||
{% load i18n jazzmin %}
|
||||
{% get_jazzmin_settings request as jazzmin_settings %}
|
||||
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
|
||||
|
||||
{% block content %}
|
||||
<p class="login-box-msg">{{ jazzmin_settings.welcome_sign }}</p>
|
||||
<form action="{{ app_path }}" method="post">
|
||||
{% csrf_token %}
|
||||
{% if user.is_authenticated %}
|
||||
<p class="errornote">
|
||||
<div class="callout callout-danger">
|
||||
<p>
|
||||
{% blocktrans trimmed %}
|
||||
You are authenticated as {{ username }}, but are not authorized to
|
||||
access this page. Would you like to login to a different account?
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
</div>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if form.errors %}
|
||||
{% if form.username.errors %}
|
||||
<div class="callout callout-danger">
|
||||
<p>{{ form.username.label }}: {{ form.username.errors|join:', ' }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if form.password.errors %}
|
||||
<div class="callout callout-danger">
|
||||
<p>{{ form.password.label }}: {{ form.password.errors|join:', ' }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if form.non_field_errors %}
|
||||
<div class="callout callout-danger">
|
||||
{% for error in form.non_field_errors %}
|
||||
<p>{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" name="username" class="form-control" placeholder="{{ form.username.label }}" required>
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-user"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group mb-3">
|
||||
<input type="password" name="password" class="form-control" placeholder="{{ form.password.label }}" required>
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-lock"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% url 'admin_password_reset' as password_reset_url %}
|
||||
{% if password_reset_url %}
|
||||
<div class="mb-3">
|
||||
<div class="password-reset-link" style="text-align: center;">
|
||||
<a href="{{ password_reset_url }}">
|
||||
{% trans 'Forgotten your password or username?' %}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<button type="submit" class="btn {{ jazzmin_ui.button_classes.primary }} btn-block">
|
||||
{% trans "Log in" %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
104
templates/registration/base.html
Normal file
104
templates/registration/base.html
Normal file
@@ -0,0 +1,104 @@
|
||||
{% load i18n static jazzmin admin_urls %}
|
||||
{% get_current_language as LANGUAGE_CODE %}
|
||||
{% get_current_language_bidi as LANGUAGE_BIDI %}
|
||||
{% get_jazzmin_settings request as jazzmin_settings %}
|
||||
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||
|
||||
<title>{% block title %}{{ title }} | {{ jazzmin_settings.site_title }}{% endblock %}</title>
|
||||
|
||||
<!-- Font Awesome Icons -->
|
||||
<link rel="stylesheet" href="{% static "vendor/fontawesome-free/css/all.min.css" %}">
|
||||
|
||||
<!-- Bootstrap and adminLTE -->
|
||||
<link rel="stylesheet" href="{% static "vendor/adminlte/css/adminlte.min.css" %}">
|
||||
|
||||
<!-- Bootswatch theme -->
|
||||
{% if jazzmin_ui.theme.name != 'default' %}
|
||||
<link rel="stylesheet" href="{{ jazzmin_ui.theme.src }}" id="jazzmin-theme" />
|
||||
{% endif %}
|
||||
|
||||
{% if jazzmin_ui.dark_mode_theme %}
|
||||
<link rel="stylesheet" href="{{ jazzmin_ui.dark_mode_theme.src }}" id="jazzmin-dark-mode-theme" media="(prefers-color-scheme: dark)"/>
|
||||
{% endif %}
|
||||
|
||||
<!-- Custom fixes for django -->
|
||||
<link rel="stylesheet" href="{% static "jazzmin/css/main.css" %}">
|
||||
|
||||
{% if jazzmin_settings.custom_css %}
|
||||
<!-- Custom CSS -->
|
||||
<link rel="stylesheet" href="{% static jazzmin_settings.custom_css %}">
|
||||
{% endif %}
|
||||
|
||||
<!-- favicons -->
|
||||
<link rel="shortcut icon" href="{% static jazzmin_settings.site_icon %}" type="image/png">
|
||||
<link rel="icon" href="{% static jazzmin_settings.site_icon %}" sizes="32x32" type="image/png">
|
||||
|
||||
{% if jazzmin_settings.use_google_fonts_cdn %}
|
||||
<!-- Google Font: Source Sans Pro -->
|
||||
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700" rel="stylesheet">
|
||||
{% endif %}
|
||||
|
||||
{% block extrastyle %} {% endblock %}
|
||||
{% block extrahead %} {% endblock %}
|
||||
</head>
|
||||
<body class="hold-transition jazzmin-login-page">
|
||||
|
||||
<section class="text-center text-lg-start">
|
||||
<style>
|
||||
.cascading-right {
|
||||
margin-right: -50px;
|
||||
z-index: 100;
|
||||
padding: 15px
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.cascading-right {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- Jumbotron -->
|
||||
<div class="container py-4" style="">
|
||||
<div class="row g-0 align-items-center">
|
||||
<div class="col-lg-6 mb-5 mb-lg-0">
|
||||
<div class="card cascading-right" style="
|
||||
background: hsla(0, 0%, 100%, 0.55);
|
||||
backdrop-filter: blur(30px);
|
||||
">
|
||||
{% block content %} {% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6 mb-5 mb-lg-0">
|
||||
<img src="{% static 'img/login_bg_43.jpg' %}" class="w-100 rounded-4 shadow-4"
|
||||
alt="" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Jumbotron -->
|
||||
</section>
|
||||
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="{% static "admin/js/vendor/jquery/jquery.js" %}"></script>
|
||||
<!-- Bootstrap 4 -->
|
||||
<script src="{% static 'vendor/bootstrap/js/bootstrap.min.js' %}"></script>
|
||||
<!-- AdminLTE App -->
|
||||
<script src="{% static 'vendor/adminlte/js/adminlte.min.js' %}"></script>
|
||||
|
||||
{% if jazzmin_settings.custom_js %}
|
||||
<script src="{% static jazzmin_settings.custom_js %}"></script>
|
||||
{% endif %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
14
vehicles/migrations_save/0012_merge_20230531_1527.py
Normal file
14
vehicles/migrations_save/0012_merge_20230531_1527.py
Normal file
@@ -0,0 +1,14 @@
|
||||
# Generated by Django 4.0 on 2023-05-31 15:27
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('vehicles', '0010_remove_vehicles_infos_stitle_vehicles_blucas_and_more'),
|
||||
('vehicles', '0011_remove_vehicles_infos_stitle_vehicles_blucas_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
@@ -1,18 +1,11 @@
|
||||
# don't import any costly modules
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
import importlib
|
||||
import warnings
|
||||
|
||||
|
||||
is_pypy = '__pypy__' in sys.builtin_module_names
|
||||
|
||||
|
||||
warnings.filterwarnings('ignore',
|
||||
r'.+ distutils\b.+ deprecated',
|
||||
DeprecationWarning)
|
||||
|
||||
|
||||
def warn_distutils_present():
|
||||
if 'distutils' not in sys.modules:
|
||||
return
|
||||
@@ -20,20 +13,29 @@ def warn_distutils_present():
|
||||
# PyPy for 3.6 unconditionally imports distutils, so bypass the warning
|
||||
# https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250
|
||||
return
|
||||
import warnings
|
||||
|
||||
warnings.warn(
|
||||
"Distutils was imported before Setuptools, but importing Setuptools "
|
||||
"also replaces the `distutils` module in `sys.modules`. This may lead "
|
||||
"to undesirable behaviors or errors. To avoid these issues, avoid "
|
||||
"using distutils directly, ensure that setuptools is installed in the "
|
||||
"traditional way (e.g. not an editable install), and/or make sure "
|
||||
"that setuptools is always imported before distutils.")
|
||||
"that setuptools is always imported before distutils."
|
||||
)
|
||||
|
||||
|
||||
def clear_distutils():
|
||||
if 'distutils' not in sys.modules:
|
||||
return
|
||||
import warnings
|
||||
|
||||
warnings.warn("Setuptools is replacing distutils.")
|
||||
mods = [name for name in sys.modules if re.match(r'distutils\b', name)]
|
||||
mods = [
|
||||
name
|
||||
for name in sys.modules
|
||||
if name == "distutils" or name.startswith("distutils.")
|
||||
]
|
||||
for name in mods:
|
||||
del sys.modules[name]
|
||||
|
||||
@@ -42,19 +44,25 @@ def enabled():
|
||||
"""
|
||||
Allow selection of distutils by environment variable.
|
||||
"""
|
||||
which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'stdlib')
|
||||
which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'local')
|
||||
return which == 'local'
|
||||
|
||||
|
||||
def ensure_local_distutils():
|
||||
clear_distutils()
|
||||
distutils = importlib.import_module('setuptools._distutils')
|
||||
distutils.__name__ = 'distutils'
|
||||
sys.modules['distutils'] = distutils
|
||||
import importlib
|
||||
|
||||
# sanity check that submodules load as expected
|
||||
clear_distutils()
|
||||
|
||||
# With the DistutilsMetaFinder in place,
|
||||
# perform an import to cause distutils to be
|
||||
# loaded from setuptools._distutils. Ref #2906.
|
||||
with shim():
|
||||
importlib.import_module('distutils')
|
||||
|
||||
# check that submodules load as expected
|
||||
core = importlib.import_module('distutils.core')
|
||||
assert '_distutils' in core.__file__, core.__file__
|
||||
assert 'setuptools._distutils.log' not in sys.modules
|
||||
|
||||
|
||||
def do_override():
|
||||
@@ -69,9 +77,19 @@ def do_override():
|
||||
ensure_local_distutils()
|
||||
|
||||
|
||||
class _TrivialRe:
|
||||
def __init__(self, *patterns):
|
||||
self._patterns = patterns
|
||||
|
||||
def match(self, string):
|
||||
return all(pat in string for pat in self._patterns)
|
||||
|
||||
|
||||
class DistutilsMetaFinder:
|
||||
def find_spec(self, fullname, path, target=None):
|
||||
if path is not None:
|
||||
# optimization: only consider top level modules and those
|
||||
# found in the CPython test suite.
|
||||
if path is not None and not fullname.startswith('test.'):
|
||||
return
|
||||
|
||||
method_name = 'spec_for_{fullname}'.format(**locals())
|
||||
@@ -79,18 +97,45 @@ class DistutilsMetaFinder:
|
||||
return method()
|
||||
|
||||
def spec_for_distutils(self):
|
||||
if self.is_cpython():
|
||||
return
|
||||
|
||||
import importlib
|
||||
import importlib.abc
|
||||
import importlib.util
|
||||
|
||||
class DistutilsLoader(importlib.abc.Loader):
|
||||
try:
|
||||
mod = importlib.import_module('setuptools._distutils')
|
||||
except Exception:
|
||||
# There are a couple of cases where setuptools._distutils
|
||||
# may not be present:
|
||||
# - An older Setuptools without a local distutils is
|
||||
# taking precedence. Ref #2957.
|
||||
# - Path manipulation during sitecustomize removes
|
||||
# setuptools from the path but only after the hook
|
||||
# has been loaded. Ref #2980.
|
||||
# In either case, fall back to stdlib behavior.
|
||||
return
|
||||
|
||||
class DistutilsLoader(importlib.abc.Loader):
|
||||
def create_module(self, spec):
|
||||
return importlib.import_module('setuptools._distutils')
|
||||
mod.__name__ = 'distutils'
|
||||
return mod
|
||||
|
||||
def exec_module(self, module):
|
||||
pass
|
||||
|
||||
return importlib.util.spec_from_loader('distutils', DistutilsLoader())
|
||||
return importlib.util.spec_from_loader(
|
||||
'distutils', DistutilsLoader(), origin=mod.__file__
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def is_cpython():
|
||||
"""
|
||||
Suppress supplying distutils for CPython (build and tests).
|
||||
Ref #2965 and #3007.
|
||||
"""
|
||||
return os.path.isfile('pybuilddir.txt')
|
||||
|
||||
def spec_for_pip(self):
|
||||
"""
|
||||
@@ -102,22 +147,71 @@ class DistutilsMetaFinder:
|
||||
clear_distutils()
|
||||
self.spec_for_distutils = lambda: None
|
||||
|
||||
@staticmethod
|
||||
def pip_imported_during_build():
|
||||
@classmethod
|
||||
def pip_imported_during_build(cls):
|
||||
"""
|
||||
Detect if pip is being imported in a build script. Ref #2355.
|
||||
"""
|
||||
import traceback
|
||||
|
||||
return any(
|
||||
frame.f_globals['__file__'].endswith('setup.py')
|
||||
for frame, line in traceback.walk_stack(None)
|
||||
cls.frame_file_is_setup(frame) for frame, line in traceback.walk_stack(None)
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def frame_file_is_setup(frame):
|
||||
"""
|
||||
Return True if the indicated frame suggests a setup.py file.
|
||||
"""
|
||||
# some frames may not have __file__ (#2940)
|
||||
return frame.f_globals.get('__file__', '').endswith('setup.py')
|
||||
|
||||
def spec_for_sensitive_tests(self):
|
||||
"""
|
||||
Ensure stdlib distutils when running select tests under CPython.
|
||||
|
||||
python/cpython#91169
|
||||
"""
|
||||
clear_distutils()
|
||||
self.spec_for_distutils = lambda: None
|
||||
|
||||
sensitive_tests = (
|
||||
[
|
||||
'test.test_distutils',
|
||||
'test.test_peg_generator',
|
||||
'test.test_importlib',
|
||||
]
|
||||
if sys.version_info < (3, 10)
|
||||
else [
|
||||
'test.test_distutils',
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
for name in DistutilsMetaFinder.sensitive_tests:
|
||||
setattr(
|
||||
DistutilsMetaFinder,
|
||||
f'spec_for_{name}',
|
||||
DistutilsMetaFinder.spec_for_sensitive_tests,
|
||||
)
|
||||
|
||||
|
||||
DISTUTILS_FINDER = DistutilsMetaFinder()
|
||||
|
||||
|
||||
def add_shim():
|
||||
DISTUTILS_FINDER in sys.meta_path or insert_shim()
|
||||
|
||||
|
||||
class shim:
|
||||
def __enter__(self):
|
||||
insert_shim()
|
||||
|
||||
def __exit__(self, exc, value, tb):
|
||||
remove_shim()
|
||||
|
||||
|
||||
def insert_shim():
|
||||
sys.meta_path.insert(0, DISTUTILS_FINDER)
|
||||
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
import os; var = 'SETUPTOOLS_USE_DISTUTILS'; enabled = os.environ.get(var, 'stdlib') == 'local'; enabled and __import__('_distutils_hack').add_shim();
|
||||
import os; var = 'SETUPTOOLS_USE_DISTUTILS'; enabled = os.environ.get(var, 'local') == 'local'; enabled and __import__('_distutils_hack').add_shim();
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -9,73 +9,99 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: django\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-21 10:22+0200\n"
|
||||
"POT-Creation-Date: 2023-06-05 10:42+0200\n"
|
||||
"PO-Revision-Date: 2021-11-09 07:39+0000\n"
|
||||
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
|
||||
"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: fr\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/actions.py:16
|
||||
#, python-format
|
||||
msgid "Delete selected %(verbose_name_plural)s"
|
||||
msgstr "Supprimer les %(verbose_name_plural)s sélectionnés"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/actions.py:46
|
||||
#, python-format
|
||||
msgid "Successfully deleted %(count)d %(items)s."
|
||||
msgstr "La suppression de %(count)d %(items)s a réussi."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/actions.py:55
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1901
|
||||
#, python-format
|
||||
msgid "Cannot delete %(name)s"
|
||||
msgstr "Impossible de supprimer %(name)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/actions.py:57
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1903
|
||||
msgid "Are you sure?"
|
||||
msgstr "Êtes-vous sûr ?"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/apps.py:13
|
||||
msgid "Administration"
|
||||
msgstr "Administration"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:108
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:213
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:249
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:284
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:403
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:469
|
||||
msgid "All"
|
||||
msgstr "Tout"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:250
|
||||
msgid "Yes"
|
||||
msgstr "Oui"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:251
|
||||
msgid "No"
|
||||
msgstr "Non"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:262
|
||||
msgid "Unknown"
|
||||
msgstr "Inconnu"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:332
|
||||
msgid "Any date"
|
||||
msgstr "Toutes les dates"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:333
|
||||
msgid "Today"
|
||||
msgstr "Aujourd’hui"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:337
|
||||
msgid "Past 7 days"
|
||||
msgstr "Les 7 derniers jours"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:341
|
||||
msgid "This month"
|
||||
msgstr "Ce mois-ci"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:345
|
||||
msgid "This year"
|
||||
msgstr "Cette année"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:353
|
||||
msgid "No date"
|
||||
msgstr "Aucune date"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:354
|
||||
msgid "Has date"
|
||||
msgstr "Possède une date"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:470
|
||||
msgid "Empty"
|
||||
msgstr "Vide"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/filters.py:471
|
||||
msgid "Not empty"
|
||||
msgstr "Non vide"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/forms.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please enter the correct %(username)s and password for a staff account. Note "
|
||||
@@ -85,109 +111,146 @@ msgstr ""
|
||||
"passe » d'un compte autorisé. Sachez que les deux champs peuvent être "
|
||||
"sensibles à la casse."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/helpers.py:23
|
||||
msgid "Action:"
|
||||
msgstr "Action :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/helpers.py:350
|
||||
#, python-format
|
||||
msgid "Add another %(verbose_name)s"
|
||||
msgstr "Ajouter un objet %(verbose_name)s supplémentaire"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/helpers.py:353
|
||||
msgid "Remove"
|
||||
msgstr "Enlever"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:17
|
||||
msgid "Addition"
|
||||
msgstr "Ajout"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:18
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/app_list.html:28
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html:16
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html:36
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html:11
|
||||
msgid "Change"
|
||||
msgstr "Modification"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:19
|
||||
msgid "Deletion"
|
||||
msgstr "Suppression"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:41
|
||||
msgid "action time"
|
||||
msgstr "date de l’action"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:48
|
||||
msgid "user"
|
||||
msgstr "utilisateur"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:53
|
||||
msgid "content type"
|
||||
msgstr "type de contenu"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:56
|
||||
msgid "object id"
|
||||
msgstr "id de l’objet"
|
||||
|
||||
#. Translators: 'repr' means representation
|
||||
#. (https://docs.python.org/library/functions.html#repr)
|
||||
#. Translators: 'repr' means representation (https://docs.python.org/library/functions.html#repr)
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:58
|
||||
msgid "object repr"
|
||||
msgstr "représentation de l’objet"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:59
|
||||
msgid "action flag"
|
||||
msgstr "indicateur de l’action"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:61
|
||||
msgid "change message"
|
||||
msgstr "message de modification"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:66
|
||||
msgid "log entry"
|
||||
msgstr "entrée d’historique"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:67
|
||||
msgid "log entries"
|
||||
msgstr "entrées d’historique"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:76
|
||||
#, python-format
|
||||
msgid "Added “%(object)s”."
|
||||
msgstr "Ajout de « %(object)s »."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:78
|
||||
#, python-format
|
||||
msgid "Changed “%(object)s” — %(changes)s"
|
||||
msgstr "Modification de « %(object)s » — %(changes)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:83
|
||||
#, python-format
|
||||
msgid "Deleted “%(object)s.”"
|
||||
msgstr "Suppression de « %(object)s »."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:85
|
||||
msgid "LogEntry Object"
|
||||
msgstr "Objet de journal"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:111
|
||||
#, python-brace-format
|
||||
msgid "Added {name} “{object}”."
|
||||
msgstr "Ajout de {name} « {object} »."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:113
|
||||
msgid "Added."
|
||||
msgstr "Ajout."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:117
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:2136
|
||||
msgid "and"
|
||||
msgstr "et"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:121
|
||||
#, python-brace-format
|
||||
msgid "Changed {fields} for {name} “{object}”."
|
||||
msgstr "Modification de {fields} pour l'objet {name} « {object} »."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:125
|
||||
#, python-brace-format
|
||||
msgid "Changed {fields}."
|
||||
msgstr "Modification de {fields}."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:129
|
||||
#, python-brace-format
|
||||
msgid "Deleted {name} “{object}”."
|
||||
msgstr "Suppression de {name} « {object} »."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/models.py:132
|
||||
msgid "No fields changed."
|
||||
msgstr "Aucun champ modifié."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:202
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:234
|
||||
msgid "None"
|
||||
msgstr "Aucun(e)"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:280
|
||||
msgid "Hold down “Control”, or “Command” on a Mac, to select more than one."
|
||||
msgstr ""
|
||||
"Maintenez appuyé « Ctrl », ou « Commande (touche pomme) » sur un Mac, pour "
|
||||
"en sélectionner plusieurs."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1232
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1256
|
||||
#, python-brace-format
|
||||
msgid "The {name} “{obj}” was added successfully."
|
||||
msgstr "L'objet {name} « {obj} » a été ajouté avec succès."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1234
|
||||
msgid "You may edit it again below."
|
||||
msgstr "Vous pouvez l’éditer à nouveau ci-dessous."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1246
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"The {name} “{obj}” was added successfully. You may add another {name} below."
|
||||
@@ -195,6 +258,7 @@ msgstr ""
|
||||
"L’objet {name} « {obj} » a été ajouté avec succès. Vous pouvez ajouter un "
|
||||
"autre objet « {name} » ci-dessous."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1296
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"The {name} “{obj}” was changed successfully. You may edit it again below."
|
||||
@@ -202,12 +266,14 @@ msgstr ""
|
||||
"L’objet {name} « {obj} » a été modifié avec succès. Vous pouvez l’éditer à "
|
||||
"nouveau ci-dessous."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1306
|
||||
#, python-brace-format
|
||||
msgid "The {name} “{obj}” was added successfully. You may edit it again below."
|
||||
msgstr ""
|
||||
"L’objet {name} « {obj} » a été ajouté avec succès. Vous pouvez l’éditer à "
|
||||
"nouveau ci-dessous."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1319
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"The {name} “{obj}” was changed successfully. You may add another {name} "
|
||||
@@ -216,10 +282,13 @@ msgstr ""
|
||||
"L’objet {name} « {obj} » a été modifié avec succès. Vous pouvez ajouter un "
|
||||
"autre objet {name} ci-dessous."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1331
|
||||
#, python-brace-format
|
||||
msgid "The {name} “{obj}” was changed successfully."
|
||||
msgstr "L’objet {name} « {obj} » a été modifié avec succès."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1408
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1742
|
||||
msgid ""
|
||||
"Items must be selected in order to perform actions on them. No items have "
|
||||
"been changed."
|
||||
@@ -227,60 +296,73 @@ msgstr ""
|
||||
"Des éléments doivent être sélectionnés afin d’appliquer les actions. Aucun "
|
||||
"élément n’a été modifié."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1427
|
||||
msgid "No action selected."
|
||||
msgstr "Aucune action sélectionnée."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1452
|
||||
#, python-format
|
||||
msgid "The %(name)s “%(obj)s” was deleted successfully."
|
||||
msgstr "L’objet %(name)s « %(obj)s » a été supprimé avec succès."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1538
|
||||
#, python-format
|
||||
msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?"
|
||||
msgstr ""
|
||||
"%(name)s avec l’identifiant « %(key)s » n’existe pas. Peut-être a-t-il été "
|
||||
"supprimé ?"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1637
|
||||
#, python-format
|
||||
msgid "Add %s"
|
||||
msgstr "Ajout de %s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1639
|
||||
#, python-format
|
||||
msgid "Change %s"
|
||||
msgstr "Modification de %s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1641
|
||||
#, python-format
|
||||
msgid "View %s"
|
||||
msgstr "Affichage de %s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1720
|
||||
msgid "Database error"
|
||||
msgstr "Erreur de base de données"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1789
|
||||
#, python-format
|
||||
msgid "%(count)s %(name)s was changed successfully."
|
||||
msgid_plural "%(count)s %(name)s were changed successfully."
|
||||
msgstr[0] "%(count)s objet %(name)s a été modifié avec succès."
|
||||
msgstr[1] "%(count)s objets %(name)s ont été modifiés avec succès."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1820
|
||||
#, python-format
|
||||
msgid "%(total_count)s selected"
|
||||
msgid_plural "All %(total_count)s selected"
|
||||
msgstr[0] "%(total_count)s sélectionné"
|
||||
msgstr[1] "Tous les %(total_count)s sélectionnés"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1828
|
||||
#, python-format
|
||||
msgid "0 of %(cnt)s selected"
|
||||
msgstr "0 sur %(cnt)s sélectionné"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:1948
|
||||
#, python-format
|
||||
msgid "Change history: %s"
|
||||
msgstr "Historique des changements : %s"
|
||||
|
||||
#. Translators: Model verbose name and instance representation,
|
||||
#. suitable to be an item in a list.
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:2129
|
||||
#, python-format
|
||||
msgid "%(class_name)s %(instance)s"
|
||||
msgstr "%(class_name)s %(instance)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/options.py:2138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Deleting %(class_name)s %(instance)s would require deleting the following "
|
||||
@@ -289,40 +371,74 @@ msgstr ""
|
||||
"Supprimer l’objet %(class_name)s « %(instance)s » provoquerait la "
|
||||
"suppression des objets liés et protégés suivants : %(related_objects)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/sites.py:48
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/base_site.html:3
|
||||
msgid "Django site admin"
|
||||
msgstr "Site d’administration de Django"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/sites.py:51
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/base_site.html:6
|
||||
msgid "Django administration"
|
||||
msgstr "Administration de Django"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/sites.py:54
|
||||
msgid "Site administration"
|
||||
msgstr "Site d’administration"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/sites.py:402
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/login.html:63
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html:15
|
||||
#: venv/Lib/site-packages/django/contrib/admin/tests.py:135
|
||||
msgid "Log in"
|
||||
msgstr "Connexion"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/sites.py:547
|
||||
#, python-format
|
||||
msgid "%(app)s administration"
|
||||
msgstr "Administration de %(app)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/404.html:4
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/404.html:8
|
||||
msgid "Page not found"
|
||||
msgstr "Page non trouvée"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/404.html:10
|
||||
msgid "We’re sorry, but the requested page could not be found."
|
||||
msgstr "Nous sommes désolés, mais la page demandée est introuvable."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/500.html:6
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/app_index.html:9
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html:10
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/base.html:66
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form.html:18
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list.html:31
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html:14
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html:14
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/invalid_setup.html:6
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/object_history.html:6
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/logged_out.html:4
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_done.html:6
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html:6
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_done.html:6
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_form.html:7
|
||||
msgid "Home"
|
||||
msgstr "Accueil"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/500.html:7
|
||||
msgid "Server error"
|
||||
msgstr "Erreur du serveur"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/500.html:11
|
||||
msgid "Server error (500)"
|
||||
msgstr "Erreur du serveur (500)"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/500.html:14
|
||||
msgid "Server Error <em>(500)</em>"
|
||||
msgstr "Erreur du serveur <em>(500)</em>"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/500.html:15
|
||||
msgid ""
|
||||
"There’s been an error. It’s been reported to the site administrators via "
|
||||
"email and should be fixed shortly. Thanks for your patience."
|
||||
@@ -331,35 +447,48 @@ msgstr ""
|
||||
"administrateurs du site et sera corrigée dans les meilleurs délais. Merci "
|
||||
"pour votre patience."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/actions.html:8
|
||||
msgid "Run the selected action"
|
||||
msgstr "Exécuter l’action sélectionnée"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/actions.html:8
|
||||
msgid "Go"
|
||||
msgstr "Envoyer"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/actions.html:16
|
||||
msgid "Click here to select the objects across all pages"
|
||||
msgstr "Cliquez ici pour sélectionner tous les objets sur l’ensemble des pages"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/actions.html:16
|
||||
#, python-format
|
||||
msgid "Select all %(total_count)s %(module_name)s"
|
||||
msgstr "Sélectionner tous les %(total_count)s %(module_name)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/actions.html:18
|
||||
msgid "Clear selection"
|
||||
msgstr "Effacer la sélection"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/app_list.html:8
|
||||
#, python-format
|
||||
msgid "Models in the %(name)s application"
|
||||
msgstr "Modèles de l’application %(name)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/app_list.html:19
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html:18
|
||||
msgid "Add"
|
||||
msgstr "Ajouter"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/app_list.html:26
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html:16
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html:36
|
||||
msgid "View"
|
||||
msgstr "Afficher"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/app_list.html:39
|
||||
msgid "You don’t have permission to view or edit anything."
|
||||
msgstr "Vous n’avez pas la permission de voir ou de modifier quoi que ce soit."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html:6
|
||||
msgid ""
|
||||
"First, enter a username and password. Then, you’ll be able to edit more user "
|
||||
"options."
|
||||
@@ -367,65 +496,106 @@ msgstr ""
|
||||
"Saisissez tout d’abord un nom d’utilisateur et un mot de passe. Vous pourrez "
|
||||
"ensuite modifier plus d’options."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html:8
|
||||
msgid "Enter a username and password."
|
||||
msgstr "Saisissez un nom d’utilisateur et un mot de passe."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html:14
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html:52
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/base.html:53
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_done.html:3
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html:4
|
||||
msgid "Change password"
|
||||
msgstr "Modifier le mot de passe"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html:25
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form.html:43
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list.html:51
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/login.html:23
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html:18
|
||||
msgid "Please correct the error below."
|
||||
msgstr "Corrigez l’erreur ci-dessous."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html:25
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form.html:43
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list.html:51
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/login.html:23
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html:18
|
||||
msgid "Please correct the errors below."
|
||||
msgstr "Corrigez les erreurs ci-dessous."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html:29
|
||||
#, python-format
|
||||
msgid "Enter a new password for the user <strong>%(username)s</strong>."
|
||||
msgstr ""
|
||||
"Saisissez un nouveau mot de passe pour l’utilisateur <strong>%(username)s</"
|
||||
"strong>."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/base.html:39
|
||||
msgid "Welcome,"
|
||||
msgstr "Bienvenue,"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/base.html:44
|
||||
msgid "View site"
|
||||
msgstr "Voir le site"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/base.html:49
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_done.html:3
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html:4
|
||||
msgid "Documentation"
|
||||
msgstr "Documentation"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/base.html:55
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_done.html:3
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html:4
|
||||
msgid "Log out"
|
||||
msgstr "Déconnexion"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form.html:21
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_object_tools.html:8
|
||||
#, python-format
|
||||
msgid "Add %(name)s"
|
||||
msgstr "Ajouter %(name)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form_object_tools.html:5
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/object_history.html:10
|
||||
msgid "History"
|
||||
msgstr "Historique"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form_object_tools.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html:18
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html:38
|
||||
msgid "View on site"
|
||||
msgstr "Voir sur le site"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list.html:76
|
||||
msgid "Filter"
|
||||
msgstr "Filtre"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list.html:78
|
||||
msgid "Clear all filters"
|
||||
msgstr "Effacer tous les filtres"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_results.html:17
|
||||
msgid "Remove from sorting"
|
||||
msgstr "Enlever du tri"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_results.html:18
|
||||
#, python-format
|
||||
msgid "Sorting priority: %(priority_number)s"
|
||||
msgstr "Priorité de tri : %(priority_number)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_results.html:19
|
||||
msgid "Toggle sorting"
|
||||
msgstr "Inverser le tri"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html:18
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/submit_line.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html:25
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
|
||||
@@ -436,6 +606,7 @@ msgstr ""
|
||||
"suppression des objets qui lui sont liés, mais votre compte ne possède pas "
|
||||
"la permission de supprimer les types d’objets suivants :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html:31
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the "
|
||||
@@ -444,6 +615,7 @@ msgstr ""
|
||||
"Supprimer l’objet %(object_name)s « %(escaped_object)s » provoquerait la "
|
||||
"suppression des objets liés et protégés suivants :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html:38
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
|
||||
@@ -453,18 +625,26 @@ msgstr ""
|
||||
"« %(escaped_object)s » ? Les éléments suivants sont liés à celui-ci et "
|
||||
"seront aussi supprimés :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html:40
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html:39
|
||||
msgid "Objects"
|
||||
msgstr "Objets"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html:47
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html:50
|
||||
msgid "Yes, I’m sure"
|
||||
msgstr "Oui, je suis sûr"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html:48
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html:51
|
||||
msgid "No, take me back"
|
||||
msgstr "Non, revenir à la page précédente"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html:17
|
||||
msgid "Delete multiple objects"
|
||||
msgstr "Supprimer plusieurs objets"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Deleting the selected %(objects_name)s would result in deleting related "
|
||||
@@ -475,6 +655,7 @@ msgstr ""
|
||||
"suppression d’objets liés, mais votre compte n’est pas autorisé à supprimer "
|
||||
"les types d’objet suivants :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html:30
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Deleting the selected %(objects_name)s would require deleting the following "
|
||||
@@ -483,6 +664,7 @@ msgstr ""
|
||||
"La suppression des objets %(objects_name)s sélectionnés provoquerait la "
|
||||
"suppression des objets liés et protégés suivants :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html:37
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Are you sure you want to delete the selected %(objects_name)s? All of the "
|
||||
@@ -491,28 +673,36 @@ msgstr ""
|
||||
"Voulez-vous vraiment supprimer les objets %(objects_name)s sélectionnés ? "
|
||||
"Tous les objets suivants et les éléments liés seront supprimés :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html:22
|
||||
msgid "Delete?"
|
||||
msgstr "Supprimer ?"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/filter.html:2
|
||||
#, python-format
|
||||
msgid " By %(filter_title)s "
|
||||
msgstr " Par %(filter_title)s "
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/includes/object_delete_summary.html:2
|
||||
msgid "Summary"
|
||||
msgstr "Résumé"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/index.html:23
|
||||
msgid "Recent actions"
|
||||
msgstr "Actions récentes"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/index.html:24
|
||||
msgid "My actions"
|
||||
msgstr "Mes actions"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/index.html:28
|
||||
msgid "None available"
|
||||
msgstr "Aucun(e) disponible"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/index.html:42
|
||||
msgid "Unknown content"
|
||||
msgstr "Contenu inconnu"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/invalid_setup.html:12
|
||||
msgid ""
|
||||
"Something’s wrong with your database installation. Make sure the appropriate "
|
||||
"database tables have been created, and make sure the database is readable by "
|
||||
@@ -522,6 +712,7 @@ msgstr ""
|
||||
"tables utiles ont été créées, et que la base est accessible par "
|
||||
"l’utilisateur concerné."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/login.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You are authenticated as %(username)s, but are not authorized to access this "
|
||||
@@ -531,27 +722,35 @@ msgstr ""
|
||||
"autorisé à accéder à cette page. Souhaitez-vous vous connecter avec un autre "
|
||||
"compte utilisateur ?"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/login.html:59
|
||||
msgid "Forgotten your password or username?"
|
||||
msgstr "Mot de passe ou nom d’utilisateur oublié ?"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/nav_sidebar.html:2
|
||||
msgid "Toggle navigation"
|
||||
msgstr "Basculer la navigation"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/nav_sidebar.html:5
|
||||
msgid "Start typing to filter…"
|
||||
msgstr "Écrivez ici pour filtrer…"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/nav_sidebar.html:6
|
||||
msgid "Filter navigation items"
|
||||
msgstr "Filtrer les éléments de navigation"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/object_history.html:22
|
||||
msgid "Date/time"
|
||||
msgstr "Date/heure"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/object_history.html:23
|
||||
msgid "User"
|
||||
msgstr "Utilisateur"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/object_history.html:24
|
||||
msgid "Action"
|
||||
msgstr "Action"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/object_history.html:38
|
||||
msgid ""
|
||||
"This object doesn’t have a change history. It probably wasn’t added via this "
|
||||
"admin site."
|
||||
@@ -559,67 +758,89 @@ msgstr ""
|
||||
"Cet objet n’a pas d’historique de modification. Il n’a probablement pas été "
|
||||
"ajouté au moyen de ce site d’administration."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/pagination.html:10
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/search_form.html:9
|
||||
msgid "Show all"
|
||||
msgstr "Tout afficher"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/pagination.html:11
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/submit_line.html:4
|
||||
msgid "Save"
|
||||
msgstr "Enregistrer"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/popup_response.html:3
|
||||
msgid "Popup closing…"
|
||||
msgstr "Fenêtre en cours de fermeture…"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/search_form.html:7
|
||||
msgid "Search"
|
||||
msgstr "Rechercher"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/search_form.html:9
|
||||
#, python-format
|
||||
msgid "%(counter)s result"
|
||||
msgid_plural "%(counter)s results"
|
||||
msgstr[0] "%(counter)s résultat"
|
||||
msgstr[1] "%(counter)s résultats"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/search_form.html:9
|
||||
#, python-format
|
||||
msgid "%(full_result_count)s total"
|
||||
msgstr "%(full_result_count)s résultats"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/submit_line.html:9
|
||||
msgid "Save as new"
|
||||
msgstr "Enregistrer en tant que nouveau"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/submit_line.html:10
|
||||
msgid "Save and add another"
|
||||
msgstr "Enregistrer et ajouter un nouveau"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/submit_line.html:11
|
||||
msgid "Save and continue editing"
|
||||
msgstr "Enregistrer et continuer les modifications"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/submit_line.html:11
|
||||
msgid "Save and view"
|
||||
msgstr "Enregistrer et afficher"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/submit_line.html:12
|
||||
msgid "Close"
|
||||
msgstr "Fermer"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html:10
|
||||
#, python-format
|
||||
msgid "Change selected %(model)s"
|
||||
msgstr "Modifier l’objet %(model)s sélectionné"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html:17
|
||||
#, python-format
|
||||
msgid "Add another %(model)s"
|
||||
msgstr "Ajouter un autre objet %(model)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html:24
|
||||
#, python-format
|
||||
msgid "Delete selected %(model)s"
|
||||
msgstr "Supprimer l’objet %(model)s sélectionné"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/logged_out.html:10
|
||||
msgid "Thanks for spending some quality time with the web site today."
|
||||
msgstr "Merci pour le temps que vous avez accordé à ce site aujourd’hui."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/logged_out.html:12
|
||||
msgid "Log in again"
|
||||
msgstr "Connectez-vous à nouveau"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_done.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html:8
|
||||
msgid "Password change"
|
||||
msgstr "Modification du mot de passe"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_done.html:12
|
||||
msgid "Your password was changed."
|
||||
msgstr "Votre mot de passe a été modifié."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html:23
|
||||
msgid ""
|
||||
"Please enter your old password, for security’s sake, and then enter your new "
|
||||
"password twice so we can verify you typed it in correctly."
|
||||
@@ -628,19 +849,27 @@ msgstr ""
|
||||
"nouveau mot de passe à deux reprises afin de vérifier qu’il est correctement "
|
||||
"saisi."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html:51
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html:31
|
||||
msgid "Change my password"
|
||||
msgstr "Modifier mon mot de passe"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_done.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_form.html:8
|
||||
msgid "Password reset"
|
||||
msgstr "Réinitialisation du mot de passe"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html:13
|
||||
msgid "Your password has been set. You may go ahead and log in now."
|
||||
msgstr ""
|
||||
"Votre mot de passe a été défini. Vous pouvez maintenant vous authentifier."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html:8
|
||||
msgid "Password reset confirmation"
|
||||
msgstr "Confirmation de mise à jour du mot de passe"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html:16
|
||||
msgid ""
|
||||
"Please enter your new password twice so we can verify you typed it in "
|
||||
"correctly."
|
||||
@@ -648,12 +877,15 @@ msgstr ""
|
||||
"Saisissez deux fois votre nouveau mot de passe afin de vérifier qu’il est "
|
||||
"correctement saisi."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html:23
|
||||
msgid "New password:"
|
||||
msgstr "Nouveau mot de passe :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html:28
|
||||
msgid "Confirm password:"
|
||||
msgstr "Confirmation du mot de passe :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html:37
|
||||
msgid ""
|
||||
"The password reset link was invalid, possibly because it has already been "
|
||||
"used. Please request a new password reset."
|
||||
@@ -662,6 +894,7 @@ msgstr ""
|
||||
"raison de sa précédente utilisation. Veuillez renouveler votre demande de "
|
||||
"mise à jour de mot de passe."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_done.html:13
|
||||
msgid ""
|
||||
"We’ve emailed you instructions for setting your password, if an account "
|
||||
"exists with the email you entered. You should receive them shortly."
|
||||
@@ -670,6 +903,7 @@ msgstr ""
|
||||
"passe, pour autant qu’un compte existe avec l’adresse que vous avez "
|
||||
"indiquée. Vous devriez recevoir rapidement ce message."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_done.html:15
|
||||
msgid ""
|
||||
"If you don’t receive an email, please make sure you’ve entered the address "
|
||||
"you registered with, and check your spam folder."
|
||||
@@ -678,6 +912,7 @@ msgstr ""
|
||||
"avec laquelle vous vous êtes enregistré et contrôlez votre dossier de "
|
||||
"pourriels."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_email.html:2
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You're receiving this email because you requested a password reset for your "
|
||||
@@ -686,20 +921,25 @@ msgstr ""
|
||||
"Vous recevez ce message en réponse à votre demande de réinitialisation du "
|
||||
"mot de passe de votre compte sur %(site_name)s."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_email.html:4
|
||||
msgid "Please go to the following page and choose a new password:"
|
||||
msgstr ""
|
||||
"Veuillez vous rendre sur cette page et choisir un nouveau mot de passe :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_email.html:8
|
||||
msgid "Your username, in case you’ve forgotten:"
|
||||
msgstr "Votre nom d’utilisateur, en cas d’oubli :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_email.html:10
|
||||
msgid "Thanks for using our site!"
|
||||
msgstr "Merci d’utiliser notre site !"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_email.html:12
|
||||
#, python-format
|
||||
msgid "The %(site_name)s team"
|
||||
msgstr "L’équipe %(site_name)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_form.html:14
|
||||
msgid ""
|
||||
"Forgotten your password? Enter your email address below, and we’ll email "
|
||||
"instructions for setting a new one."
|
||||
@@ -707,38 +947,49 @@ msgstr ""
|
||||
"Mot de passe perdu ? Saisissez votre adresse électronique ci-dessous et nous "
|
||||
"vous enverrons les instructions pour en créer un nouveau."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_form.html:20
|
||||
msgid "Email address:"
|
||||
msgstr "Adresse électronique :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_form.html:23
|
||||
msgid "Reset my password"
|
||||
msgstr "Réinitialiser mon mot de passe"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/templatetags/admin_list.py:391
|
||||
msgid "All dates"
|
||||
msgstr "Toutes les dates"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/views/main.py:103
|
||||
#, python-format
|
||||
msgid "Select %s"
|
||||
msgstr "Sélectionnez %s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/views/main.py:105
|
||||
#, python-format
|
||||
msgid "Select %s to change"
|
||||
msgstr "Sélectionnez l’objet %s à changer"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/views/main.py:107
|
||||
#, python-format
|
||||
msgid "Select %s to view"
|
||||
msgstr "Sélectionnez l’objet %s à afficher"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/widgets.py:87
|
||||
msgid "Date:"
|
||||
msgstr "Date :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/widgets.py:88
|
||||
msgid "Time:"
|
||||
msgstr "Heure :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/widgets.py:150
|
||||
msgid "Lookup"
|
||||
msgstr "Recherche"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/widgets.py:340
|
||||
msgid "Currently:"
|
||||
msgstr "Actuellement :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admin/widgets.py:341
|
||||
msgid "Change:"
|
||||
msgstr "Modifier :"
|
||||
|
Binary file not shown.
@@ -7,31 +7,59 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: django\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-01-15 09:00+0100\n"
|
||||
"POT-Creation-Date: 2023-06-05 10:42+0200\n"
|
||||
"PO-Revision-Date: 2021-01-15 14:25+0000\n"
|
||||
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
|
||||
"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: fr\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/apps.py:7
|
||||
msgid "Administrative Documentation"
|
||||
msgstr "Documentation technique"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html:6
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:6
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/missing_docutils.html:6
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:14
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_index.html:8
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html:6
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html:6
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html:7
|
||||
msgid "Home"
|
||||
msgstr "Accueil"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:10
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:14
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/missing_docutils.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/missing_docutils.html:14
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:15
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_index.html:9
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html:8
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html:8
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html:7
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html:8
|
||||
msgid "Documentation"
|
||||
msgstr "Documentation"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html:8
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:29
|
||||
msgid "Bookmarklets"
|
||||
msgstr "Signets"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html:11
|
||||
msgid "Documentation bookmarklets"
|
||||
msgstr "Documentation des signets"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html:15
|
||||
msgid ""
|
||||
"To install bookmarklets, drag the link to your bookmarks toolbar, or right-"
|
||||
"click the link and add it to your bookmarks. Now you can select the "
|
||||
@@ -41,9 +69,11 @@ msgstr ""
|
||||
"marques-pages, ou effectuez un clic droit sur le lien et ajoutez-le. "
|
||||
"Maintenant, vous pouvez le sélectionner depuis n'importe quelle page du site."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html:22
|
||||
msgid "Documentation for this page"
|
||||
msgstr "Documentation pour cette page"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html:23
|
||||
msgid ""
|
||||
"Jumps you from any page to the documentation for the view that generates "
|
||||
"that page."
|
||||
@@ -51,15 +81,21 @@ msgstr ""
|
||||
"Vous envoie de n'importe quelle page vers la documentation de la vue qui a "
|
||||
"généré cette page."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:17
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html:9
|
||||
msgid "Tags"
|
||||
msgstr "Balises"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:18
|
||||
msgid "List of all the template tags and their functions."
|
||||
msgstr "Liste de toutes les balises de gabarit et leur fonction."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:20
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html:9
|
||||
msgid "Filters"
|
||||
msgstr "Filtres"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:21
|
||||
msgid ""
|
||||
"Filters are actions which can be applied to variables in a template to alter "
|
||||
"the output."
|
||||
@@ -67,9 +103,14 @@ msgstr ""
|
||||
"Les filtres sont des actions qui peuvent être appliquées à des variables "
|
||||
"dans un gabarit pour modifier leur valeur affichée."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:23
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:16
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_index.html:10
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_index.html:14
|
||||
msgid "Models"
|
||||
msgstr "Modèles"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:24
|
||||
msgid ""
|
||||
"Models are descriptions of all the objects in the system and their "
|
||||
"associated fields. Each model has a list of fields which can be accessed as "
|
||||
@@ -79,9 +120,14 @@ msgstr ""
|
||||
"champs associés. Chaque modèle possède une liste de champs auxquels on peut "
|
||||
"accéder comme pour les variables de gabarit"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:26
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html:8
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html:9
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html:12
|
||||
msgid "Views"
|
||||
msgstr "Vues"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:27
|
||||
msgid ""
|
||||
"Each page on the public site is generated by a view. The view defines which "
|
||||
"template is used to generate the page and which objects are available to "
|
||||
@@ -91,14 +137,17 @@ msgstr ""
|
||||
"gabarit utilisé pour générer la page ainsi que les objets qui sont "
|
||||
"disponibles dans le gabarit."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html:30
|
||||
msgid "Tools for your browser to quickly access admin functionality."
|
||||
msgstr ""
|
||||
"Outils permettant au navigateur d'accéder rapidement aux fonctionnalités de "
|
||||
"l'interface d'administration."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/missing_docutils.html:10
|
||||
msgid "Please install docutils"
|
||||
msgstr "Veuillez installer docutils"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/missing_docutils.html:17
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The admin documentation system requires Python’s <a href=\"%(link)s"
|
||||
@@ -107,6 +156,7 @@ msgstr ""
|
||||
"Le système de documentation de l'interface d'administration nécessite la "
|
||||
"bibliothèque Python <a href=\"%(link)s\">docutils</a>."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/missing_docutils.html:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please ask your administrators to install <a href=\"%(link)s\">docutils</a>."
|
||||
@@ -114,71 +164,94 @@ msgstr ""
|
||||
"Demandez à votre administrateur système d'installer <a href=\"%(link)s"
|
||||
"\">docutils</a>."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:21
|
||||
#, python-format
|
||||
msgid "Model: %(name)s"
|
||||
msgstr "Modèle : %(name)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:30
|
||||
msgid "Fields"
|
||||
msgstr "Champs"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:35
|
||||
msgid "Field"
|
||||
msgstr "Champ"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:36
|
||||
msgid "Type"
|
||||
msgstr "Type"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:37
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:60
|
||||
msgid "Description"
|
||||
msgstr "Description"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:53
|
||||
msgid "Methods with arguments"
|
||||
msgstr "Méthodes avec paramètres"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:58
|
||||
msgid "Method"
|
||||
msgstr "Méthode"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:59
|
||||
msgid "Arguments"
|
||||
msgstr "Paramètres"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html:76
|
||||
msgid "Back to Model documentation"
|
||||
msgstr "Retour à la documentation des modèles"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_index.html:18
|
||||
msgid "Model documentation"
|
||||
msgstr "Documentation des modèles"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_index.html:43
|
||||
msgid "Model groups"
|
||||
msgstr "Groupes de modèles"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html:8
|
||||
msgid "Templates"
|
||||
msgstr "Gabarits"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html:13
|
||||
#, python-format
|
||||
msgid "Template: %(name)s"
|
||||
msgstr "Gabarit : %(name)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html:16
|
||||
#, python-format
|
||||
msgid "Template: <q>%(name)s</q>"
|
||||
msgstr "Gabarit : <q>%(name)s</q>"
|
||||
|
||||
#. Translators: Search is not a verb here, it qualifies path (a search path)
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html:19
|
||||
#, python-format
|
||||
msgid "Search path for template <q>%(name)s</q>:"
|
||||
msgstr "Chemin de recherche du gabarit <q>%(name)s</q> :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html:22
|
||||
msgid "(does not exist)"
|
||||
msgstr "(n'existe pas)"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html:26
|
||||
msgid "Back to Documentation"
|
||||
msgstr "Retour à la documentation"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html:12
|
||||
msgid "Template filters"
|
||||
msgstr "Filtres de gabarit"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html:16
|
||||
msgid "Template filter documentation"
|
||||
msgstr "Documentation des filtres de gabarit"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html:22
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html:43
|
||||
msgid "Built-in filters"
|
||||
msgstr "Filtres intégrés"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"To use these filters, put <code>%(code)s</code> in your template before "
|
||||
@@ -187,15 +260,20 @@ msgstr ""
|
||||
"Pour utiliser ces filtres, placez <code>%(code)s</code> dans votre gabarit "
|
||||
"avant d'utiliser un des filtres."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html:12
|
||||
msgid "Template tags"
|
||||
msgstr "Balises de gabarit"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html:16
|
||||
msgid "Template tag documentation"
|
||||
msgstr "Documentation des balises de gabarit"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html:22
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html:43
|
||||
msgid "Built-in tags"
|
||||
msgstr "Balises intégrées"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"To use these tags, put <code>%(code)s</code> in your template before using "
|
||||
@@ -204,35 +282,45 @@ msgstr ""
|
||||
"Pour utiliser ces balises, placez <code>%(code)s</code> dans le gabarit "
|
||||
"avant d'utiliser une des balises."
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html:12
|
||||
#, python-format
|
||||
msgid "View: %(name)s"
|
||||
msgstr "Vue : %(name)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html:23
|
||||
msgid "Context:"
|
||||
msgstr "Contexte :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html:28
|
||||
msgid "Templates:"
|
||||
msgstr "Gabarits :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html:32
|
||||
msgid "Back to View documentation"
|
||||
msgstr "Retour à la documentation des vues"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html:16
|
||||
msgid "View documentation"
|
||||
msgstr "Documentation des vues"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html:22
|
||||
msgid "Jump to namespace"
|
||||
msgstr "Aller à l'espace de noms"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html:27
|
||||
msgid "Empty namespace"
|
||||
msgstr "Espace de noms vide"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html:40
|
||||
#, python-format
|
||||
msgid "Views by namespace %(name)s"
|
||||
msgstr "Vues par espace de noms %(name)s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html:42
|
||||
msgid "Views by empty namespace"
|
||||
msgstr "Vues par espace de noms vide"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html:49
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -243,43 +331,70 @@ msgstr ""
|
||||
"Fonction de vue : <code>%(full_name)s</code>. Nom : <code>%(url_name)s</"
|
||||
"code>.\n"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:73
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:74
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:76
|
||||
msgid "tag:"
|
||||
msgstr "mot-clé :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:104
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:105
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:107
|
||||
msgid "filter:"
|
||||
msgstr "filtre :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:166
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:167
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:169
|
||||
msgid "view:"
|
||||
msgstr "vue :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:196
|
||||
#, python-format
|
||||
msgid "App %(app_label)r not found"
|
||||
msgstr "L'application %(app_label)r n'a pas été trouvée"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:200
|
||||
#, python-format
|
||||
msgid "Model %(model_name)r not found in app %(app_label)r"
|
||||
msgstr ""
|
||||
"Le modèle %(model_name)r n'a pas été trouvé dans l'application %(app_label)r"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:205
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:206
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:221
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:244
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:249
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:264
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:306
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:311
|
||||
msgid "model:"
|
||||
msgstr "modèle :"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:217
|
||||
#, python-format
|
||||
msgid "the related `%(app_label)s.%(data_type)s` object"
|
||||
msgstr "l'objet « %(app_label)s.%(data_type)s » en relation"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:237
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:298
|
||||
#, python-format
|
||||
msgid "related `%(app_label)s.%(object_name)s` objects"
|
||||
msgstr "les objets « %(app_label)s.%(object_name)s » en relation"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:244
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:306
|
||||
#, python-format
|
||||
msgid "all %s"
|
||||
msgstr "tous les %s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:249
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:311
|
||||
#, python-format
|
||||
msgid "number of %s"
|
||||
msgstr "nombre de %s"
|
||||
|
||||
#: venv/Lib/site-packages/django/contrib/admindocs/views.py:403
|
||||
#, python-format
|
||||
msgid "%s does not appear to be a urlpattern object"
|
||||
msgstr "%s ne semble pas être un objet urlpattern"
|
||||
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user