views.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623
  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 not sed:
  341. print('sede non presente')
  342. return []
  343. if not amm:
  344. print('amministratore non presente')
  345. return []
  346. permessi = list()
  347. if not permesso:
  348. for p in sed.sep_set.all().filter(amministratore=amm):
  349. print(p.amministratore.nome,p.permesso.nome)
  350. permessi.append(p.permesso.nome)
  351. else:
  352. for p in sed.sep_set.all().filter(amministratore=amm).filter(permesso=per):
  353. print(p.amministratore.nome,p.permesso.nome)
  354. permessi.append(p.permesso.nome)
  355. print('permessi disponibili',len(permessi))
  356. #for i in permessi: print(i,)
  357. return permessi
  358. # riporta un permesso (generico) o tutti i permessi
  359. def getPermesso(permesso=None):
  360. if permesso:
  361. try:
  362. p = Permesso.objects.get(nome=permesso)
  363. except Permesso.DoesNotExist as dne:
  364. p = None
  365. print("Errore:",dne)
  366. else:
  367. p = Permesso.objects.all()
  368. return p
  369. # da questa parte si impostano i permessi
  370. def setDefault(amministratore=None):
  371. pass
  372. # setAMP: imposta i permessi a livello azienda
  373. def setAMP(amministratore=None,permesso=None):
  374. amm=None
  375. print('getAMP',amministratore)
  376. if isinstance(amministratore,Amministratore):
  377. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  378. amm = amministratore
  379. if isinstance(amministratore,int):
  380. print('si tratta di un int, quindi dobbiamo cercare il valore')
  381. amm = Amministratore.objects.get(pk=amministratore)
  382. per=None
  383. print('getAMP',permesso)
  384. if isinstance(permesso,Permesso):
  385. print('si tratta di una istanza, possiamo passarla direttamente')
  386. per = permesso
  387. if isinstance(permesso,int):
  388. print('si tratta di un int, quindi dobbiamo cercare il valore')
  389. per = Permesso.objects.get(pk=permesso)
  390. if isinstance(permesso,str):
  391. print('si tratta di una str, quindi dobbiamo cercare il valore')
  392. per = Permesso.objects.get(nome=permesso)
  393. # aggiungiamo il permesso necessario
  394. p = AMP()
  395. p.permesso=per
  396. p.amministratore=amm
  397. try:
  398. p.save()
  399. except IntegrityError as ie:
  400. print(ie)
  401. return [p,]
  402. def delAMP(amministratore=None,permesso=None):
  403. # rimuovere un permesso a un amministratore
  404. if isinstance(amministratore,Amministratore):
  405. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  406. amm = amministratore
  407. if isinstance(amministratore,int):
  408. print('si tratta di un int, quindi dobbiamo cercare il valore')
  409. amm = Amministratore.objects.get(pk=amministratore)
  410. per=None
  411. print('getAMP',permesso)
  412. if isinstance(permesso,Permesso):
  413. print('si tratta di una istanza, possiamo passarla direttamente')
  414. per = permesso
  415. if isinstance(permesso,int):
  416. print('si tratta di un int, quindi dobbiamo cercare il valore')
  417. per = Permesso.objects.get(pk=permesso)
  418. if isinstance(permesso,str):
  419. print('si tratta di una str, quindi dobbiamo cercare il valore')
  420. per = Permesso.objects.get(nome=permesso)
  421. if not per or not amm:
  422. return False
  423. p = None
  424. try:
  425. p = AMP.objects.filter(amministratore=amm).filter(permesso=per)
  426. except AMP.DoesNotExist as dne:
  427. print('errore: record non trovato')
  428. return False
  429. p.delete()
  430. return True
  431. # setAZP: imposta i permessi a livello azienda
  432. def setAZP(azienda=None,amministratore=None,permesso=None):
  433. print('setAZP:',azienda,amministratore,permesso)
  434. azi = None
  435. if isinstance(azienda,Azienda):
  436. azi=azienda
  437. if isinstance(azienda,str):
  438. try:
  439. azienda = int(azienda)
  440. except ValueError as ve:
  441. print(ve)
  442. if isinstance(azienda,int):
  443. azi = Azienda.objects.get(pk=azienda)
  444. amm=None
  445. if isinstance(amministratore,Amministratore):
  446. amm = amministratore
  447. if isinstance(amministratore,str):
  448. try:
  449. amministratore = int(amministratore)
  450. except ValueError as ve:
  451. print(ve)
  452. if isinstance(amministratore,int):
  453. amm = Amministratore.objects.get(pk=amministratore)
  454. per=None
  455. if isinstance(permesso,Permesso):
  456. per = permesso
  457. if isinstance(permesso,int):
  458. per = Permesso.objects.get(pk=permesso)
  459. if isinstance(permesso,str):
  460. per = Permesso.objects.get(nome=permesso)
  461. if not azi: print("Errore opzione azi")
  462. if not amm: print("Errore opzione amm")
  463. if not per: print("Errore opzione per")
  464. # aggiungiamo il permesso necessario
  465. print('in fase di salvataggio',azi,type(azi),amm,type(amm),per,type(per))
  466. p = AZP()
  467. p.permesso=per
  468. p.amministratore=amm
  469. p.azienda=azi
  470. try:
  471. p.save()
  472. except IntegrityError as ie:
  473. print(ie)
  474. return [p,]
  475. # setSEP: imposta i permessi a livello sede
  476. def setSEP(sede=None,amministratore=None,permesso=None):
  477. print('setSEP',sede,type(sede),amministratore,type(amministratore),permesso,type(permesso))
  478. sed=None
  479. if isinstance(sede,Sede):
  480. print('si tratta di una istanza sede')
  481. sed=sede
  482. if isinstance(sede,str):
  483. print('si tratta di una instanza str')
  484. try:
  485. sede = int(sede)
  486. except ValueError as ve:
  487. print('impossibile convetire sede',sede,ve)
  488. if isinstance(sede,int):
  489. print('sede: istanza int')
  490. sed = Sede.objects.get(pk=sede)
  491. print('sed',sed.nome)
  492. amm=None
  493. if isinstance(amministratore,Amministratore):
  494. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  495. amm = amministratore
  496. if isinstance(amministratore,str):
  497. print("Amministratore: str")
  498. amministratore = int(amministratore)
  499. if isinstance(amministratore,int):
  500. print('Amministratore: int')
  501. amm = Amministratore.objects.get(pk=amministratore)
  502. per=None
  503. if isinstance(permesso,Permesso):
  504. print('si tratta di una istanza, possiamo passarla direttamente')
  505. per = permesso
  506. if isinstance(permesso,int):
  507. print('si tratta di un int, quindi dobbiamo cercare il valore')
  508. per = Permesso.objects.get(pk=permesso)
  509. if isinstance(permesso,str):
  510. print('si tratta di una str, quindi dobbiamo cercare il valore')
  511. per = Permesso.objects.get(nome=permesso)
  512. if not sed: print("Errore opzione sed")
  513. if not amm: print("Errore opzione amm")
  514. if not per: print("Errore opzione per")
  515. # aggiungiamo il permesso necessario
  516. p = SEP()
  517. p.permesso=per
  518. p.amministratore=amm
  519. p.sede=sed
  520. try:
  521. p.save()
  522. print('setSEP ok',p.id)
  523. except IntegrityError as ie:
  524. print(ie)
  525. return [p,]