views.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  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,permesso)
  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. else:
  259. per = None
  260. print(amm,azi)
  261. if not amm:
  262. print('problema con la definizione di amministratore')
  263. return []
  264. if not azi:
  265. print('problema con la definizione di azienda')
  266. return []
  267. # ottiene l'elenco dei permessi gia' assegnati per l'amministratore
  268. permessi_assegnati=getP(amministratore=amm,azienda=azi)
  269. print('dati rilevati',amm.id,amm.login)
  270. # devo ottenere la lista delle sedi, filtrate per azienda autorizzate per amministratore
  271. sedix = azi.sede_set.all()
  272. print("sedix len",len(sedix))
  273. lam = list()
  274. ### delicatissimo
  275. ### verificare che in lam venga effettivamente inserita solo la sede e non altri componenti
  276. ### sia che ci siano che non ci siano i permessi assegnati
  277. if per.nome not in permessi_assegnati:
  278. print("per.nome non in permessi assegnati")
  279. for s in sedix:
  280. tmp = SEP.objects.filter(sede=s).filter(amministratore=amm).filter(permesso=per)
  281. for n in tmp:
  282. #lam.append({'sede':n,'permesso':per})
  283. print("s:",n,per.nome,type(n))
  284. lam.append(n.sede)
  285. else:
  286. print("per.nome in permessi assegnati")
  287. #abbiamo un diritto di livello superiore
  288. for s in sedix:
  289. print("s:",s,per.nome,type(s))
  290. lam.append(s)
  291. #tmp.append({'sede':s,'permesso':per})
  292. #tmp.append(s)
  293. #lam = tmp
  294. print("lam",len(lam),type(lam))
  295. print(lam)
  296. print("****")
  297. sedi = list()
  298. oggetto = list()
  299. for p in lam:
  300. print("p:",p,type(p),p)
  301. sedi.append(p)
  302. oggetto.append({'sede':p,'permesso':per})
  303. #print("sedi",sedi)
  304. #print("oggetto",oggetto)
  305. print("sede 0",sedi[0].nome)
  306. sedi = sorted(sedi, key = lambda x: x.nome,reverse=False)
  307. print('sedi disponibili',len(sedi))
  308. return (sedi,oggetto)
  309. #riporta l'elenco dei permessi per sede filtrato per amministratore
  310. def getSEP(sede=None,amministratore=None):
  311. print('getSEP',sede,amministratore)
  312. sed=None
  313. if isinstance(sede,Sede):
  314. print('si tratta di una istanza dede')
  315. sed=sede
  316. if isinstance(sede,int):
  317. print('sede: istanza int')
  318. sed = Sede.objects.get(pk=sede)
  319. amm=None
  320. if isinstance(amministratore,Amministratore):
  321. print('si tratta di una istanza amministratore, quindi possiamo direttamente accedere')
  322. amm = amministratore
  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. return []
  328. permessi = list()
  329. for p in sed.sep_set.all().filter(amministratore=amm):
  330. permessi.append(p.permesso.nome)
  331. print('permessi disponibili',len(permessi))
  332. #for i in permessi: print(i,)
  333. return permessi
  334. # riporta un permesso (generico) o tutti i permessi
  335. def getPermesso(permesso=None):
  336. if permesso:
  337. try:
  338. p = Permesso.objects.get(nome=permesso)
  339. except Permesso.DoesNotExist as dne:
  340. p = None
  341. print("Errore:",dne)
  342. else:
  343. p = Permesso.objects.all()
  344. return p
  345. # da questa parte si impostano i permessi
  346. def setDefault(amministratore=None):
  347. pass
  348. def setAMP(amministratore=None,permesso=None):
  349. amm=None
  350. print('getAMP',amministratore)
  351. if isinstance(amministratore,Amministratore):
  352. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  353. amm = amministratore
  354. if isinstance(amministratore,int):
  355. print('si tratta di un int, quindi dobbiamo cercare il valore')
  356. amm = Amministratore.objects.get(pk=amministratore)
  357. per=None
  358. print('getAMP',permesso)
  359. if isinstance(permesso,Permesso):
  360. print('si tratta di una istanza, possiamo passarla direttamente')
  361. per = permesso
  362. if isinstance(permesso,int):
  363. print('si tratta di un int, quindi dobbiamo cercare il valore')
  364. per = Permesso.objects.get(pk=permesso)
  365. if isinstance(permesso,str):
  366. print('si tratta di una str, quindi dobbiamo cercare il valore')
  367. per = Permesso.objects.get(nome=permesso)
  368. # aggiungiamo il permesso necessario
  369. p = AMP()
  370. p.permesso=per
  371. p.amministratore=amm
  372. try:
  373. p.save()
  374. except IntegrityError as ie:
  375. print(ie)
  376. return [p,]
  377. def setAZP(azienda=None,amministratore=None,permesso=None):
  378. print('setAZP:',azienda,amministratore,permesso)
  379. azi = None
  380. if isinstance(azienda,Azienda):
  381. print('azienda: istanza')
  382. azi=azienda
  383. if isinstance(azienda,int):
  384. print('azienda: int')
  385. azi = Azienda.objects.get(pk=azienda)
  386. amm=None
  387. if isinstance(amministratore,Amministratore):
  388. print('amministratore: istanza')
  389. amm = amministratore
  390. if isinstance(amministratore,str):
  391. try:
  392. amministratore = int(amministratore)
  393. except ValueError as ve:
  394. print(ve)
  395. if isinstance(amministratore,int):
  396. print('si tratta di un int, quindi dobbiamo cercare il valore')
  397. amm = Amministratore.objects.get(pk=amministratore)
  398. per=None
  399. if isinstance(permesso,Permesso):
  400. print('permesso: istanza')
  401. per = permesso
  402. if isinstance(permesso,int):
  403. print('permesso: int')
  404. per = Permesso.objects.get(pk=permesso)
  405. if isinstance(permesso,str):
  406. print('permesso: str')
  407. per = Permesso.objects.get(nome=permesso)
  408. if not azi: print("Errore opzione azi")
  409. if not amm: print("Errore opzione amm")
  410. if not per: print("Errore opzione per")
  411. # aggiungiamo il permesso necessario
  412. print('in fase di salvataggio',azi,amm,per)
  413. p = AZP()
  414. p.permesso=per
  415. p.amministratore=amm
  416. p.azienda=azi
  417. try:
  418. p.save()
  419. except IntegrityError as ie:
  420. print(ie)
  421. return [p,]
  422. # set Permessi Sede
  423. def setSEP(sede=None,amministratore=None,permesso=None):
  424. sed=None
  425. if isinstance(sede,Sede):
  426. print('si tratta di una istanza dede')
  427. sed=sede
  428. if isinstance(sede,int):
  429. print('sede: istanza int')
  430. sed = Sede.objects.get(pk=sede)
  431. amm=None
  432. if isinstance(amministratore,Amministratore):
  433. print('si tratta di una istanza, quindi possiamo direttamente accedere')
  434. amm = amministratore
  435. if isinstance(amministratore,str):
  436. print("Amministratore: str")
  437. amministratore = int(amministratore)
  438. if isinstance(amministratore,int):
  439. print('Amministratore: int')
  440. amm = Amministratore.objects.get(pk=amministratore)
  441. per=None
  442. if isinstance(permesso,Permesso):
  443. print('si tratta di una istanza, possiamo passarla direttamente')
  444. per = permesso
  445. if isinstance(permesso,int):
  446. print('si tratta di un int, quindi dobbiamo cercare il valore')
  447. per = Permesso.objects.get(pk=permesso)
  448. if isinstance(permesso,str):
  449. print('si tratta di una str, quindi dobbiamo cercare il valore')
  450. per = Permesso.objects.get(nome=permesso)
  451. if not sed: print("Errore opzione sed")
  452. if not amm: print("Errore opzione amm")
  453. if not per: print("Errore opzione per")
  454. # aggiungiamo il permesso necessario
  455. p = SEP()
  456. p.permesso=per
  457. p.amministratore=amm
  458. p.sede=sed
  459. try:
  460. p.save()
  461. except IntegrityError as ie:
  462. print(ie)
  463. return [p,]