| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- from django.shortcuts import render
- from django.core.mail import send_mail
- from django.core.mail import SafeMIMEText
- from django.core.mail import EmailMultiAlternatives
- from django.template.loader import get_template
- from django.template import Context
- from django.template import engines, TemplateSyntaxError
- from datetime import date
- from uuid import uuid4,UUID
- import json
- from datetime import datetime
- import re
- from django.db.models import Sum
- #from .templatetags.commtags import *
- from django.shortcuts import render
- from .models import *
- from .forms import *
- from config.views import *
- from azienda.views import *
- from utente.views import *
- from documento.views import *
- def template_from_string(template_string, using=None):
- """
- Convert a string into a template object,
- using a given template engine or using the default backends
- from settings.TEMPLATES if no engine was specified.
- This function is based on django.template.loader.get_template,
- but uses Engine.from_string instead of Engine.get_template.
- """
- chain = []
- engine_list = engines.all() if using is None else [engines[using]]
- for engine in engine_list:
- try:
- return engine.from_string(template_string)
- except TemplateSyntaxError as e:
- chain.append(e)
- raise TemplateSyntaxError(template_string, chain=chain)
- class ServizioMail:
- def __init__(self,debug=False):
- self._from_ = getConfigurazione('default_mail_from')
- self._to_ = []
- self._to = {}
- self.debug = debug
- self.soggetto = ""
- self.corpo_testo = ""
- self.corpo_html = ""
- self.set_data()
- self.json = None
- def set_mailfrom(self,mail_from):
- self._from_ = mail_from
- if self.debug: print('mail_from',self._from_)
- def set_listadestinatari(self,lista=[]):
- self._to_ = []
- self.add_listadestinatari(lista)
- if self.debug: print('lista destinatari',self._to_)
- def set_rcptto(self,lista=[]):
- self.set_listadestinatari(lista)
- def add_listadestinatari(self,mail=None):
- if self.debug: print('type mail:',type(mail))
- if mail:
- if type(mail) == list:
- for i in mail:
- self._to_.append(i)
- return
- self._to_.append((mail))
- if self.debug: print('lista destinatari',self._to_)
- def add_to(self,mail=None):
- self.add_listadestinatari(mail)
- def set_soggetto(self,soggetto=""):
- self.soggetto = soggetto
- def set_oggetto(self,oggetto="",html=False):
- self.oggetto = oggetto
- if self.debug: print('set_oggetto html:',html)
- self.html = html
- def set_data(self,data={}):
- self.data = data
- #print('data',self.data)
- def set_json(self,data={}):
- self.json = json.dumps(data)
- if self.debug: print('json:',self.json)
- def send(self):
- # normalizza i destinatari (uno solo, non ripetuti)
- if self.debug: print('self._to_',self._to_)
- for i in self._to_:
- self._to[i] = i
-
- self._to_complete = [ x for x in self._to.values() ]
- if self.debug: print("destinatari:",self._to_complete)
-
- #rendering del soggetto
- soggetto = template_from_string(self.soggetto)
- soggetto_render = soggetto.render(self.data)
- if self.debug: print("soggetto",soggetto)
- oggetto = template_from_string(self.oggetto)
- oggetto_render = None
- try:
- oggetto_render = oggetto.render(self.data)
- except TemplateSyntaxError as tse:
- print('Errore nel Template')
- print(tse)
- if oggetto_render:
- if self.debug: print('oggetto render',oggetto_render)
- for tt in self._to_complete:
- ttl = [tt,]
- msg = None
- if self.debug: print('richiesta html::',self.html)
- if self.html:
- msg=EmailMultiAlternatives(soggetto_render, oggetto_render, self._from_, ttl)
- msg.attach_alternative(oggetto_render, "text/html")
- else: msg=EmailMultiAlternatives(soggetto_render, oggetto_render, self._from_, ttl)
- if self.json:
- msg.attach_alternative(self.json,'text/json')
- msg.send()
- def welcome(request):
- '''
- punto di ingresso.
- vengono mostrati tutti i modelli presenti presenti
- '''
- print('__name__',__name__,'welcome')
- data = dict()
- data['HeaderTitle'] = getConfig('HeaderTitle')
- if not 'AziendaId' in request.session:
- print('manca azienda')
- return HttpResponseRedirect(reverse("login:start"))
- else:
- data['AziendaId'] = request.session['AziendaId']
- print("Azienda rilevata",data['AziendaId'])
- if not 'AdminId' in request.session or 'UserId' in request.session:
- print("Non rilevo presensa UserId e AdminId in request.session")
- return HttpResponseRedirect(reverse("login:start"))
- else:
- data['AdminId'] = request.session['AdminId']
- if 'UserId' in request.session:
- data['UserId'] = request.session['UserId']
- #filtro:
- # selezionare tutti gli utenti per AziendaId
- data['admin'] = User.objects.get(pk=data['AdminId'])
- data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])
- data['comunicazione'] = data['azienda'].comunicazione_set.all()
- #data['comm'] = data['azienda'].comm
- print(data)
- if request.method == "POST":
- print('Richiesta effettuata')
- print(request.POST)
- if 'Ritorna' in request.POST:
- return HttpResponseRedirect(reverse("azienda:welcome"))
- if 'Nuovo' in request.POST:
- del request.session['ComId']
- return HttpResponseRedirect(reverse("comunicazione:edit"))
- if 'edit' in request.POST:
- request.session['ComId'] = request.POST.get('edit')
- print('ComId',request.session.get('ComId'))
- return HttpResponseRedirect(reverse("comunicazione:edit"))
-
- return render(request,'comunicazione.welcome.html',data)
- def edit(request):
- print('__name__',__name__,'edit')
- data = dict()
- data['HeaderTitle'] = getConfig('HeaderTitle')
- if not 'AziendaId' in request.session:
- print('manca azienda')
- return HttpResponseRedirect(reverse("login:start"))
- data['AziendaId'] = request.session['AziendaId']
- print("Azienda rilevata",data['AziendaId'])
- data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])
- if not 'AdminId' in request.session or 'UserId' in request.session:
- print("Non rilevo presensa UserId e AdminId in request.session")
- return HttpResponseRedirect(reverse("login:start"))
- data['AdminId'] = request.session['AdminId']
- print(data)
- if 'UserId' in request.session:
- data['UserId'] = request.session['UserId']
- comunicazione = Comunicazione()
- if 'ComId' in request.session:
- ComId = request.session.get('ComId')
- print('trovato ComId',ComId)
- comunicazione = Comunicazione.objects.get(pk=ComId)
- if request.method == 'POST':
- print('richiesta effettuata')
- if 'Ritorna' in request.POST:
- return HttpResponseRedirect(reverse("comunicazione:welcome"))
- fd = formDocumento(request.POST)
- if fd.is_valid():
- print('documento valido')
- comunicazione.mittente = fd.cleaned_data.get('mittente')
- comunicazione.soggetto = fd.cleaned_data.get('soggetto')
- comunicazione.corpo = fd.cleaned_data.get('corpo')
- comunicazione.azienda = data['azienda']
- comunicazione.save()
- else:
- print('documento non valido')
- data['documento'] = formDocumento(request.POST)
- else:
- print('post non valido')
- tmp = dict()
- if len(data['azienda'].mail):
- print('azienda contiene email',data['azienda'].mail)
- tmp['mittente'] = data['azienda'].mail
- else:
- print('azienda non contiene email, prendo default',getConfig("DefaultEmail"))
- tmp['mittente'] = getConfig("DefaultEmail")
- tmp['soggetto'] = comunicazione.soggetto
- tmp['corpo'] = comunicazione.corpo
- data['documento'] = formDocumento(tmp)
- print(data)
- return render(request,'comunicazione.edit.html',data)
- '''
- def edit(request):
- AdminId = request.session['AdminId']
- data={}
- data['HeaderTitle'] = getConfig('HeaderTitle')
- data['admin' ] = User.objects.get(pk=AdminId)
- if request.method == "POST":
- print("Richiesta creazione nuova azienda")
- nuovaazienda = formAzienda(request.POST)
- if nuovaazienda.is_valid():
- print("il form e' valido",request.POST)
- azienda = Azienda()
- azienda.nome = nuovaazienda.cleaned_data.get('nome')
- azienda.mail = nuovaazienda.cleaned_data.get('mail')
- azienda.partitaiva = nuovaazienda.cleaned_data.get('partitaiva')
- azienda.save()
- request.session['AziendaId'] = azienda.id
- assegnazione = Assegnazione()
- assegnazione.azienda=azienda
- assegnazione.user=User.objects.get(pk=AdminId)
- assegnazione.save()
- return HttpResponseRedirect(reverse('azienda:welcome'))
- else:
- print("form non valido")
- data['azienda'] = formAzienda(request.POST)
- else: #non è un post
- print("Non è un post")
- formAziendaField = formAzienda()
- data['azienda'] = formAziendaField
- return render(request,'azienda.edit.html',data)
- #filtro:
- # selezionare tutti gli utenti per AziendaId
- admin = User.objects.get(pk=data['AdminId'])
- data['admin'] = admin
- azienda = Azienda.objects.get(pk=data['AziendaId'])
- data['azienda'] = azienda
- utenti = Utente.objects.filter(azienda = azienda)
- data['utenti'] = utenti
- if request.method == 'POST':
- if 'ritorna' in request.POST:
- return HttpResponseRedirect(reverse("azienda:welcome"))
- if 'DeleteDocument' in request.POST:
- print('Richiesta cancellazione Documento',request.POST)
- documento = request.POST['DeleteDocument'] # perche' lo considera una lista e non un singolo valore?
- print('richiesta cancellazione documento:',documento)
- try:
- d = Documento.objects.get(pk=documento)
- delete_file(d) #rimozione fisica del documento
- setLog(5,documento,admin)
- d.delete()
- except Documento.DoesNotExist as dne:
- print('il documento non esiste')
- filecaricati = AdminUpload(request.POST,request.FILES)
- if filecaricati.is_valid():
- print('record filecaricati validi')
- if 'indice' in filecaricati.cleaned_data and filecaricati.cleaned_data.get('indice'):
- fileindice = filecaricati.cleaned_data.get('indice')
- print('presente file indice',fileindice)
- save_and_load_file_indice(request,fileindice,azienda)
- if 'allegati' in filecaricati.cleaned_data and filecaricati.cleaned_data.get('allegati'):
- print('presenti documenti da allegare')
- listadocumenti = filecaricati.cleaned_data['allegati']
- print(listadocumenti)
- print(type(azienda))
- print(azienda.id)
- listaok,listanotok = save_and_load_file_multiple(listadocumenti,request,utenti,azienda,filecaricati.cleaned_data['descrizione'])
- data['listaok'] = listaok
- data['listanotok'] = listanotok
- ElencoDocumentiPerAzienda = Documento.objects.filter(azienda=azienda).order_by("utente__nome","documento")
- data['ElencoDocumentiPerAzienda'] = ElencoDocumentiPerAzienda
- print("Numero documenti associati",len(ElencoDocumentiPerAzienda))
- '''
|