views.py 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. from django.shortcuts import render
  2. from .models import *
  3. from att.views import *
  4. from config.views import *
  5. from django.db import IntegrityError
  6. # getP: ritorna una lista con i permessi assegnati a tutti i livelli possibili
  7. def getP(azienda=None,sede=None,amministratore=None,permesso=None):
  8. print('getP',azienda,sede,amministratore,permesso)
  9. sed = None
  10. if isinstance(sede,Sede):
  11. print('Sede: instanza Sede')
  12. sed = sede
  13. elif isinstance(sede,int):
  14. print('Sede: istanza int')
  15. try:
  16. sed = Sede.objects.get(pk=sede)
  17. except Sede.DoesNotExist as dne:
  18. print('Sed: errore sed non valido')
  19. per = None
  20. if isinstance(permesso,Permesso):
  21. print('Permesso: instanza Permesso')
  22. per = permesso
  23. elif isinstance(permesso,int):
  24. print('Permesso: istanza int')
  25. per = Permesso.objects.get(pk=permesso)
  26. amm=None
  27. if isinstance(amministratore,Amministratore):
  28. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  29. amm = amministratore
  30. elif isinstance(amministratore,int):
  31. print('si tratta di un int, quindi dobbiamo cercare il valore')
  32. amm = Amministratore.objects.get(pk=amministratore)
  33. azi = None
  34. if isinstance(azienda,Azienda):
  35. print('azienda: azienda')
  36. azi=azienda
  37. print(azi.id)
  38. if not azi.id:
  39. azi=None
  40. elif isinstance(azienda,int):
  41. print('azienda: int')
  42. azi = Azienda.objects.get(pk=azienda)
  43. ### permessi inizio ###
  44. data = list()
  45. data = getAMP(amm)[0]
  46. print("******",data)
  47. if azi:
  48. print('**** azienda presente ****')
  49. for t in getAZP(azi,amm)[0]:
  50. if t not in data:
  51. data.append(t)
  52. if sed:
  53. print('**** sede presente ****')
  54. for t in getSEP(sed,amm):
  55. if t not in data:
  56. data.append(t)
  57. print("getP Permessi:",data)
  58. return data
  59. # getAMP: riporta l'elenco dei permessi per amministratore
  60. def getAMP(amministratore=None):
  61. print("getAMP",amministratore)
  62. amm=None
  63. if isinstance(amministratore,Amministratore):
  64. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  65. amm = amministratore
  66. elif isinstance(amministratore,int):
  67. print('si tratta di un int, quindi dobbiamo cercare il valore')
  68. amm = Amministratore.objects.get(pk=amministratore)
  69. permessi = list()
  70. oggettoPermesso = list()
  71. oggettoAMM = list()
  72. if amm:
  73. for p in amm.amp_set.all():
  74. permessi.append(p.permesso.nome)
  75. oggettoPermesso.append(p.permesso)
  76. oggettoAMM.append(p)
  77. print('permessi disponibili',len(permessi))
  78. #for i in permessi: print(i,)
  79. return (permessi,oggettoPermesso,oggettoAMM)
  80. # getAZP: riporta l'elenco dei permessi per azienda, filtrato per amministratore
  81. def getAZP(azienda=None,amministratore=None):
  82. print('getAZP',azienda,amministratore)
  83. azi = None
  84. if isinstance(azienda,Azienda):
  85. print('azienda: azienda')
  86. azi=azienda
  87. print(azi.id)
  88. if not azi.id:
  89. azi=None
  90. elif isinstance(azienda,int):
  91. print('azienda: int')
  92. azi = Azienda.objects.get(pk=azienda)
  93. else:
  94. azi = None
  95. amm=None
  96. if isinstance(amministratore,Amministratore):
  97. print('amministratore: amministratore')
  98. amm = amministratore
  99. elif isinstance(amministratore,int):
  100. print('amministratore: int')
  101. amm = Amministratore.objects.get(pk=amministratore)
  102. else:
  103. amm = None
  104. if not amm:
  105. return ([],[],[],)
  106. if not azi:
  107. return ([],[],[],)
  108. permessi = list()
  109. oggettoPermesso = list()
  110. oggettoAZP = list()
  111. for p in azi.azp_set.all().filter(amministratore=amm):
  112. permessi.append(p.permesso.nome)
  113. oggettoPermesso.append(p.permesso)
  114. oggettoAZP.append(p)
  115. print('permessi disponibili',len(permessi))
  116. #for i in permessi: print(i,)
  117. return (permessi,oggettoPermesso,oggettoAZP)
  118. # listaAMMperAzienda: ottiene la lista degli amministratori per azienda
  119. def listaAMMperAzienda(azienda=None,permesso=None):
  120. azi = None
  121. if isinstance(azienda,Azienda):
  122. print('Azienda: instanza Azienda')
  123. azi = azienda
  124. if isinstance(azienda,int):
  125. print('Azienda: istanza int')
  126. azi = Azienda.objects.get(pk=azienda)
  127. per = None
  128. if isinstance(permesso,Permesso):
  129. print('Permesso: instanza Permesso')
  130. per = permesso
  131. if isinstance(permesso,int):
  132. print('Permesso: istanza int')
  133. per = Permesso.objects.get(pk=permesso)
  134. if not azi:
  135. print('problema con la definizione di azienda')
  136. return []
  137. print('dati rilevati',azi.id,azi.nome)
  138. laz = list()
  139. if not per: #tutti i permessi
  140. p = Permesso.objects.all()
  141. for tmp in p:
  142. t = azi.azp_set.filter(permesso__nome=tmp.nome)
  143. for tmp2 in t:
  144. laz.append(tmp2)
  145. else:
  146. t = azi.azp_set.filter(permesso__nome=per_nome)
  147. for tmp in t:
  148. laz.append(tmp)
  149. amministratore = list()
  150. oggetto = list()
  151. for p in laz:
  152. amministratore.append(p.amministratore)
  153. oggetto.append(p)
  154. print('amministratori disponibili',len(amministratore))
  155. return (amministratore,oggetto)
  156. # listaAMMperSede: ottiene la lista degli amministratori per sede
  157. def listaAMMperSede(sede=None,permesso=None):
  158. print("listaAMMperSede",sede,permesso)
  159. sed = None
  160. if isinstance(sede,Sede):
  161. print('Sede: instanza Sede')
  162. sed = sede
  163. elif isinstance(sede,int):
  164. print('Sede: istanza int')
  165. try:
  166. sed = Sede.objects.get(pk=sede)
  167. except Sede.DoesNotExist as dne:
  168. print('Sed: errore sed non valido')
  169. per = None
  170. if isinstance(permesso,Permesso):
  171. print('Permesso: instanza Permesso')
  172. per = permesso
  173. elif isinstance(permesso,int):
  174. print('Permesso: istanza int')
  175. per = Permesso.objects.get(pk=permesso)
  176. if not sed:
  177. print('problema con la definizione di sede')
  178. return ([],[],)
  179. print('dati rilevati',sed.id,sed.nome)
  180. lse = list()
  181. if not per: #tutti i permessi
  182. p = Permesso.objects.all()
  183. for tmp in p:
  184. t = sed.sep_set.filter(permesso__nome=tmp.nome)
  185. for tmp2 in t:
  186. lse.append(tmp2)
  187. else:
  188. t = sed.sep_set.filter(permesso__nome=per_nome)
  189. for tmp in t:
  190. lse.append(tmp)
  191. print('lunghezza LSE',len(lse))
  192. amministratore = list()
  193. oggetto = list()
  194. for p in lse:
  195. #print(p.amministratore.nome)
  196. amministratore.append(p.amministratore)
  197. oggetto.append(p)
  198. print('amministratori disponibili',len(amministratore))
  199. return (amministratore,oggetto)
  200. #listaAZP: riporta la lista delle aziende in base all'amministratore
  201. def listaAZP(amministratore=None):
  202. print('Parametro amministratore',amministratore,type(amministratore))
  203. amm = None
  204. if isinstance(amministratore,Amministratore):
  205. print('amministratore: instanza Amministratore')
  206. amm=amministratore
  207. if isinstance(amministratore,int):
  208. print('amministratore: istanza int')
  209. amm = Amministratore.objects.get(pk=amministratore)
  210. if amm == None:
  211. print('problema con la definizione di amministratore')
  212. return []
  213. print('dati rilevati',amm.id,amm.login)
  214. lam = amm.azp_set.filter(permesso__nome="AZIENDA")
  215. print('lunghezza LAM',len(lam))
  216. aziende = list()
  217. oggetto = list()
  218. for p in lam:
  219. aziende.append(p.azienda)
  220. oggetto.append(p)
  221. # prima di restituire mettiamo in ordine
  222. aziende = sorted(aziende, key = lambda x: x.nome,reverse=False)
  223. print('aziende disponibili',len(aziende))
  224. return (aziende,oggetto)
  225. # listaSEP: ritorna la lista delle sedi per azienda e amministratore
  226. def listaSEP(azienda=None,amministratore=None,permesso=None):
  227. print("listaSEP",azienda,amministratore,permesso)
  228. azi = None
  229. if isinstance(azienda,Azienda):
  230. print('Azienda: instanza Azienda')
  231. azi = azienda
  232. elif isinstance(azienda,int):
  233. print('Azienda: istanza int')
  234. azi = Azienda.objects.get(pk=azienda)
  235. amm = None
  236. if isinstance(amministratore,Amministratore):
  237. print('amministratore: instanza Amministratore')
  238. amm = amministratore
  239. elif isinstance(amministratore,int):
  240. print('amministratore: istanza int')
  241. amm = Amministratore.objects.get(pk=amministratore)
  242. per=None
  243. print('listaSEP',permesso)
  244. if isinstance(permesso,Permesso):
  245. print('si tratta di una istanza, possiamo passarla direttamente')
  246. per = permesso
  247. elif isinstance(permesso,int):
  248. print('si tratta di un int, quindi dobbiamo cercare il valore')
  249. per = Permesso.objects.get(pk=permesso)
  250. elif isinstance(permesso,str):
  251. print('si tratta di una str, quindi dobbiamo cercare il valore')
  252. per = Permesso.objects.get(nome=permesso)
  253. print('permesso trovato',per.nome)
  254. else:
  255. per = None
  256. if not amm:
  257. print('problema con la definizione di amministratore')
  258. return []
  259. if not azi:
  260. print('problema con la definizione di azienda')
  261. return []
  262. # ottiene l'elenco dei permessi gia' assegnati per l'amministratore
  263. permessi_assegnati=getP(amministratore=amm,azienda=azi)
  264. print('dati rilevati',amm.id,amm.login)
  265. # devo ottenere la lista delle sedi, filtrate per azienda autorizzate per amministratore
  266. sedix = azi.sede_set.all()
  267. print("sedix len",len(sedix))
  268. lam = list()
  269. ### delicatissimo
  270. ### verificare che in lam venga effettivamente inserita solo la sede e non altri componenti
  271. ### sia che ci siano che non ci siano i permessi assegnati
  272. if per:
  273. print('per.nome',per.nome)
  274. print('per.asse',permessi_assegnati)
  275. if per.nome not in permessi_assegnati:
  276. print("per.nome non in permessi assegnati")
  277. for s in sedix:
  278. tmp = SEP.objects.filter(sede=s).filter(amministratore=amm).filter(permesso=per)
  279. for n in tmp:
  280. #lam.append({'sede':n,'permesso':per})
  281. print("s:",n,per.nome,type(n))
  282. lam.append(n.sede)
  283. else:
  284. print("per.nome in permessi assegnati")
  285. #abbiamo un diritto di livello superiore
  286. for s in sedix:
  287. print("s:",s,per.nome,type(s))
  288. lam.append(s)
  289. #tmp.append({'sede':s,'permesso':per})
  290. #tmp.append(s)
  291. #lam = tmp
  292. print("lam",len(lam),type(lam))
  293. print(lam)
  294. print("****")
  295. sedi = list()
  296. oggetto = list()
  297. for p in lam:
  298. print("p:",p,type(p),p)
  299. sedi.append(p)
  300. oggetto.append({'sede':p,'permesso':per})
  301. #print("sedi",sedi)
  302. #print("oggetto",oggetto)
  303. #print("sede 0",sedi[0].nome)
  304. sedi = sorted(sedi, key = lambda x: x.nome,reverse=False)
  305. print('sedi disponibili',len(sedi))
  306. return (sedi,oggetto)
  307. # getSEP: riporta l'elenco dei permessi per sede filtrato per amministratore
  308. def getSEP(sede=None,amministratore=None):
  309. print('getSEP',sede,amministratore)
  310. sed=None
  311. if isinstance(sede,Sede):
  312. print('si tratta di una istanza sede')
  313. sed=sede
  314. if isinstance(sede,int):
  315. print('sede: istanza int')
  316. sed = Sede.objects.get(pk=sede)
  317. amm=None
  318. if isinstance(amministratore,Amministratore):
  319. print('si tratta di una istanza amministratore, quindi possiamo direttamente accedere')
  320. amm = amministratore
  321. print('amministratore',amm.nome)
  322. if isinstance(amministratore,int):
  323. print('si tratta di un int, quindi dobbiamo cercare il valore')
  324. amm = Amministratore.objects.get(pk=amministratore)
  325. if not sed:
  326. print('sede non presente')
  327. return []
  328. permessi = list()
  329. for t in sed.sep_set.all():
  330. print(t.amministratore.nome,t.permesso.nome)
  331. for p in sed.sep_set.all().filter(amministratore=amm):
  332. permessi.append(p.permesso.nome)
  333. print('permessi disponibili',len(permessi))
  334. #for i in permessi: print(i,)
  335. return permessi
  336. # riporta un permesso (generico) o tutti i permessi
  337. def getPermesso(permesso=None):
  338. if permesso:
  339. try:
  340. p = Permesso.objects.get(nome=permesso)
  341. except Permesso.DoesNotExist as dne:
  342. p = None
  343. print("Errore:",dne)
  344. else:
  345. p = Permesso.objects.all()
  346. return p
  347. # da questa parte si impostano i permessi
  348. def setDefault(amministratore=None):
  349. pass
  350. # setAMP: imposta i permessi a livello azienda
  351. def setAMP(amministratore=None,permesso=None):
  352. amm=None
  353. print('getAMP',amministratore)
  354. if isinstance(amministratore,Amministratore):
  355. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  356. amm = amministratore
  357. if isinstance(amministratore,int):
  358. print('si tratta di un int, quindi dobbiamo cercare il valore')
  359. amm = Amministratore.objects.get(pk=amministratore)
  360. per=None
  361. print('getAMP',permesso)
  362. if isinstance(permesso,Permesso):
  363. print('si tratta di una istanza, possiamo passarla direttamente')
  364. per = permesso
  365. if isinstance(permesso,int):
  366. print('si tratta di un int, quindi dobbiamo cercare il valore')
  367. per = Permesso.objects.get(pk=permesso)
  368. if isinstance(permesso,str):
  369. print('si tratta di una str, quindi dobbiamo cercare il valore')
  370. per = Permesso.objects.get(nome=permesso)
  371. # aggiungiamo il permesso necessario
  372. p = AMP()
  373. p.permesso=per
  374. p.amministratore=amm
  375. try:
  376. p.save()
  377. except IntegrityError as ie:
  378. print(ie)
  379. return [p,]
  380. def delAMP(amministratore=None,permesso=None):
  381. # rimuovere un permesso a un amministratore
  382. if isinstance(amministratore,Amministratore):
  383. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  384. amm = amministratore
  385. if isinstance(amministratore,int):
  386. print('si tratta di un int, quindi dobbiamo cercare il valore')
  387. amm = Amministratore.objects.get(pk=amministratore)
  388. per=None
  389. print('getAMP',permesso)
  390. if isinstance(permesso,Permesso):
  391. print('si tratta di una istanza, possiamo passarla direttamente')
  392. per = permesso
  393. if isinstance(permesso,int):
  394. print('si tratta di un int, quindi dobbiamo cercare il valore')
  395. per = Permesso.objects.get(pk=permesso)
  396. if isinstance(permesso,str):
  397. print('si tratta di una str, quindi dobbiamo cercare il valore')
  398. per = Permesso.objects.get(nome=permesso)
  399. if not per or not amm:
  400. return False
  401. p = None
  402. try:
  403. p = AMP.objects.filter(amministratore=amm).filter(permesso=per)
  404. except AMP.DoesNotExist as dne:
  405. print('errore: record non trovato')
  406. return False
  407. p.delete()
  408. return True
  409. # setAZP: imposta i permessi a livello azienda
  410. def setAZP(azienda=None,amministratore=None,permesso=None):
  411. print('setAZP:',azienda,amministratore,permesso)
  412. azi = None
  413. if isinstance(azienda,Azienda):
  414. azi=azienda
  415. if isinstance(azienda,str):
  416. try:
  417. azienda = int(azienda)
  418. except ValueError as ve:
  419. print(ve)
  420. if isinstance(azienda,int):
  421. azi = Azienda.objects.get(pk=azienda)
  422. amm=None
  423. if isinstance(amministratore,Amministratore):
  424. amm = amministratore
  425. if isinstance(amministratore,str):
  426. try:
  427. amministratore = int(amministratore)
  428. except ValueError as ve:
  429. print(ve)
  430. if isinstance(amministratore,int):
  431. amm = Amministratore.objects.get(pk=amministratore)
  432. per=None
  433. if isinstance(permesso,Permesso):
  434. per = permesso
  435. if isinstance(permesso,int):
  436. per = Permesso.objects.get(pk=permesso)
  437. if isinstance(permesso,str):
  438. per = Permesso.objects.get(nome=permesso)
  439. if not azi: print("Errore opzione azi")
  440. if not amm: print("Errore opzione amm")
  441. if not per: print("Errore opzione per")
  442. # aggiungiamo il permesso necessario
  443. print('in fase di salvataggio',azi,type(azi),amm,type(amm),per,type(per))
  444. p = AZP()
  445. p.permesso=per
  446. p.amministratore=amm
  447. p.azienda=azi
  448. try:
  449. p.save()
  450. except IntegrityError as ie:
  451. print(ie)
  452. return [p,]
  453. # setSEP: imposta i permessi a livello sede
  454. def setSEP(sede=None,amministratore=None,permesso=None):
  455. sed=None
  456. if isinstance(sede,Sede):
  457. print('si tratta di una istanza dede')
  458. sed=sede
  459. if isinstance(sede,int):
  460. print('sede: istanza int')
  461. sed = Sede.objects.get(pk=sede)
  462. amm=None
  463. if isinstance(amministratore,Amministratore):
  464. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  465. amm = amministratore
  466. if isinstance(amministratore,str):
  467. print("Amministratore: str")
  468. amministratore = int(amministratore)
  469. if isinstance(amministratore,int):
  470. print('Amministratore: int')
  471. amm = Amministratore.objects.get(pk=amministratore)
  472. per=None
  473. if isinstance(permesso,Permesso):
  474. print('si tratta di una istanza, possiamo passarla direttamente')
  475. per = permesso
  476. if isinstance(permesso,int):
  477. print('si tratta di un int, quindi dobbiamo cercare il valore')
  478. per = Permesso.objects.get(pk=permesso)
  479. if isinstance(permesso,str):
  480. print('si tratta di una str, quindi dobbiamo cercare il valore')
  481. per = Permesso.objects.get(nome=permesso)
  482. if not sed: print("Errore opzione sed")
  483. if not amm: print("Errore opzione amm")
  484. if not per: print("Errore opzione per")
  485. # aggiungiamo il permesso necessario
  486. p = SEP()
  487. p.permesso=per
  488. p.amministratore=amm
  489. p.sede=sed
  490. try:
  491. p.save()
  492. except IntegrityError as ie:
  493. print(ie)
  494. return [p,]