Browse Source

update core and add history

Mr Duhaz 1 year ago
parent
commit
da0b3d382d

+ 82 - 0
.gitignore

@@ -277,3 +277,85 @@ system/__pycache__/urls.cpython-311.pyc
 system/__pycache__/wsgi.cpython-36.pyc
 system/__pycache__/wsgi.cpython-38.pyc
 system/__pycache__/wsgi.cpython-311.pyc
+parc_info/migrations/__pycache__/__init__.cpython-312.pyc
+parc_info/migrations/__pycache__/0001_initial.cpython-312.pyc
+parc_info/migrations/__pycache__/0002_pic_pic_chassi_type.cpython-312.pyc
+parc_info/migrations/__pycache__/0003_auto_20210726_0931.cpython-312.pyc
+parc_info/migrations/__pycache__/0004_auto_20210812_0853.cpython-312.pyc
+parc_info/migrations/__pycache__/0005_auto_20210812_0931.cpython-312.pyc
+parc_info/migrations/__pycache__/0006_services.cpython-312.pyc
+parc_info/migrations/__pycache__/0007_auto_20210818_0900.cpython-312.pyc
+parc_info/migrations/__pycache__/0008_pis_pis_l_site.cpython-312.pyc
+parc_info/migrations/__pycache__/0009_remove_pis_pis_site.cpython-312.pyc
+parc_info/migrations/__pycache__/0010_auto_20210825_1037.cpython-312.pyc
+parc_info/migrations/__pycache__/0011_remove_pis_pic_commentaires.cpython-312.pyc
+parc_info/migrations/__pycache__/0012_auto_20210830_1016.cpython-312.pyc
+parc_info/migrations/__pycache__/0013_pic_pic_l_statut.cpython-312.pyc
+parc_info/migrations/__pycache__/0014_auto_20210830_1350.cpython-312.pyc
+parc_info/migrations/__pycache__/0015_auto_20210909_1009.cpython-312.pyc
+parc_info/migrations/__pycache__/0016_alter_taches_tache_date_terminee.cpython-312.pyc
+parc_info/migrations/__pycache__/0017_alter_taches_tache_date_terminee.cpython-312.pyc
+parc_info/migrations/__pycache__/0018_auto_20210909_1309.cpython-312.pyc
+parc_info/migrations/__pycache__/0019_auto_20210909_1310.cpython-312.pyc
+parc_info/migrations/__pycache__/0020_auto_20210909_1554.cpython-312.pyc
+parc_info/migrations/__pycache__/0021_auto_20210913_0901.cpython-312.pyc
+parc_info/migrations/__pycache__/0022_auto_20210913_1151.cpython-312.pyc
+parc_info/migrations/__pycache__/0023_alter_pic_pic_adresse_mac.cpython-312.pyc
+parc_info/migrations/__pycache__/0024_auto_20210915_1336.cpython-312.pyc
+parc_info/migrations/__pycache__/0025_pic_pic_is_autonome.cpython-312.pyc
+parc_info/migrations/__pycache__/0026_remove_pic_pic_autonome.cpython-312.pyc
+parc_info/migrations/__pycache__/0027_auto_20211008_0951.cpython-312.pyc
+parc_info/migrations/__pycache__/0028_pic_pic_with_snow.cpython-312.pyc
+parc_info/migrations/__pycache__/0029_auto_20211019_0859.cpython-312.pyc
+parc_info/migrations/__pycache__/0030_pic_tmp_pic_ram.cpython-312.pyc
+parc_info/migrations/__pycache__/0031_remove_pic_pic_ram.cpython-312.pyc
+parc_info/migrations/__pycache__/0032_pic_pic_ram.cpython-312.pyc
+parc_info/migrations/__pycache__/0033_alter_pic_tmp_pic_ram.cpython-312.pyc
+parc_info/migrations/__pycache__/0034_remove_pic_tmp_pic_ram.cpython-312.pyc
+parc_info/migrations/__pycache__/0035_auto_20211110_1011.cpython-312.pyc
+parc_info/migrations/__pycache__/0036_auto_20211213_0951.cpython-312.pyc
+parc_info/migrations/__pycache__/0037_auto_20211214_0749.cpython-312.pyc
+parc_info/migrations/__pycache__/0038_auto_20220113_1349.cpython-312.pyc
+parc_info/migrations/__pycache__/0039_auto_20220223_1006.cpython-312.pyc
+parc_info/migrations/__pycache__/0040_pic_pic_l_service.cpython-312.pyc
+parc_info/migrations/__pycache__/0041_auto_20220316_1435.cpython-312.pyc
+parc_info/migrations/__pycache__/0042_auto_20220317_0753.cpython-312.pyc
+parc_info/migrations/__pycache__/0043_port_link_pl_commentaires.cpython-312.pyc
+parc_info/migrations/__pycache__/0044_alter_port_link_pl_headbang_plug.cpython-312.pyc
+parc_info/migrations/__pycache__/0045_port_link_pl_vlan.cpython-312.pyc
+parc_info/migrations/__pycache__/0046_alter_swich_sw_nom.cpython-312.pyc
+parc_info/migrations/__pycache__/0047_pic_pic_utilisateur_fq.cpython-312.pyc
+parc_info/migrations/__pycache__/0048_alter_pic_pic_adresse_ip.cpython-312.pyc
+parc_info/migrations/__pycache__/0049_auto_20220712_1013.cpython-312.pyc
+parc_info/migrations/__pycache__/0050_delete_taches.cpython-312.pyc
+parc_info/migrations/__pycache__/0051_auto_20220728_1531.cpython-312.pyc
+parc_info/migrations/__pycache__/0052_auto_20220901_1007.cpython-312.pyc
+parc_info/migrations/__pycache__/0053_swich_sw_archive.cpython-312.pyc
+parc_info/migrations/__pycache__/0054_auto_20220912_1356.cpython-312.pyc
+parc_info/migrations/__pycache__/0055_auto_20220921_1159.cpython-312.pyc
+parc_info/migrations/__pycache__/0056_auto_20221018_0831.cpython-312.pyc
+parc_info/migrations/__pycache__/0057_alter_port_link_pl_port.cpython-312.pyc
+parc_info/migrations/__pycache__/0058_auto_20221121_1117.cpython-312.pyc
+parc_info/migrations/__pycache__/0059_auto_20221123_0750.cpython-312.pyc
+parc_info/migrations/__pycache__/0060_auto_20221201_1558.cpython-312.pyc
+parc_info/migrations/__pycache__/0061_auto_20221201_1608.cpython-312.pyc
+parc_info/migrations/__pycache__/0062_auto_20221209_0831.cpython-312.pyc
+parc_info/migrations/__pycache__/0063_pis_pis_with_web.cpython-312.pyc
+parc_info/migrations/__pycache__/0064_pis_pis_friendly_name.cpython-312.pyc
+parc_info/migrations/__pycache__/0065_auto_20230308_0928.cpython-312.pyc
+parc_info/migrations/__pycache__/0066_accessory_link.cpython-312.pyc
+parc_info/migrations/__pycache__/0067_auto_20230315_1353.cpython-312.pyc
+parc_info/migrations/__pycache__/0068_auto_20230315_1354.cpython-312.pyc
+parc_info/migrations/__pycache__/0069_auto_20230524_0821.cpython-312.pyc
+parc_info/migrations/__pycache__/0070_accessory_link_accessory_on_list.cpython-312.pyc
+parc_info/migrations/__pycache__/0071_auto_20230524_1427.cpython-312.pyc
+parc_info/migrations/__pycache__/0072_auto_20230706_1541.cpython-312.pyc
+parc_info/migrations/__pycache__/0073_auto_20231127_1036.cpython-312.pyc
+parc_info/migrations/__pycache__/0074_alter_pic_pic_type.cpython-312.pyc
+parc_info/migrations/__pycache__/0075_pic_pic_site.cpython-312.pyc
+parc_info/migrations/__pycache__/0076_alter_pic_pic_site.cpython-312.pyc
+parc_info/migrations/__pycache__/0077_auto_20231229_1104.cpython-312.pyc
+parc_info/migrations/__pycache__/0078_baie_baie_site_ng.cpython-312.pyc
+parc_info/migrations/__pycache__/0079_auto_20231229_1406.cpython-312.pyc
+parc_info/migrations/__pycache__/0080_pis_pis_site.cpython-312.pyc
+parc_info/migrations/__pycache__/0081_auto_20231229_1423.cpython-312.pyc

+ 4 - 2
core/templates/base.html

@@ -29,6 +29,7 @@
 		background-size: 20%,cover;
 		background-repeat: no-repeat;
 		background-attachment: fixed;
+		font-size: 15px;
 	}
 	.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {
 		font-family: Omnes;
@@ -45,12 +46,13 @@
 		{% if page.p_menu_haut %}
 		<ul class="navbar-nav mr-auto">
 		{% regroup page.p_menu_haut by p_menu_parent as menu_with_parent %}
-		{% for p_menu_parent in menu_with_parent %}
+
+		{% for p_menu_parent in menu_with_parent%}
 			{% if p_menu_parent.grouper != none %}
 			<div class="navbar-nav dropdown">
 			<a class="nav-link dropdown-toggle mr-5" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fas fa-bars" ></i> {{ p_menu_parent.grouper }}</a>
 				<div class="dropdown-menu" style="margin-top: 28px; margin-left: 5px;" aria-labelledby="navbarDropdownMenuLink">
-				{% for item in p_menu_parent.list %}
+				{% for item in p_menu_parent.list|dictsortreversed:"p_menu_poid" %}
 					<a class="dropdown-item" {%if item.p_type == "lien_ext" %}target="_blank"{% endif %}  href="{{item.p_adresse}}">{% if item.p_icone %}<i class="{{item.p_icone}}" ></i> {% endif %}{{item.p_titre}}</a></li>
 				{% endfor %}
 				</div>

+ 1 - 1
core/views.py

@@ -22,7 +22,7 @@ def get_get_value(request):
 
 def gen_menu(position):
 	try:
-		menu = Page.objects.exclude(p_publier = 0).filter(p_menu_position = position).order_by('-p_menu_poid')
+		menu = Page.objects.all().exclude(p_publier = 0).filter(p_menu_position = position).order_by('p_menu_parent')
 	except:
 		menu = Page.objects.none()
 	return menu

+ 14 - 0
parc_info/api.py

@@ -283,6 +283,20 @@ def user_get_info(request, id_user):
 		
 	return HttpResponse(html)
 
+def user_get_hist(request, id_user):
+	template = loader.get_template('parc_info_api_user_get_hist.html')
+	tmp = PIC.objects.get(id = id_user)
+	print(id_user)
+	print(tmp)
+	data_query = PIC_History.objects.filter(H_PIC = tmp).order_by('-H_Date')
+	print(data_query)
+
+	html = template.render({
+			'data_query': data_query,
+		}, request)
+		
+	return HttpResponse(html)
+
 def user_start_novnc(request, cl_hostname):
 	print(cl_hostname)
 	cl_hostname = cl_hostname + ":5900"

+ 1 - 1
parc_info/models.py

@@ -118,7 +118,7 @@ class PIC(models.Model):
 
 class PIC_History(models.Model):
 	H_PIC = models.ForeignKey("PIC", on_delete=models.CASCADE)
-	H_Date = models.DateTimeField("Date crée", auto_now_add=True)
+	H_Date = models.DateTimeField("Date", auto_now_add=True)
 	H_Commentaire = models.TextField("Historique")
 	
 	def __str__(self):

+ 1 - 0
parc_info/templates/parc_info_api_user_get.html

@@ -67,6 +67,7 @@
 			{% endif %}
 
 			{% if item.PIC_L_Chassi_Type == "IMP" and item.PIC_Adresse_IP != none %}<a class="btn btn-dark" href="http://{{item.PIC_Adresse_IP}}" target="_blank" role="button"><i class="fas fa-external-link-alt"></i> WebAdmin</a>{% endif %}
+			<button type="button" class="btn btn-dark" onclick="bt_get_user_hist({{item.id}})"><i class="fas fa-history"></i> Historiques</button>
 			<button type="button" class="btn btn-dark" onclick="bt_edit_user_info({{item.id}})"><i class="far fa-edit"></i> Mise à jour</button>
 			<button type="button" class="btn btn-dark" onclick="bt_edit_user_statut({{item.id}})"><i class="fas fa-tasks"></i> Changer Status</button>
 		</div>

+ 31 - 0
parc_info/templates/parc_info_api_user_get_hist.html

@@ -0,0 +1,31 @@
+<div class="modal-dialog modal-lg" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title">Historique d'un poste utilisateur</h5>
+			<button type="button" class="btn btn-sm btn-dark close" data-dismiss="modal" aria-label="Close">
+			<span aria-hidden="true">&times;</span>
+			</button>
+		</div>
+		<div class="modal-body">
+			<table class="table table-hover">
+				<thead class="thead-dark">
+					<tr>
+						<th scope="col">Date</th>
+						<th scope="col" >Commentraire</th>
+					</tr>
+				</thead>
+				<tbody>
+				{% for item in data_query %}
+					<tr>
+						<td>{{item.H_Date}}</td>
+						<td>{{item.H_Commentaire}}</td>
+					</tr>
+				{% empty %}
+					<tr><td colspan="2">Pas d'historique pour ce poste.</td></tr>
+				{% endfor %}
+				</tbody>
+			</table>
+		</div>
+		<div class="modal-footer"></div>
+	</div>
+</div>

+ 3 - 2
parc_info/templates/parc_info_api_user_get_imp.html

@@ -26,7 +26,7 @@
 				<tr>
 			{% endif %}
 				<td><i class="fas fa-print" title="[IMP]"></i></td>
-				<td>{% if item.PIC_Site.CLIN_Anag != none %}{{item.PIC_Site}}{% else %}&nbsp;{% endif %}</td>
+				<td>{% if item.PIC_Site != none %}{{item.PIC_Site}}{% else %}&nbsp;{% endif %}</td>
 				<td>{% if item.PIC_Service != none %}{{item.PIC_Service}}{% else %}&nbsp;{% endif %}</td>
 				<td>{% if item.PIC_Nom_netbios != none %}<span onmouseover="this.style.cursor='pointer';" onclick="bt_get_user_info({{item.id}})">{{item.PIC_Nom_netbios}}</span>{% else %}&nbsp;{% endif %}</td>
 				<td>{% if item.PIC_Marque != none or item.PIC_Type != none%}{{item.PIC_Marque}}<br>{{item.PIC_Type}}{% else %}&nbsp;{% endif %}</td>
@@ -36,8 +36,9 @@
 				<td onmouseover="this.style.cursor='pointer';">
 					{% if item.PIC_L_Chassi_Type == "IMP" and item.PIC_Adresse_IP != none %}<a href="http://{{item.PIC_Adresse_IP}}" class="text-reset" target="_blank" title="[Web admin]"><i class="fas fa-external-link-alt"></i></a>&nbsp;{% endif %}
 					<i class="fas fa-search-plus" onclick="bt_get_user_info({{item.id}})" title="[Détail]"></i>&nbsp;
+					<i class="fas fa-history" onclick="bt_get_user_hist({{item.id}})" title="[Historique]"></i>&nbsp;
 					<i class="far fa-edit" onclick="bt_edit_user_info({{item.id}})" title="[Modifier]"></i>&nbsp;
-					<i class="fas fa-tasks" onclick="bt_edit_user_statut({{item.id}})" title="[Option supplémentaire]"></i>&nbsp;
+					<i class="fas fa-tasks" onclick="bt_edit_user_statut({{item.id}})" title="[Option supplémentaire]"></i>
 				</td>
 			</tr>
 		{% endfor %}

+ 2 - 1
parc_info/templates/parc_info_api_user_get_list.html

@@ -71,8 +71,9 @@
 				<td onmouseover="this.style.cursor='pointer';">
 					{% if item.PIC_L_Chassi_Type == "IMP" and item.PIC_Adresse_IP != none %}<a href="http://{{item.PIC_Adresse_IP}}" class="text-reset" target="_blank" title="[Web admin]"><i class="fas fa-external-link-alt"></i></a>&nbsp;{% endif %}
 					<i class="fas fa-search-plus" onclick="bt_get_user_info({{item.id}})" title="[Détail]"></i>&nbsp;
+					<i class="fas fa-history" onclick="bt_get_user_hist({{item.id}})" title="[Historique]"></i>&nbsp;
 					<i class="far fa-edit" onclick="bt_edit_user_info({{item.id}})" title="[Modifier]"></i>&nbsp;
-					<i class="fas fa-tasks" onclick="bt_edit_user_statut({{item.id}})" title="[Option supplémentaire]"></i>&nbsp;
+					<i class="fas fa-tasks" onclick="bt_edit_user_statut({{item.id}})" title="[Option supplémentaire]"></i>
 				</td>
 			</tr>
 		{% endfor %}

+ 10 - 0
parc_info/templates/parc_info_user_index.html

@@ -4,6 +4,7 @@
 
 {% block modals%}
 <div class="modal" id="mo_user_get_info" tabindex="-1" role="dialog"></div>
+<div class="modal" id="mo_user_get_hist" tabindex="-1" role="dialog"></div>
 <div class="modal" id="mo_user_edit_info" data-backdrop="static" tabindex="-1" role="dialog"></div>
 <div class="modal" id="mo_services_info" tabindex="-1" role="dialog">
 	<div class="modal-dialog modal-sm" role="document">
@@ -64,6 +65,15 @@ function bt_get_user_info(id){
 			},
 	});
 };
+function bt_get_user_hist(id){
+	$.ajax({
+			type : 'GET',
+			url: '/parc/api/clients/get_hist/'+id,
+			success: function(data) {
+				$('#mo_user_get_hist').html(data).modal('toggle');
+			},
+	});
+};
 function bt_edit_user_info(id){
 	var get_search = document.getElementById("id_PSearch").value
 	$.ajax({

+ 1 - 1
parc_info/urls.py

@@ -30,7 +30,7 @@ urlpatterns = [
 	#api clients
 	path('api/clients/get_list', api.user_get_list, name='parc_info_api_user_get_list'),
 	re_path('api/clients/get_user/(?P<id_user>\d+)', api.user_get_info, name='parc_info_api_user_get_info'),
-	#path('api/clients/add_user', api.user_edit_info, {'id_user': None}, name='parc_info_api_user_add_info'),
+	re_path('api/clients/get_hist/(?P<id_user>\d+)', api.user_get_hist, name='parc_info_api_user_get_hist'),
 	re_path('api/clients/edit_user/(?P<id_user>\d+)', api.user_edit_info, name='parc_info_api_user_edit_info'),
 	re_path('api/clients/edit_statut/(?P<id_user>\d+)', api.user_edit_statut, name='parc_info_api_user_edit_statut'),
 	re_path('api/clients/novnc/(?P<cl_hostname>[a-zA-Z0-9_.,-]+)', api.user_start_novnc, name='parc_info_api_user_start_novnc'),

+ 4 - 4
parc_info/views.py

@@ -520,7 +520,7 @@ def user_show_list_imp(request):
 	page.p_right = "&nbsp"
 	page.p_include = "parc_info_api_user_get_imp.html"
 	
-	data_query = PIC.objects.filter(PIC_L_Chassi_Type = 'IMP').order_by('PIC_Site.CLIN_Anag','PIC_Service__SERVICE_Nom','PIC_NUnic')
+	data_query = PIC.objects.filter(PIC_L_Chassi_Type = 'IMP').order_by('PIC_Site__CLIN_Anag','PIC_Service__SERVICE_Nom','PIC_NUnic')
 	
 	html = template.render({
 			'page': page,
@@ -534,8 +534,8 @@ def stat_user_by_service(request):
 	page = gen_page_base()
 	template = loader.get_template('parc_info_stat_user_by_service.html')
 
-	items =  PIC.objects.exclude(PIC_L_Statut__in = ['INAPTE', 'EN STOCK']).exclude(PIC_L_Chassi_Type = 'IMP' ).order_by('PIC_Site.CLIN_Anag','PIC_Service__SERVICE_Nom')
-	items_imp = PIC.objects.exclude(PIC_L_Statut__in = ['INAPTE', 'EN STOCK']).filter(PIC_L_Chassi_Type = 'IMP' ).order_by('PIC_Site.CLIN_Anag','PIC_Service__SERVICE_Nom')
+	items =  PIC.objects.exclude(PIC_L_Statut__in = ['INAPTE', 'EN STOCK']).exclude(PIC_L_Chassi_Type = 'IMP' ).order_by('PIC_Site__CLIN_Anag','PIC_Service__SERVICE_Nom')
+	items_imp = PIC.objects.exclude(PIC_L_Statut__in = ['INAPTE', 'EN STOCK']).filter(PIC_L_Chassi_Type = 'IMP' ).order_by('PIC_Site__CLIN_Anag','PIC_Service__SERVICE_Nom')
 
 	for item in items:
 		item.accessoir = Accessory_Link.objects.filter(pic = item)
@@ -553,7 +553,7 @@ def stat_user_without_snow(request):
 	page = gen_page_base()
 	template = loader.get_template('parc_info_stat_user_without_snow.html')
 
-	item =  PIC.objects.exclude(PIC_L_Statut__in = ['INAPTE', 'EN STOCK']).filter(PIC_L_Chassi_Type__in = ['PC','PORTABLE','PANEL-PC']).filter(PIC_with_Snow = False).order_by('PIC_Site.CLIN_Anag','PIC_Service__SERVICE_Nom')
+	item =  PIC.objects.exclude(PIC_L_Statut__in = ['INAPTE', 'EN STOCK']).filter(PIC_L_Chassi_Type__in = ['PC','PORTABLE','PANEL-PC']).filter(PIC_with_Snow = False).order_by('PIC_Site__CLIN_Anag','PIC_Service__SERVICE_Nom')
 
 	html = template.render({
 		'item': item,