views.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  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. print('permesso trovato',per.nome)
  255. else:
  256. per = None
  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. ### 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):
  310. print('getSEP',sede,amministratore)
  311. sed=None
  312. if isinstance(sede,Sede):
  313. print('si tratta di una istanza sede')
  314. sed=sede
  315. if isinstance(sede,int):
  316. print('sede: istanza int')
  317. sed = Sede.objects.get(pk=sede)
  318. amm=None
  319. if isinstance(amministratore,Amministratore):
  320. print('si tratta di una istanza amministratore, quindi possiamo direttamente accedere')
  321. amm = amministratore
  322. print('amministratore',amm.nome)
  323. if isinstance(amministratore,int):
  324. print('si tratta di un int, quindi dobbiamo cercare il valore')
  325. amm = Amministratore.objects.get(pk=amministratore)
  326. if not sed:
  327. print('sede non presente')
  328. return []
  329. permessi = list()
  330. for t in sed.sep_set.all():
  331. print(t.amministratore.nome,t.permesso.nome)
  332. for p in sed.sep_set.all().filter(amministratore=amm):
  333. permessi.append(p.permesso.nome)
  334. print('permessi disponibili',len(permessi))
  335. #for i in permessi: print(i,)
  336. return permessi
  337. # riporta un permesso (generico) o tutti i permessi
  338. def getPermesso(permesso=None):
  339. if permesso:
  340. try:
  341. p = Permesso.objects.get(nome=permesso)
  342. except Permesso.DoesNotExist as dne:
  343. p = None
  344. print("Errore:",dne)
  345. else:
  346. p = Permesso.objects.all()
  347. return p
  348. # da questa parte si impostano i permessi
  349. def setDefault(amministratore=None):
  350. pass
  351. # setAMP: imposta i permessi a livello azienda
  352. def setAMP(amministratore=None,permesso=None):
  353. amm=None
  354. print('getAMP',amministratore)
  355. if isinstance(amministratore,Amministratore):
  356. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  357. amm = amministratore
  358. if isinstance(amministratore,int):
  359. print('si tratta di un int, quindi dobbiamo cercare il valore')
  360. amm = Amministratore.objects.get(pk=amministratore)
  361. per=None
  362. print('getAMP',permesso)
  363. if isinstance(permesso,Permesso):
  364. print('si tratta di una istanza, possiamo passarla direttamente')
  365. per = permesso
  366. if isinstance(permesso,int):
  367. print('si tratta di un int, quindi dobbiamo cercare il valore')
  368. per = Permesso.objects.get(pk=permesso)
  369. if isinstance(permesso,str):
  370. print('si tratta di una str, quindi dobbiamo cercare il valore')
  371. per = Permesso.objects.get(nome=permesso)
  372. # aggiungiamo il permesso necessario
  373. p = AMP()
  374. p.permesso=per
  375. p.amministratore=amm
  376. try:
  377. p.save()
  378. except IntegrityError as ie:
  379. print(ie)
  380. return [p,]
  381. # setAZP: imposta i permessi a livello azienda
  382. def setAZP(azienda=None,amministratore=None,permesso=None):
  383. print('setAZP:',azienda,amministratore,permesso)
  384. azi = None
  385. if isinstance(azienda,Azienda):
  386. print('azienda: istanza')
  387. azi=azienda
  388. if isinstance(azienda,int):
  389. print('azienda: int')
  390. azi = Azienda.objects.get(pk=azienda)
  391. amm=None
  392. if isinstance(amministratore,Amministratore):
  393. print('amministratore: istanza')
  394. amm = amministratore
  395. if isinstance(amministratore,str):
  396. try:
  397. amministratore = int(amministratore)
  398. except ValueError as ve:
  399. print(ve)
  400. if isinstance(amministratore,int):
  401. print('si tratta di un int, quindi dobbiamo cercare il valore')
  402. amm = Amministratore.objects.get(pk=amministratore)
  403. per=None
  404. if isinstance(permesso,Permesso):
  405. print('permesso: istanza')
  406. per = permesso
  407. if isinstance(permesso,int):
  408. print('permesso: int')
  409. per = Permesso.objects.get(pk=permesso)
  410. if isinstance(permesso,str):
  411. print('permesso: str')
  412. per = Permesso.objects.get(nome=permesso)
  413. if not azi: print("Errore opzione azi")
  414. if not amm: print("Errore opzione amm")
  415. if not per: print("Errore opzione per")
  416. # aggiungiamo il permesso necessario
  417. print('in fase di salvataggio',azi,amm,per)
  418. p = AZP()
  419. p.permesso=per
  420. p.amministratore=amm
  421. p.azienda=azi
  422. try:
  423. p.save()
  424. except IntegrityError as ie:
  425. print(ie)
  426. return [p,]
  427. # setSEP: imposta i permessi a livello sede
  428. def setSEP(sede=None,amministratore=None,permesso=None):
  429. sed=None
  430. if isinstance(sede,Sede):
  431. print('si tratta di una istanza dede')
  432. sed=sede
  433. if isinstance(sede,int):
  434. print('sede: istanza int')
  435. sed = Sede.objects.get(pk=sede)
  436. amm=None
  437. if isinstance(amministratore,Amministratore):
  438. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  439. amm = amministratore
  440. if isinstance(amministratore,str):
  441. print("Amministratore: str")
  442. amministratore = int(amministratore)
  443. if isinstance(amministratore,int):
  444. print('Amministratore: int')
  445. amm = Amministratore.objects.get(pk=amministratore)
  446. per=None
  447. if isinstance(permesso,Permesso):
  448. print('si tratta di una istanza, possiamo passarla direttamente')
  449. per = permesso
  450. if isinstance(permesso,int):
  451. print('si tratta di un int, quindi dobbiamo cercare il valore')
  452. per = Permesso.objects.get(pk=permesso)
  453. if isinstance(permesso,str):
  454. print('si tratta di una str, quindi dobbiamo cercare il valore')
  455. per = Permesso.objects.get(nome=permesso)
  456. if not sed: print("Errore opzione sed")
  457. if not amm: print("Errore opzione amm")
  458. if not per: print("Errore opzione per")
  459. # aggiungiamo il permesso necessario
  460. p = SEP()
  461. p.permesso=per
  462. p.amministratore=amm
  463. p.sede=sed
  464. try:
  465. p.save()
  466. except IntegrityError as ie:
  467. print(ie)
  468. return [p,]