views.py 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670
  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. print(per)
  270. ### delicatissimo
  271. ### verificare che in lam venga effettivamente inserita solo la sede e non altri componenti
  272. ### sia che ci siano che non ci siano i permessi assegnati
  273. if per:
  274. print('per.nome',per.nome)
  275. print('per.asse',permessi_assegnati)
  276. if per.nome not in permessi_assegnati:
  277. print("per.nome non in permessi assegnati")
  278. for s in sedix:
  279. tmp = SEP.objects.filter(sede=s).filter(amministratore=amm).filter(permesso=per)
  280. for n in tmp:
  281. #lam.append({'sede':n,'permesso':per})
  282. print("s:",n,per.nome,type(n))
  283. lam.append(n.sede)
  284. else:
  285. print("per.nome in permessi assegnati")
  286. #abbiamo un diritto di livello superiore
  287. for s in sedix:
  288. print("s:",s,per.nome,type(s))
  289. lam.append(s)
  290. #tmp.append({'sede':s,'permesso':per})
  291. #tmp.append(s)
  292. #lam = tmp
  293. print("lam",len(lam),type(lam))
  294. print(lam)
  295. print("****")
  296. sedi = list()
  297. oggetto = list()
  298. for p in lam:
  299. print("p:",p,type(p),p)
  300. sedi.append(p)
  301. oggetto.append({'sede':p,'permesso':per})
  302. #print("sedi",sedi)
  303. #print("oggetto",oggetto)
  304. #print("sede 0",sedi[0].nome)
  305. sedi = sorted(sedi, key = lambda x: x.nome,reverse=False)
  306. print('sedi disponibili',len(sedi))
  307. return (sedi,oggetto)
  308. # getSEP: riporta l'elenco dei permessi per sede filtrato per amministratore
  309. def getSEP(sede=None,amministratore=None,permesso=None):
  310. print('getSEP',sede,amministratore)
  311. sed=None
  312. if isinstance(sede,Sede):
  313. print('sede: si tratta di una istanza sede')
  314. sed=sede
  315. if isinstance(sede,str):
  316. print('sede: si tratta di una instanza int')
  317. try:
  318. sede = int(sede)
  319. except ValueError as ve:
  320. print('Errore conversione sede')
  321. if isinstance(sede,int):
  322. print('sede: istanza int')
  323. sed = Sede.objects.get(pk=sede)
  324. amm=None
  325. if isinstance(amministratore,Amministratore):
  326. print('si tratta di una istanza amministratore, quindi possiamo direttamente accedere')
  327. amm = amministratore
  328. print('amministratore',amm.nome)
  329. if isinstance(amministratore,int):
  330. print('si tratta di un int, quindi dobbiamo cercare il valore')
  331. amm = Amministratore.objects.get(pk=amministratore)
  332. per=None
  333. if isinstance(permesso,Permesso):
  334. print('si tratta di una istanza permesso')
  335. per = permesso
  336. print('permesso',per.nome)
  337. if isinstance(permesso,str):
  338. print('si tratta di una str, quindi dobbiamo cercare il valore')
  339. per = Permesso.objects.get(nome=permesso)
  340. if isinstance(permesso,int):
  341. print('si tratta di un int, quindi cerchiamo per chiave')
  342. per = Permesso.objects.get(pk=permesso)
  343. if not sed:
  344. print('sede non presente')
  345. return []
  346. if not amm:
  347. print('amministratore non presente')
  348. return []
  349. permessi = list()
  350. if not permesso:
  351. for p in sed.sep_set.all().filter(amministratore=amm):
  352. print(p.amministratore.nome,p.permesso.nome)
  353. permessi.append(p.permesso.nome)
  354. else:
  355. for p in sed.sep_set.all().filter(amministratore=amm).filter(permesso=per):
  356. print(p.amministratore.nome,p.permesso.nome)
  357. permessi.append(p.permesso.nome)
  358. print('permessi disponibili',len(permessi))
  359. #for i in permessi: print(i,)
  360. return permessi
  361. # riporta un permesso (generico) o tutti i permessi
  362. def getPermesso(permesso=None):
  363. if permesso:
  364. try:
  365. p = Permesso.objects.get(nome=permesso)
  366. except Permesso.DoesNotExist as dne:
  367. p = None
  368. print("Errore:",dne)
  369. else:
  370. p = Permesso.objects.all()
  371. return p
  372. # da questa parte si impostano i permessi
  373. def setDefault(amministratore=None):
  374. pass
  375. # setAMP: imposta i permessi a livello azienda
  376. def setAMP(amministratore=None,permesso=None):
  377. amm=None
  378. print('getAMP',amministratore)
  379. if isinstance(amministratore,Amministratore):
  380. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  381. amm = amministratore
  382. if isinstance(amministratore,int):
  383. print('si tratta di un int, quindi dobbiamo cercare il valore')
  384. amm = Amministratore.objects.get(pk=amministratore)
  385. per=None
  386. print('getAMP',permesso)
  387. if isinstance(permesso,Permesso):
  388. print('si tratta di una istanza, possiamo passarla direttamente')
  389. per = permesso
  390. if isinstance(permesso,int):
  391. print('si tratta di un int, quindi dobbiamo cercare il valore')
  392. per = Permesso.objects.get(pk=permesso)
  393. if isinstance(permesso,str):
  394. print('si tratta di una str, quindi dobbiamo cercare il valore')
  395. per = Permesso.objects.get(nome=permesso)
  396. # aggiungiamo il permesso necessario
  397. p = AMP()
  398. p.permesso=per
  399. p.amministratore=amm
  400. try:
  401. p.save()
  402. except IntegrityError as ie:
  403. print(ie)
  404. return [p,]
  405. def delAMP(amministratore=None,permesso=None):
  406. # rimuovere un permesso a un amministratore
  407. if isinstance(amministratore,Amministratore):
  408. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  409. amm = amministratore
  410. if isinstance(amministratore,int):
  411. print('si tratta di un int, quindi dobbiamo cercare il valore')
  412. amm = Amministratore.objects.get(pk=amministratore)
  413. per=None
  414. print('getAMP',permesso)
  415. if isinstance(permesso,Permesso):
  416. print('si tratta di una istanza, possiamo passarla direttamente')
  417. per = permesso
  418. if isinstance(permesso,int):
  419. print('si tratta di un int, quindi dobbiamo cercare il valore')
  420. per = Permesso.objects.get(pk=permesso)
  421. if isinstance(permesso,str):
  422. print('si tratta di una str, quindi dobbiamo cercare il valore')
  423. per = Permesso.objects.get(nome=permesso)
  424. if not amm:
  425. return False
  426. if per:
  427. p = AMP.objects.filter(amministratore=amm).filter(permesso=per)
  428. for i in p:
  429. i.delete()
  430. else:
  431. p = AMP.objects.filter(amministratore=amm)
  432. for i in p:
  433. i.delete()
  434. return True
  435. # setAZP: imposta i permessi a livello azienda
  436. def setAZP(azienda=None,amministratore=None,permesso=None):
  437. print('setAZP:',azienda,amministratore,permesso)
  438. azi = None
  439. if isinstance(azienda,Azienda):
  440. azi=azienda
  441. if isinstance(azienda,str):
  442. try:
  443. azienda = int(azienda)
  444. except ValueError as ve:
  445. print(ve)
  446. if isinstance(azienda,int):
  447. azi = Azienda.objects.get(pk=azienda)
  448. amm=None
  449. if isinstance(amministratore,Amministratore):
  450. amm = amministratore
  451. if isinstance(amministratore,str):
  452. try:
  453. amministratore = int(amministratore)
  454. except ValueError as ve:
  455. print(ve)
  456. if isinstance(amministratore,int):
  457. amm = Amministratore.objects.get(pk=amministratore)
  458. per=None
  459. if isinstance(permesso,Permesso):
  460. per = permesso
  461. if isinstance(permesso,int):
  462. per = Permesso.objects.get(pk=permesso)
  463. if isinstance(permesso,str):
  464. per = Permesso.objects.get(nome=permesso)
  465. if not azi: print("Errore opzione azi")
  466. if not amm: print("Errore opzione amm")
  467. if not per: print("Errore opzione per")
  468. # aggiungiamo il permesso necessario
  469. print('in fase di salvataggio',azi,type(azi),amm,type(amm),per,type(per))
  470. p = AZP()
  471. p.permesso=per
  472. p.amministratore=amm
  473. p.azienda=azi
  474. try:
  475. p.save()
  476. except IntegrityError as ie:
  477. print(ie)
  478. return [p,]
  479. def delAZP(azienda=None, amministratore=None,permesso=None):
  480. # rimuovere un permesso a un amministratore
  481. if isinstance(azienda,Azienda):
  482. print('si tratta di una instanza, quindi possiamo direttamente accedere')
  483. azi = azienda
  484. if isinstance(azienda,int):
  485. print('si tratta di un int, quindi dobbiamo cercare il valore')
  486. azi = Azienda.objects.get(pk=azienda)
  487. if isinstance(amministratore,Amministratore):
  488. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  489. amm = amministratore
  490. if isinstance(amministratore,int):
  491. print('si tratta di un int, quindi dobbiamo cercare il valore')
  492. amm = Amministratore.objects.get(pk=amministratore)
  493. per=None
  494. print('getAMP',permesso)
  495. if isinstance(permesso,Permesso):
  496. print('si tratta di una istanza, possiamo passarla direttamente')
  497. per = permesso
  498. if isinstance(permesso,int):
  499. print('si tratta di un int, quindi dobbiamo cercare il valore')
  500. per = Permesso.objects.get(pk=permesso)
  501. if isinstance(permesso,str):
  502. print('si tratta di una str, quindi dobbiamo cercare il valore')
  503. per = Permesso.objects.get(nome=permesso)
  504. if not azi or not amm:
  505. return False
  506. if per: #permesso presente, quindi si rimuove solo quel permesso
  507. p = None
  508. p = AZP.objects.filter(amministratore=amm).filter(azienda=azi).filter(permesso=per)
  509. for i in p:
  510. p.delete()
  511. else: #si rimuovo tutti i permessi per quell'azienda
  512. p = AZP.objects.filter(amministratore=amm).filter(azienda=azi)
  513. for i in p:
  514. i.delete()
  515. return True
  516. # setSEP: imposta i permessi a livello sede
  517. def setSEP(sede=None,amministratore=None,permesso=None):
  518. print('setSEP',sede,type(sede),amministratore,type(amministratore),permesso,type(permesso))
  519. sed=None
  520. if isinstance(sede,Sede):
  521. print('si tratta di una istanza sede')
  522. sed=sede
  523. if isinstance(sede,str):
  524. print('si tratta di una instanza str')
  525. try:
  526. sede = int(sede)
  527. except ValueError as ve:
  528. print('impossibile convetire sede',sede,ve)
  529. if isinstance(sede,int):
  530. print('sede: istanza int')
  531. sed = Sede.objects.get(pk=sede)
  532. print('sed',sed.nome)
  533. amm=None
  534. if isinstance(amministratore,Amministratore):
  535. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  536. amm = amministratore
  537. if isinstance(amministratore,str):
  538. print("Amministratore: str")
  539. amministratore = int(amministratore)
  540. if isinstance(amministratore,int):
  541. print('Amministratore: int')
  542. amm = Amministratore.objects.get(pk=amministratore)
  543. per=None
  544. if isinstance(permesso,Permesso):
  545. print('si tratta di una istanza, possiamo passarla direttamente')
  546. per = permesso
  547. if isinstance(permesso,int):
  548. print('si tratta di un int, quindi dobbiamo cercare il valore')
  549. per = Permesso.objects.get(pk=permesso)
  550. if isinstance(permesso,str):
  551. print('si tratta di una str, quindi dobbiamo cercare il valore')
  552. per = Permesso.objects.get(nome=permesso)
  553. if not sed: print("Errore opzione sed")
  554. if not amm: print("Errore opzione amm")
  555. if not per: print("Errore opzione per")
  556. # aggiungiamo il permesso necessario
  557. p = SEP()
  558. p.permesso=per
  559. p.amministratore=amm
  560. p.sede=sed
  561. try:
  562. p.save()
  563. print('setSEP ok',p.id)
  564. except IntegrityError as ie:
  565. print(ie)
  566. return [p,]