Ver Fonte

update user gestion

Support IT MAJ há 1 ano atrás
pai
commit
07ebcacb6d

+ 17 - 10
gest_user/admin.py

@@ -3,26 +3,33 @@ from django.contrib import admin
 
 from .models import *
 
+class GES_APPLinkAdmin_TagInline(admin.TabularInline):
+	model = GES_APPLink
+	extra = 1
+	pass
+
 @admin.register(GES_Fonction)
 class GES_FonctionAdmin(admin.ModelAdmin):
-	#list_display = [field.name for field in GES_Fonction._meta.get_fields()]
+	pass
+
+@admin.register(GES_APPMat)
+class GES_APPMatAdmin(admin.ModelAdmin):
+	list_display = ('GES_Fonction', 'Select_GES_APPs', 'Select_GES_Service',)
+	filter_horizontal = ('GES_Service','GES_APPs',)
 	pass
 
 @admin.register(GES_APP)
 class GES_APPAdmin(admin.ModelAdmin):
-	#list_display = [field.name for field in GES_APP._meta.get_fields()]
+	list_display = ['GESAP_Nom', 'GESAP_ltype','GESAP_Procedure', 'GESAP_Actif', ]
 	pass
 
 @admin.register(GES_User)
 class GES_UserAdmin(admin.ModelAdmin):
-	#list_display = [field.name for field in GES_User._meta.get_fields()]
+	list_display = ['GES_Site', 'GES_Service', 'GES_Nom', 'GES_Prenom', ]
+	inlines = [GES_APPLinkAdmin_TagInline]
+	exclude = ('GES_APPs',)
+	list_filter = ('GES_Date',)
+	search_fields = ['GES_Nom', 'GES_Prenom']
 	pass
 
-@admin.register(GES_APPLink)
-class GES_APPLinkAdmin(admin.ModelAdmin):
-	list_display = ['GES_APPLink_User','GES_APPLink_APP','GES_APPLink_Create' ]
-	search_fields = ['GES_APPLink_User__GES_Nom', 'GES_APPLink_User__GES_Prenom', 'GES_APPLink_Login']
-	pass
-
-
 

+ 61 - 6
gest_user/api.py

@@ -54,7 +54,8 @@ def link_user_to_app(user_id, action):
 
 def user_get_list(request):
 	template = loader.get_template('gest_user_api_get_list.html')
-
+	#password = generate_phrase(length=12, min_words=2, max_words=5)
+	#print(password)
 	get_search = request.GET.get('get_search', '')
 	if get_search :
 		#print(get_search)
@@ -62,10 +63,10 @@ def user_get_list(request):
 										|Q(GES_Prenom__icontains=get_search)
 										|Q(GES_Service__SERVICE_Nom__icontains=get_search)
 										|Q(GES_Fonction__GESFC_Nom__icontains=get_search)
-										).order_by('GES_L_Site','GES_Service','GES_Fonction','GES_Nom','GES_Prenom')
+										).order_by('GES_Site','GES_Service','GES_Fonction','GES_Nom','GES_Prenom')
 	else :
 		#print("not get_search")
-		data_query = GES_User.objects.filter(GES_OK = False).order_by('GES_L_Site','GES_Service','GES_Fonction','GES_Nom','GES_Prenom')
+		data_query = GES_User.objects.filter(GES_OK = False).order_by('GES_Site','GES_Service','GES_Fonction','GES_Nom','GES_Prenom')
 
 	html = template.render({
 			'data_query': data_query,
@@ -76,9 +77,19 @@ def user_get_list(request):
 def user_get(request, id):
 	template = loader.get_template('gest_user_api_get.html')
 	item = GES_User.objects.get(id = id)
-	link_user_to_app(item.id, 'update')
+	#link_user_to_app(item.id, 'update')
 
 	item.apps = GES_APPLink.objects.filter(GES_APPLink_User = item.id)
+	item.apps_form = GES_APPLink_add_form(instance=item)
+
+	item.isok = 1
+	for app in item.apps:
+		if app.GES_APPLink_Create !=  True:
+			item.isok = 0
+
+	if item.isok == 0 and item.GES_OK == True:
+		item.GES_OK = False
+		item.save()
 
 	html = template.render({
 			'item': item,
@@ -89,7 +100,7 @@ def user_get(request, id):
 def user_get_for_send(request, id):
 	template = loader.get_template('gest_user_api_get_for_send.html')
 	item = GES_User.objects.get(id = id)
-	link_user_to_app(item.id, 'update')
+	#link_user_to_app(item.id, 'update')
 
 	item.apps = GES_APPLink.objects.filter(GES_APPLink_User = item.id)
 
@@ -119,6 +130,19 @@ def user_edit(request, id):
 		
 	return HttpResponse(html)
 
+def user_complete(request, id):
+	try:
+		item = GES_User.objects.get(id = id)
+	except:
+		return HttpResponse('Error')
+
+	if item.GES_OK == False :
+		item.GES_OK = True
+	else :
+		item.GES_OK = False
+	item.save()
+	return HttpResponse(item.id)
+
 def app_edit(request, id):
 	get_search = request.GET.get('get_search', '')
 	print(get_search)
@@ -140,6 +164,37 @@ def app_edit(request, id):
 		
 	return HttpResponse(html)
 
+def app_add(request, user_id, app_id):
+	try:
+		user = GES_User.objects.get(id = user_id)
+	except:
+		return HttpResponse('Error')
+	try:
+		app = GES_APP.objects.get(id = app_id)
+	except:
+		return HttpResponse('Error')
+	
+	app_login = genloginapp(user.id, app.id)
+	obj, created = GES_APPLink.objects.update_or_create(GES_APPLink_User= user, GES_APPLink_APP= app)
+	print(created)
+	obj.GES_APPLink_Login = app_login
+	obj.GES_APPLink_MDP=user.GES_Motdepasse
+	obj.GES_OK = False
+	obj.save()
+	
+	return HttpResponse(obj.GES_APPLink_User.id)
+
+def app_remove(request, id):
+	try:
+		item = GES_APPLink.objects.get(id = id)
+	except:
+		return HttpResponse('Error')
+
+	if item.GES_APPLink_Create == False:
+		item.delete()
+	
+	return HttpResponse(item.GES_APPLink_User.id)
+
 def switch_app_status(request, id):
 	try:
 		item = GES_APPLink.objects.get(id = id)
@@ -151,5 +206,5 @@ def switch_app_status(request, id):
 	else :
 		item.GES_APPLink_Create = False
 	item.save()
-	
+
 	return HttpResponse(item.GES_APPLink_User.id)

+ 53 - 1
gest_user/apps.py

@@ -1,7 +1,59 @@
+import sys
 from django.apps import AppConfig
 
-
 class GestUserConfig(AppConfig):
 	default_auto_field = 'django.db.models.BigAutoField'
 	name = 'gest_user'
 	verbose_name  = 'Gestion des Utilisateurs'
+
+	def ready(self):
+
+		if 'migrate' in sys.argv:
+			return
+
+		print("-- Démarage de la Gestion des Utilisateurs --")
+		print(">> Vérification des variables d'environement")
+
+		from core.models import Page
+		print(">>> Check pages system")
+		try :
+			page = Page.objects.get(p_titre_slugify = "user")
+		except :
+			page = Page()
+
+		page.p_titre = "Utilisateurs"
+		page.p_titre_slugify = "user"
+		page.p_icone = "fas fa-users"
+		page.p_adresse = "/user"
+		page.p_contenu = "Outils d'aide à la gestion des Utilisateurs de la clinique."
+		page.p_description = "Outils d'aide à la gestion des Utilisateurs de la clinique."
+		page.p_right = "<h3>Menu</h3><p><a href=\"/user/liste\" style=\"\">Liste des utilisateurs</a><br></p><p>Les applications métiers</p><p>Les fonctions</p>"
+		page.p_publier = False
+		page.p_menu_est_parent = True
+		page.p_type = "sys"
+		page.p_menu_position = "haut"
+		page.p_menu_poid = 90
+
+		page.save()
+		tmp_parent_id = page
+		
+		try :
+			page = Page.objects.get(p_titre_slugify = "liste-des-utilisateurs")
+		except :
+			page = Page()
+
+		page.p_titre = "Liste des Utilisateurs"
+		page.p_titre_slugify = "liste-des-utilisateurs"
+		page.p_icone = "fas fa-address-book"
+		page.p_adresse = "/user/liste"
+		page.p_contenu = ""
+		page.p_description = ""
+		page.p_right = ""
+		page.p_publier = True
+		page.p_menu_position = "haut"
+		page.p_menu_est_parent = False
+		page.p_menu_parent = tmp_parent_id
+		page.p_type = "sys"
+		page.p_menu_poid = 90
+
+		page.save()

+ 26 - 11
gest_user/templates/gest_user_api_get.html

@@ -1,6 +1,11 @@
+{% load crispy_forms_tags %}
 <div class="modal-dialog modal-lg" role="document">
 		<div class="modal-content">
-			<div class="modal-header">
+			{% if item.GES_OK == True %}
+				<div class="modal-header border-success bg-success">
+			{% else%}
+				<div class="modal-header">
+			{% endif %}
 				<h5 class="modal-title">Détail d'un utilisateur</h5>
 				<button type="button" class="btn btn-sm btn-dark close" data-dismiss="modal" aria-label="Close">
 				<span aria-hidden="true">&times;</span>
@@ -8,15 +13,15 @@
 			</div>
 			<div class="modal-body">
 				<table class="table table-sm">
-					<tr><td>Nom : </td><td> {{item.GES_Nom}} </td></tr>
-					<tr><td>Prénom : </td><td> {{item.GES_Prenom}} </td></tr>
-					<tr><td>Site : </td><td> {{item.get_GES_L_Site_display}} </td></tr>
+					<tr><td>Nom : </td><td><input type="text" readonly="readonly" value="{{item.GES_Nom}}"/></td></tr>
+					<tr><td>Prénom : </td><td><input type="text" readonly="readonly" value="{{item.GES_Prenom}}"/></td></tr>
+					<tr><td>Site : </td><td> {{item.GES_Site}} </td></tr>
 					<tr><td>Service : </td><td> {{item.GES_Service}} </td></tr>
 					<tr><td>Fonction : </td><td> {{item.GES_Fonction}} </td></tr>
+					<tr><td>Date d'arrivée : </td><td> {% if item.GES_Date %}{{item.GES_Date}}{% else %}&nbsp;{% endif %} </td></tr>
 				</table>
 
-				{% if item.apps %}
-				<h4>Liste des applications sélectionné avec le profil</h4>
+				<h4>Liste des applications sélectionnées avec le profil</h4>
 				<table class="table table-sm">
 					<tr>
 						<th scope="col">Nom de l'application</th>
@@ -26,18 +31,27 @@
 						<th scope="col">Outils</th>
 					</tr>
 					{% for apps in item.apps %}
+					{% spaceless %}
 						{% if apps.GES_APPLink_Create == True %}
 							<tr class="table-success">
 						{% else %}
 							<tr>
 						{% endif %}
-							<td> {{apps.GES_APPLink_APP.GESAP_Nom}} </td>
-							<td> {{apps.GES_APPLink_Login}} </td>
-							<td> {{apps.GES_APPLink_MDP}} </td>
+							<td>{{apps.GES_APPLink_APP.GESAP_Nom}}</td>
+							<td><input type="text" readonly="readonly" value="{{apps.GES_APPLink_Login}}"/></td>
+							<td><input type="text" readonly="readonly" value="{{apps.GES_APPLink_MDP}}"/></td>
 							<td onmouseover="this.style.cursor='pointer';" onclick="bt_switch_app_status({{apps.id}})">{% if apps.GES_APPLink_Create == True %} <span class="text-success"><i class="fas fa-clipboard-check" title="[ Crée ]"></i></span>{% else %}<i class="fas fa-clipboard-list" title="[ A Faire ]"></i> {% endif %}</td>
-							<td onmouseover="this.style.cursor='pointer';" onclick="bt_edit_app_info({{apps.id}})"><i class="fas fa-tools"></i></td>
+							<td onmouseover="this.style.cursor='pointer';">
+								{% if apps.GES_APPLink_APP.GESAP_Procedure != "" %}<span style="color: blue;"><a class="text-reset" target="_blank" href="{{ apps.GES_APPLink_APP.GESAP_Procedure }}"><i class="fas fa-info-circle"></i></a></span>&nbsp;{% endif %}
+								<span onclick="bt_edit_app_info({{apps.id}})"><i class="fas fa-tools"></i></span>&nbsp;
+								<span {% if apps.GES_APPLink_Create == False %}style="color: red;"{% endif %}{% if apps.GES_APPLink_Create == False %} onclick="bt_app_remove({{apps.id}})"{% endif %}><i class="fas fa-minus-square" {% if apps.GES_APPLink_Create == True %}title="Attention - La création de l'application doit étre annulé"{% endif %}></i></span>
+							</td>
 						</tr>
+					{% endspaceless %}
+					{% empty %}
+						<tr><td></td><td colspan='4'><i>Pas d'application d'associé</i></td></tr>
 					{% endfor %}
+					<tr><td>Ajout d'un application</td><td>{{item.apps_form.GES_APPLink_APP}}</td><td><button type="button" class="btn btn-success btn-sm" onclick="bt_app_add({{item.id}})"><i class="fas fa-plus-square"></i> Ajouté</button><td></tr>
 				</table>
 				<table class="table table-sm">
 				{% for apps in item.apps %}
@@ -51,12 +65,13 @@
 					{% endif %}
 				{% endfor %}
 				</table>
-				{% endif %}
+
 				<p><i class="fas fa-share-alt"></i> http://srv-gparc.intra.stjacques/user/liste?get_id={{item.id}}</p>
 			</div>
 
 
 		<div class="modal-footer">
+			{% if item.isok == 1 and item.GES_OK == False %}<button type="button" class="btn btn-success" onclick="bt_edit_complete({{item.id}})"><i class="fas fa-check"></i> Finaliser</button>{% endif %}
 			<a class="btn btn-dark" target="_blank" href="{% url 'gest_user_api_user_get_for_send' item.id %}" role="button"><i class="fa fa-print"></i> Pour impression</a>
 			<button type="button" class="btn btn-dark" onclick="bt_edit_info({{item.id}})"><i class="far fa-edit"></i> Mise à jour</button>
 		</div>

+ 57 - 1
gest_user/templates/gest_user_index.html

@@ -68,6 +68,27 @@ function bt_edit_app_info(id){
 			},
 	});
 };
+function bt_app_remove(id){
+	var get_search = document.getElementById("id_PSearch").value
+	$.ajax({
+			type : 'GET',
+			url: '/user/api/app/remove/'+id,
+			success: function(data) {
+				window.open("/user/liste?get_id="+data+"&get_search="+get_search, "_self" );
+			},
+	});
+};
+function bt_app_add(user_id){
+	var get_search = document.getElementById("id_PSearch").value;
+	var app_id = document.getElementById("id_GES_APPLink_APP").options[document.getElementById("id_GES_APPLink_APP").selectedIndex].value;
+	$.ajax({
+			type : 'GET',
+			url: '/user/api/app/add/'+user_id+'/'+app_id,
+			success: function(data) {
+				window.open("/user/liste?get_id="+data+"&get_search="+get_search, "_self" );
+			},
+	});
+}
 
 function bt_switch_app_status(id){
 	var get_search = document.getElementById("id_PSearch").value
@@ -80,6 +101,17 @@ function bt_switch_app_status(id){
 	});
 };
 
+function bt_edit_complete(id){
+	var get_search = document.getElementById("id_PSearch").value
+	$.ajax({
+			type : 'GET',
+			url: '/user/api/complete/'+id,
+			success: function(data) {
+				window.open("/user/liste?get_id="+data+"&get_search="+get_search, "_self" );
+			},
+	});
+};
+
 function bt_send_edit(){
 	document.getElementById("form_edit").submit();
 };
@@ -118,7 +150,31 @@ $(document).ready(function(){ onloading(); });
 	</div>
 	<p>{{page.p_right|safe}}</p>
 	<p>Dernier matricule APTA : {{page.lastapta}}</p>
-	<div class="d-grid gap-2 mb-2"><a class="btn btn-success" href="#" onclick="bt_edit_info(0)" role="button"><i class="fas fa-user-plus"></i> Ajouter un Utisateur</a></div>
+	<div class="d-grid gap-2 mb-2"><a class="btn btn-success" href="#" onclick="bt_edit_info(0)" role="button"><i class="fas fa-user-plus"></i> Ajouter un utilisateur</a></div>
+
+	{% if planning_query %}
+		<p>Agenda des comptes à crée :</p>
+		<table class="table table-hover">
+			<thead class="thead-dark">
+				<tr>
+					<th scope="col">&nbsp;</th>
+					<th scope="col">Service</th>
+					<th scope="col">Nom - Prénom</th>
+					<th scope="col">Date d'arrivée</th>
+				</tr>
+			</thead>
+			<tbody>
+			{% for item in planning_query%}
+			<tr>
+				<td onmouseover="this.style.cursor='pointer';"><i class="fas fa-search-plus" onclick="bt_get_info({{item.id}})"></i></td>
+				<td>{{item.GES_Service}}</td>
+				<td>{{item.GES_Nom}} {{item.GES_Prenom}}</td>
+				<td>{{item.GES_Date}}</td>
+			</tr>
+			{% endfor %}
+			</tbody>
+		</table>
+		{% endif %}
 
 </div>
 {% endblock %}

+ 5 - 0
gest_user/urls.py

@@ -6,13 +6,18 @@ from . import api
 
 urlpatterns = [
 
+	path('maintenance/update', views.update, name='gest_user_update'),
+
 	#api taches
 	path('api/get_list', api.user_get_list, name='gest_user_api_user_get_list'),
 	re_path('api/get/(?P<id>\d+)', api.user_get, name='gest_user_api_user_get'),
 	re_path('api/get/to-email/(?P<id>\d+)', api.user_get_for_send, name='gest_user_api_user_get_for_send'),
 	re_path('api/app/edit/(?P<id>\d+)', api.app_edit, name='gest_user_api_app_edit'),
 	re_path('api/app/switch/(?P<id>\d+)', api.switch_app_status, name='gest_user_api_switch_app_status'),
+	re_path('api/app/add/(?P<user_id>\d+)/(?P<app_id>\d+)', api.app_add, name='gest_user_api_app_add'),
+	re_path('api/app/remove/(?P<id>\d+)', api.app_remove, name='gest_user_api_app_remove'),
 	re_path('api/edit/(?P<id>\d+)', api.user_edit, name='gest_user_api_user_edit'),
+	re_path('api/complete/(?P<id>\d+)', api.user_complete, name='gest_user_api_user_complete'),
 
 	# client
 	path('liste', views.index, name='gest_user_index'),

+ 44 - 5
gest_user/views.py

@@ -15,7 +15,7 @@ from core.views import gen_page_base, gen_page_sys, get_get_value, get_data_valu
 from .models import *
 from .api import link_user_to_app
 
-#@login_required(login_url='core_login')
+@login_required(login_url='core_login')
 def index(request):
 	template = loader.get_template('gest_user_index.html')
 	page = gen_page_base()
@@ -24,7 +24,6 @@ def index(request):
 	get_id = request.GET.get('get_id', '')
 	page.lastapta = get_data_value('dernier-apta')
 	
-	
 	if get_search :
 		print(get_search)
 		page.search = get_search
@@ -32,13 +31,16 @@ def index(request):
 		print(get_id)
 		page.item_id = get_id
 	
-	page.p_adresse = reverse('parc_info_taches_show_list')
+	page.p_adresse = reverse('gest_user_index')
 	page.p_titre = "Listing des utilisateurs"
 	page.p_contenu = "Listing des utilisateurs"
 	page.p_right = "Les Outils :"
+
+	planning_query = GES_User.objects.exclude(GES_Date = None).filter(GES_OK = False).order_by('GES_Date', 'GES_Service', 'GES_Nom', 'GES_Prenom')
 	
 	html = template.render({
 			'page': page,
+			'planning_query': planning_query,
 			'user': request.user,
 		}, request)
 		
@@ -47,7 +49,7 @@ def index(request):
 def user_get(request, id):
 	template = loader.get_template('page.html')
 	page = gen_page_base()
-	page.p_adresse = reverse('parc_info_taches_show_list')
+	page.p_adresse = reverse('gest_user_index')
 	page.p_titre = "Détail d'un utilisateur"
 	page.p_contenu = "Détail d'un utilisateur"
 	page.p_right = ""
@@ -147,4 +149,41 @@ def app_edit(request, id):
 			'item': item,
 		}, request)
 		
-	return HttpResponse(html)
+	return HttpResponse(html)
+
+def update(request):
+	items = GES_User.objects.all()
+	# for item in items:
+	# 	if item.GES_L_Site == "GENT":
+	# 		item.GES_L_Site = "GEN"
+	# 	if item.GES_Site == None :
+	# 		site = Clinique.objects.get(CLIN_Anag = item.GES_L_Site)
+	# 		item.GES_Site = site
+	# 	item.save()
+
+	for item in items:
+		if item.GES_L_Service == None :
+			site = Clinique.objects.get(CLIN_Anag = "HPN")
+			service = Services.objects.get(SERVICE_Anag = item.GES_Service.SERVICE_Anag)
+			new_service, created = Clin_Services.objects.get_or_create(
+				SERVICE_Nom = service.SERVICE_Nom,
+				SERVICE_Anag = service.SERVICE_Anag,
+				defaults={'SERVICE_Clin': site},
+			)
+			item.GES_L_Service = new_service
+			item.save()
+		# if item.PIS_Site == None :
+		# 	print(" * Update *")
+		# 	site = Clinique.objects.get(CLIN_Anag = item.PIS_L_Site)
+		# 	print(site)
+		# 	item.PIS_Site = site
+		# 	item.save()
+		
+	# items = PIC.objects.all()
+	# for item in items:
+	# 	if item.PIC_Site.CLIN_Anag == "GENT":
+	# 		item.PIC_Site.CLIN_Anag = "GEN"
+	# 	if item.PIC_L_Statut == "OK":
+	# 		item.PIC_L_Statut = "RAS"
+	# 	item.save()
+	return HttpResponse("OK")