views.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. from django.shortcuts import render
  2. from django.template import loader
  3. from django.urls import reverse
  4. from django.utils import timezone
  5. from django.http import HttpResponse, HttpResponseRedirect
  6. from django.contrib import messages
  7. from django.contrib.auth.decorators import login_required
  8. from django.contrib.auth import authenticate, login, logout
  9. from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
  10. from django.contrib.auth.models import User
  11. from core.views import gen_page_base, gen_page_sys, get_get_value
  12. from .forms import *
  13. from .models import *
  14. from .api import test_last_client_NUnic
  15. def update(request):
  16. items = Baie.objects.all()
  17. for item in items:
  18. if item.BAIE_Site == "GENT":
  19. item.BAIE_Site = "GEN"
  20. item.save()
  21. # items = PIC.objects.all()
  22. # for item in items:
  23. # if item.PIC_L_Site == "GENT":
  24. # item.PIC_L_Site = "GEN"
  25. # if item.PIC_L_Statut == "OK":
  26. # item.PIC_L_Statut = "RAS"
  27. # item.save()
  28. return HttpResponse("OK")
  29. @login_required(login_url='core_login')
  30. def switch_show_list(request):
  31. template = loader.get_template('parc_info_switch_index.html')
  32. get_search = request.GET.get('get_search', '')
  33. get_id = request.GET.get('get_id', '')
  34. page = gen_page_base()
  35. if get_search :
  36. print(get_search)
  37. page.search = get_search
  38. if get_id :
  39. print(get_id)
  40. page.item_id = get_id
  41. page.p_adresse = reverse('parc_info_switch_show_list')
  42. page.p_titre = "Listing des Switchs"
  43. page.p_contenu = "Listing des Switch"
  44. page.p_right = "Les Outils :"
  45. html = template.render({
  46. 'page': page,
  47. 'user': request.user,
  48. }, request)
  49. return HttpResponse(html)
  50. def switch_edit_info(request, id):
  51. get_search = request.GET.get('get_search', '')
  52. template = loader.get_template('parc_info_switch_edit.html')
  53. if id == None or id == '0':
  54. item = Swich()
  55. else :
  56. item = Swich.objects.get(id = id)
  57. if request.method == 'POST':
  58. form = Edit_switch_form(request.POST, instance=item)
  59. if form.is_valid():
  60. form.save()
  61. get_value = "?get_id=" + str(item.id)
  62. if get_search:
  63. get_value = get_value + '&get_search=' + get_search
  64. return HttpResponseRedirect(reverse('parc_info_switch_show_list')+get_value)
  65. else:
  66. form = Edit_switch_form(instance=item)
  67. html = template.render({
  68. 'form': form,
  69. 'item': item,
  70. }, request)
  71. return HttpResponse(html)
  72. def switch_update_port(request, switch_id):
  73. get_search = request.GET.get('get_search', '')
  74. template = loader.get_template('parc_info_switch_update.html')
  75. item = Swich.objects.get(id = switch_id)
  76. if request.method == 'POST':
  77. form = Update_switch_port(request.POST, instance=item)
  78. if form.is_valid():
  79. form.save()
  80. get_value = "?get_id=" + str(item.id)
  81. if get_search:
  82. get_value = get_value + '&get_search=' + get_search
  83. item = Swich.objects.get(id = switch_id)
  84. print (item)
  85. update = item.SW_Update_Port.splitlines()
  86. if item.SW_OS == "HP":
  87. for line in update:
  88. line_split = line.split()
  89. print (line_split[0], line_split[5], line_split[6:])
  90. if line_split[5] != "1":
  91. try:
  92. port = Port_Link.objects.filter(PL_Swich = item).get(PL_Port_NG = line_split[0])
  93. print("a mettre a jour")
  94. except:
  95. print("a crée")
  96. port = Port_Link(PL_Swich = item, PL_Port_NG = line_split[0])
  97. port.PL_VLAN = line_split[5]
  98. port.PL_Commentaires = ' '.join(line_split[6:])
  99. port.save()
  100. elif item.SW_OS == "CISCO":
  101. for line in update:
  102. line_split = line.split()
  103. print (line_split[0], line_split[3], line_split[1])
  104. try:
  105. port = Port_Link.objects.filter(PL_Swich = item).get(PL_Port_NG = line_split[0])
  106. print("a mettre a jour")
  107. except:
  108. print("a crée")
  109. port = Port_Link(PL_Swich = item, PL_Port_NG = line_split[0])
  110. port.PL_VLAN = line_split[3]
  111. port.PL_Commentaires = line_split[1]
  112. port.save()
  113. elif item.SW_OS == "ARUBA":
  114. for line in update:
  115. line_split = line.split()
  116. if line_split[2] == "Down" or line_split[2] == "Up":
  117. print (line_split[0], line_split[7], line_split[1])
  118. try:
  119. port = Port_Link.objects.filter(PL_Swich = item).get(PL_Port_NG = line_split[0])
  120. print("a mettre a jour")
  121. except:
  122. print("a crée")
  123. port = Port_Link(PL_Swich = item, PL_Port_NG = line_split[0])
  124. port.PL_VLAN = line_split[7]
  125. port.PL_Commentaires = line_split[1]
  126. port.save()
  127. item.SW_Update_Port = None
  128. item.save()
  129. return HttpResponseRedirect(reverse('parc_info_switch_show_list')+get_value)
  130. else:
  131. form = Update_switch_port(instance=item)
  132. html = template.render({
  133. 'form': form,
  134. 'item': item,
  135. }, request)
  136. return HttpResponse(html)
  137. def switch_edit_port(request, switch_id, port_id):
  138. get_search = request.GET.get('get_search', '')
  139. template = loader.get_template('parc_info_switch_port.html')
  140. if port_id == None or port_id == '0':
  141. item = Port_Link()
  142. item.PL_Swich = Swich.objects.get(id = switch_id)
  143. else :
  144. item = Port_Link.objects.get(id = port_id)
  145. if request.method == 'POST':
  146. form = Edit_switch_port_form(request.POST, instance=item)
  147. if form.is_valid():
  148. form.save()
  149. get_value = "?get_id=" + str(item.PL_Swich.id)
  150. if get_search:
  151. get_value = get_value + '&get_search=' + get_search
  152. return HttpResponseRedirect(reverse('parc_info_switch_show_list')+get_value)
  153. else:
  154. form = Edit_switch_port_form(instance=item)
  155. html = template.render({
  156. 'form': form,
  157. 'item': item,
  158. }, request)
  159. return HttpResponse(html)
  160. @login_required(login_url='core_login')
  161. def srv_show_list(request):
  162. template = loader.get_template('parc_info_srv_index.html')
  163. get_search = request.GET.get('get_search', '')
  164. get_id = request.GET.get('get_id', '')
  165. page = gen_page_base()
  166. if get_search :
  167. print(get_search)
  168. page.search = get_search
  169. if get_id :
  170. print(get_id)
  171. page.item_id = get_id
  172. page.p_adresse = reverse('parc_info_srv_show_list')
  173. page.p_titre = "Listing des serveurs"
  174. page.p_contenu = "Listing des serveur présent dans le parc informatique"
  175. page.p_right = "Les Outils :"
  176. html = template.render({
  177. 'page': page,
  178. 'user': request.user,
  179. }, request)
  180. return HttpResponse(html)
  181. def srv_edit_info(request, id_srv):
  182. get_search = request.GET.get('get_search', '')
  183. template = loader.get_template('parc_info_srv_edit.html')
  184. if id_srv == None or id_srv == '0':
  185. item = PIS()
  186. else :
  187. item = PIS.objects.get(id = id_srv)
  188. #print(item)
  189. if request.method == 'POST':
  190. form = Edit_srv_form(request.POST, instance=item)
  191. if form.is_valid():
  192. form.save()
  193. get_value = "?get_id=" + str(item.id)
  194. if get_search:
  195. get_value = get_value + '&get_search=' + get_search
  196. return HttpResponseRedirect(reverse('parc_info_srv_show_list')+get_value)
  197. else:
  198. form = Edit_srv_form(instance=item)
  199. html = template.render({
  200. 'form': form,
  201. 'item': item,
  202. }, request)
  203. return HttpResponse(html)
  204. @login_required(login_url='core_login')
  205. def user_show_list(request):
  206. template = loader.get_template('parc_info_user_index.html')
  207. get_search = request.GET.get('get_search', '')
  208. get_id = request.GET.get('get_id', '')
  209. page = gen_page_base()
  210. if get_search :
  211. print(get_search)
  212. page.search = get_search
  213. if get_id :
  214. print(get_id)
  215. page.item_id = get_id
  216. page.p_adresse = reverse('parc_info_user_show_list')
  217. page.p_titre = "Listing des équipements utilisateurs"
  218. page.p_contenu = "Listing des équipements utilisateurs présent dans le parc informatique"
  219. page.p_right = "<h3>Menu</h3><p><a href='/parc/clients/enstock'>Listing des équipements en stock</a><br><a href='/parc/clients/aprep'>Listing des équipements en préparation</a><br><a href='/parc/clients/deprod'>Listing des équipements en inapt</a></p><h3>Les Outils</h3>"
  220. page.search_see = "ok"
  221. services = Services.objects.all()
  222. html = template.render({
  223. 'page': page,
  224. 'user': request.user,
  225. 'services': services,
  226. }, request)
  227. return HttpResponse(html)
  228. def user_edit_info(request, id_user):
  229. get_search = request.GET.get('get_search', '')
  230. template = loader.get_template('parc_info_user_edit.html')
  231. if id_user == None or id_user == '0':
  232. item = PIC()
  233. else :
  234. item = PIC.objects.get(id = id_user)
  235. if request.method == 'POST':
  236. form = Edit_user_mini_form(request.POST, instance=item)
  237. if form.is_valid():
  238. form.save()
  239. item = PIC.objects.get(id = item.id) #Update Value
  240. if item.PIC_Nom_netbios == None and item.PIC_NUnic == None :
  241. item.PIC_Nom_netbios = item.PIC_L_Site + "-"
  242. if item.PIC_L_Chassi_Type != "IMP":
  243. item.PIC_Nom_netbios = item.PIC_Nom_netbios + item.PIC_L_Service.SERVICE_Anag + "-"
  244. if item.PIC_L_Chassi_Type == "PC":
  245. item.PIC_Nom_netbios = item.PIC_Nom_netbios + "W"
  246. item.PIC_NUnic = test_last_client_NUnic("PC")
  247. elif item.PIC_L_Chassi_Type == "PORTABLE":
  248. item.PIC_Nom_netbios = item.PIC_Nom_netbios + "L"
  249. item.PIC_NUnic = test_last_client_NUnic("PC")
  250. elif item.PIC_L_Chassi_Type == "CL":
  251. item.PIC_Nom_netbios = item.PIC_Nom_netbios + "T"
  252. item.PIC_NUnic = test_last_client_NUnic("PC")
  253. elif item.PIC_L_Chassi_Type == "PANEL-PC":
  254. item.PIC_Nom_netbios = item.PIC_Nom_netbios + "D"
  255. item.PIC_NUnic = test_last_client_NUnic("PC")
  256. elif item.PIC_L_Chassi_Type == "IMP":
  257. item.PIC_Nom_netbios = item.PIC_Nom_netbios + "P"
  258. item.PIC_NUnic = test_last_client_NUnic("IMP")
  259. item.PIC_Nom_netbios = item.PIC_Nom_netbios + str(item.PIC_NUnic).zfill(4)
  260. print(item.PIC_NUnic)
  261. print(item.PIC_Nom_netbios)
  262. item.save()
  263. elif item.PIC_Nom_netbios == None:
  264. item.PIC_Nom_netbios = item.PIC_L_Site + "-"
  265. if item.PIC_L_Chassi_Type != "IMP":
  266. item.PIC_Nom_netbios = item.PIC_Nom_netbios + item.PIC_L_Service.SERVICE_Anag + "-"
  267. if item.PIC_L_Chassi_Type == "PC":
  268. item.PIC_Nom_netbios = item.PIC_Nom_netbios + "W"
  269. elif item.PIC_L_Chassi_Type == "PORTABLE":
  270. item.PIC_Nom_netbios = item.PIC_Nom_netbios + "L"
  271. elif item.PIC_L_Chassi_Type == "CL":
  272. item.PIC_Nom_netbios = item.PIC_Nom_netbios + "T"
  273. elif item.PIC_L_Chassi_Type == "PANEL-PC":
  274. item.PIC_Nom_netbios = item.PIC_Nom_netbios + "D"
  275. elif item.PIC_L_Chassi_Type == "IMP":
  276. item.PIC_Nom_netbios = item.PIC_Nom_netbios + "P"
  277. item.PIC_Nom_netbios = item.PIC_Nom_netbios + str(item.PIC_NUnic).zfill(4)
  278. print(item.PIC_NUnic)
  279. print(item.PIC_Nom_netbios)
  280. item.save()
  281. get_value = "?get_id=" + str(item.id)
  282. if get_search:
  283. get_value = get_value + '&get_search=' + get_search
  284. return HttpResponseRedirect(reverse('parc_info_user_show_list')+get_value)
  285. else:
  286. form = Edit_user_mini_form(instance=item)
  287. html = template.render({
  288. 'form': form,
  289. 'item': item,
  290. }, request)
  291. return HttpResponse(html)
  292. def user_edit_statut(request, id_user):
  293. get_search = request.GET.get('get_search', '')
  294. template = loader.get_template('parc_info_user_statut.html')
  295. if id_user == None or id_user == '0':
  296. item = PIC()
  297. else :
  298. item = PIC.objects.get(id = id_user)
  299. #print(item)
  300. if request.method == 'POST':
  301. form = Edit_user_statut_form(request.POST, instance=item)
  302. if form.is_valid():
  303. form.save()
  304. get_value = "?get_id=" + str(item.id)
  305. if get_search:
  306. get_value = get_value + '&get_search=' + get_search
  307. return HttpResponseRedirect(reverse('parc_info_user_show_list')+get_value)
  308. else:
  309. form = Edit_user_statut_form(instance=item)
  310. html = template.render({
  311. 'form': form,
  312. 'item': item,
  313. }, request)
  314. return HttpResponse(html)
  315. @login_required(login_url='core_login')
  316. def user_show_list_en_stock(request):
  317. template = loader.get_template('parc_info_user_index.html')
  318. page = gen_page_base()
  319. page.p_adresse = reverse('parc_info_user_show_list_en_stock')
  320. page.p_titre = "Liste des matériels en STOCK"
  321. page.p_contenu = "Liste des matériels en STOCK"
  322. page.p_right = "&nbsp"
  323. page.p_include = "parc_info_api_user_get_list.html"
  324. data_query = PIC.objects.filter(PIC_L_Statut = 'EN STOCK').exclude(PIC_L_Chassi_Type = 'IMP' ).order_by('PIC_NUnic')
  325. html = template.render({
  326. 'page': page,
  327. 'data_query':data_query,
  328. 'user': request.user,
  329. }, request)
  330. return HttpResponse(html)
  331. @login_required(login_url='core_login')
  332. def user_show_list_aprep(request):
  333. template = loader.get_template('parc_info_user_index.html')
  334. page = gen_page_base()
  335. page.p_adresse = reverse('parc_info_user_show_list_en_stock')
  336. page.p_titre = "Liste des matériels encours de préparation"
  337. page.p_contenu = "Liste des matériels encours de préparation"
  338. page.p_right = "&nbsp"
  339. page.p_include = "parc_info_api_user_get_list.html"
  340. data_query = PIC.objects.filter(PIC_L_Statut = 'PREPROD').exclude(PIC_L_Chassi_Type = 'IMP' ).order_by('PIC_NUnic')
  341. html = template.render({
  342. 'page': page,
  343. 'data_query':data_query,
  344. 'user': request.user,
  345. }, request)
  346. return HttpResponse(html)
  347. @login_required(login_url='core_login')
  348. def user_show_list_deprod(request):
  349. template = loader.get_template('parc_info_user_index.html')
  350. page = gen_page_base()
  351. page.p_adresse = reverse('parc_info_user_show_list_deprod')
  352. page.p_titre = "Liste des matériels en plus en service"
  353. page.p_contenu = "Liste des matériels en plus en service"
  354. page.p_right = "<p>Liste des matériels plus en service car celui-ci est HS ou n'est pour adapté au besoin actuel.</p>"
  355. page.p_include = "parc_info_api_user_get_list.html"
  356. data_query = PIC.objects.filter(PIC_L_Statut = 'INAPTE').exclude(PIC_L_Chassi_Type = 'IMP' ).order_by('PIC_NUnic')
  357. html = template.render({
  358. 'page': page,
  359. 'data_query':data_query,
  360. 'user': request.user,
  361. }, request)
  362. return HttpResponse(html)
  363. @login_required(login_url='core_login')
  364. def user_show_list_imp(request):
  365. template = loader.get_template('parc_info_user_index.html')
  366. page = gen_page_base()
  367. page.p_adresse = reverse('parc_info_user_show_list_imp')
  368. page.p_titre = "Liste des imprimantes"
  369. page.p_contenu = "Liste des imprimantes"
  370. page.p_right = "&nbsp"
  371. page.p_include = "parc_info_api_user_get_imp.html"
  372. data_query = PIC.objects.filter(PIC_L_Chassi_Type = 'IMP').order_by('PIC_L_Site','PIC_L_Service__SERVICE_Nom','PIC_NUnic')
  373. html = template.render({
  374. 'page': page,
  375. 'data_query':data_query,
  376. 'user': request.user,
  377. }, request)
  378. return HttpResponse(html)
  379. @login_required(login_url='core_login')
  380. def stat_user_by_service(request):
  381. page = gen_page_base()
  382. template = loader.get_template('parc_info_stat_user_by_service.html')
  383. items = PIC.objects.exclude(PIC_L_Statut__in = ['INAPTE', 'EN STOCK']).exclude(PIC_L_Chassi_Type = 'IMP' ).order_by('PIC_L_Site','PIC_L_Service__SERVICE_Nom')
  384. items_imp = PIC.objects.exclude(PIC_L_Statut__in = ['INAPTE', 'EN STOCK']).filter(PIC_L_Chassi_Type = 'IMP' ).order_by('PIC_L_Site','PIC_L_Service__SERVICE_Nom')
  385. for item in items:
  386. item.accessoir = Accessory_Link.objects.filter(pic = item)
  387. html = template.render({
  388. 'items': items,
  389. 'items_imp': items_imp,
  390. 'page': page,
  391. }, request)
  392. return HttpResponse(html)
  393. @login_required(login_url='core_login')
  394. def stat_user_without_snow(request):
  395. page = gen_page_base()
  396. template = loader.get_template('parc_info_stat_user_without_snow.html')
  397. 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_L_Site','PIC_L_Service__SERVICE_Nom')
  398. html = template.render({
  399. 'item': item,
  400. 'page': page,
  401. }, request)
  402. return HttpResponse(html)
  403. def import_snow_data(request):
  404. import openpyxl
  405. workbook = openpyxl.load_workbook(filename='./static/import/ComputersList.xlsx', read_only=True)
  406. first_sheet = workbook.get_sheet_names()[0]
  407. worksheet = workbook.get_sheet_by_name(first_sheet)
  408. for row in worksheet.iter_rows():
  409. tmp_Nom_netbios = str(row[0].value)
  410. print(tmp_Nom_netbios)
  411. need_update = 0
  412. try :
  413. item = PIC.objects.exclude(PIC_L_Statut__in = ['INAPTE', 'EN STOCK']).get(PIC_Nom_netbios = tmp_Nom_netbios)
  414. print("PC > ok exist")
  415. need_update = 1
  416. except:
  417. try :
  418. item = PIS.objects.exclude(PIS_Archive = True).get(PIS_Nom_netbios = tmp_Nom_netbios)
  419. print("SRV > ok exist")
  420. need_update = 2
  421. except:
  422. pass
  423. if need_update == 1:
  424. item.PIC_with_Snow = True
  425. item.PIC_Adresse_IP = str(row[1].value)
  426. item.PIC_Marque = str(row[2].value)
  427. item.PIC_Type = str(row[3].value)
  428. item.PIC_OS = str(row[5].value)
  429. item.PIC_SN = str(row[12].value)
  430. tmp_Utilisateur = str(row[8].value)
  431. tmp_Utilisateur = tmp_Utilisateur.split( )
  432. try :
  433. tmp_sp_tmp_Utilisateur = tmp_Utilisateur[-1]
  434. tmp_sp_tmp_Utilisateur = tmp_sp_tmp_Utilisateur.replace('\\', '').replace('(STJACQUES', '').replace(')', '')
  435. item.PIC_Utilisateur_Fq = tmp_sp_tmp_Utilisateur
  436. except :
  437. pass
  438. tmp_PIC_CPU = str(row[9].value)
  439. tmp_PIC_CPU = tmp_PIC_CPU.split(' @')
  440. item.PIC_CPU = tmp_PIC_CPU[0]
  441. item.PIC_CPU = item.PIC_CPU.replace(' CPU', '').replace('11th Gen ', '')
  442. item.PIC_RAM = int(float(row[11].value / 1024))
  443. item.save()
  444. elif need_update == 2:
  445. item.PIS_with_Snow = True
  446. item.PIS_Adresse_IP = str(row[1].value)
  447. if str(row[2].value) == "VMware, Inc.":
  448. item.PIS_Type = "MACHINE VIRTUELLE"
  449. item.PIS_CPU = str(row[10].value)
  450. else:
  451. item.PIS_Type = str(row[2].value)
  452. item.PIS_SN = str(row[12].value)
  453. tmp_PIS_CPU = str(row[9].value)
  454. tmp_PIS_CPU = tmp_PIS_CPU.split(' @')
  455. item.PIS_CPU = tmp_PIS_CPU[0]
  456. item.PIS_CPU = item.PIS_CPU.replace(' CPU', '').replace('11th Gen ', '')
  457. item.PIS_OS = str(row[5].value)
  458. item.PIS_RAM = int(float(row[11].value / 1024))
  459. item.save()
  460. return HttpResponse("ok")