views.py 15 KB

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