views.py 14 KB

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