views.py 15 KB

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