| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127 |
- from django.shortcuts import render
- from django.core.mail import send_mail
- from django.core.mail import SafeMIMEText
- from configurazione.views import getConfigurazione
- #from domini.views import Aggiorna_Dominio_Da_Causale
- 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,datetime
- from uuid import uuid4,UUID
- import json
- from mqtt import views as m
- from mqtt.views import mqtt
- from .models import *
- import re
- from django.db.models import Sum
- from .templatetags.commtags import *
- class ServizioMail:
- def __init__(self,debug=False):
- self._from_ = getConfigurazione('mail_from')
- self._to_ = []
- self._to = {}
- self.debug = debug
- self.soggetto = ""
- self.corpo_testo = ""
- self.corpo_html = ""
- self.set_data()
- self.json = None
- def template_from_string(self,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)
- 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 = self.template_from_string(self.soggetto)
- soggetto_render = soggetto.render(self.data)
- if self.debug: print("soggetto",soggetto)
- oggetto = self.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 send_mail(self):
- '''
- wrapper per aggiornare il nome della funzione che spedisce le mail
- '''
- print('Sto usando ancora send_mail')
- self.send()
- def ControlloScadenzeRegistrar(request,demo=0,dominio=0):
- '''
- questa funzione effettua la scansione dei domini per verificare che non ci siano scadenze imminenti.
- il flag: demo se 1 non effettua l'invio
- dovrebbero venir inviate le seguenti mail:
- scadenza in arrivo: al destinatario
- lista prossime scadenze notificate all'amministrazione e al server
- demo = 1: nessuna operazione
- demo = 0: modalita' demo, non invia le email
- dominio = 0: operazioni normali
- dominio = id: predispone invio mail per il dominio <id>
- causale = 0: operazioni normali
- causale = id: invia email con la causale <id>
- '''
- if demo==1: demo=True
- else: demo=False
- listalog=[]
- listalog.append(("demo: ",demo))
- domini = None
- if dominio:
- # richiesta di singolo dominio.
- try:
- domini = Domini.objects.all().filter(id=dominio)
- listalog.append(("dominio richiesto:",domini[0].nome))
- except Domini.DoesNotExists as dne:
- print('dominio non trovato')
- domini = None
- if not domini:
- # estrae tutti i domini ordinati per scadenza contratto
- domini = Domini.objects.all().filter(enabled=True).order_by('date_expire_contract')
- listadomini=[]
- for d in domini:
- if d.registrar.registrazione: # la gestione del registrar e' nostra.
- #l'avviso viene avviato quando viene raggiunto il limite di registrazione indicato
- #smette di essere inviato dopo x giorni successivi alla scadenza
- print("sc contratto: ",d.nome)
- if int((d.date_expire_registrar - date.today()).days) < int(getConfigurazione('registrar-giorni-preavviso')) and int((d.date_expire_registrar - date.today()).days) > -int(getConfigurazione('registrar-giorni-posticipati')):
- print("sc contratto: ",d.nome,d.date_expire_registrar,(d.date_expire_registrar - date.today()).days)
- # verifica eventuali causali gia' registrate e presenti
- listadomini.append(d)
- listalog.append(('scadenza registrazione',d.nome,d.date_expire_registrar,(d.date_expire_registrar - date.today()).days))
- data={}
- data['demo']=demo
- data['domini']=listadomini
- print('domini',listadomini)
- for i in data['domini']:
- print(i.registrar.nome)
- # invia la mail
- for i in listadomini:
- sm = ServizioMail()
- print('dominio in corso di comunicazione',i.nome)
- # servono alcune cose:
- #1: template
- idtemplate = getConfigurazione('template-registrar-in-scadenza')
- template = Template.objects.get(pk=idtemplate)
- #2: lista dei destinatari a cui mandare l'avviso
- #3: lista da inviare in amministrazione
- print(template.nome)
- listadestinatari=[]
- listadestinatari.append(getConfigurazione('mail_notification'))
- dictdict={}
- dictdict['domini'] = i.__dict__
- dictdict['dominio'] = i
- dictdict['registrar'] = i.registrar.nome
- dictdict['registrar.id'] = i.registrar
- dictdict['totaledomini'] = len(listadomini)
- print(dictdict)
- #nota ... la funzione dict, non mantiene gli agganci alle altre cartele tramite chiave
-
- sm.set_rcptto(listadestinatari)
- sm.set_soggetto(template.soggetto)
- sm.set_oggetto(template.oggetto)
- sm.set_data(dictdict)
- if not demo: sm.send_mail()
-
- # ignoro la verifica dei contatti, tanto stiamo andando solo con la voce nel dominio
- return render(request,"Controllo.Scadenze.Registrar.html",data)
- def ControlloScadenzeContratto(request,demo=0,dominio=None,causale=None):
- '''
- questa funzione effettua la scansione dei domini per verificare che non ci siano scadenze imminenti.
- il flag: demo se 1 non effettua l'invio
- dovrebbero venir inviate le seguenti mail:
- scadenza in arrivo: al destinatario
- lista prossime scadenze notificate all'amministrazione e al server
- demo = 1: nessuna operazione
- demo = 0: modalita' demo, non invia le email
- dominio = 0: operazioni normali
- dominio = id: predispone invio mail per il dominio <id>
- causale = 0: operazioni normali
- causale = id: invia email con la causale <id>
- '''
- if demo==1: demo=True
- else: demo=False
- listalog=[]
- listalog.append(("demo: ",demo))
- domini = None
- if dominio:
- # richiesta di singolo dominio.
- try:
- domini = Domini.objects.all().filter(id=dominio)
- listalog.append(("dominio richiesto:",domini[0].nome))
- except Domini.DoesNotExists as dne:
- print('dominio non trovato')
- domini = None
- if not domini:
- # estrae tutti i domini ordinati per scadenza contratto
- domini = Domini.objects.all().filter(enabled=True).order_by('nome')
- # estrae l'elenco delle causali
- causaleFlag=False
- causali = None
- if causale:
- print('causale richiesta:',causale)
- listalog.append(('causale richiesta:',causale))
- causali = Causale.objects.filter(id=causale)
- else:
- causali=Causale.objects.all()
- listadomini=[]
- for d in domini:
- for c in causali:
- if c.enabled: #se la causale e' abilitata
- if c.renew_request: #riguarda proprio la scadenza del contratto
- print("sc contratto: ",d.nome,c.nome,d.date_expire_contract,(d.date_expire_contract - date.today()).days,c.valore)
- listalog.append(("scadenza: ",d.nome,c.nome,d.date_expire_contract,(d.date_expire_contract - date.today()).days,c.valore))
- if int((d.date_expire_contract - date.today()).days) == int(c.valore): #raggiunta di avviso raggiunta
- print("sc contratto trovata: ",d.nome,c.nome,d.date_expire_contract,(d.date_expire_contract - date.today()).days,c.valore)
- listalog.append(("scadenza trovata: ",d.nome,c.nome,d.date_expire_contract,(d.date_expire_contract - date.today()).days,c.valore))
- # verifica eventuali causali gia' registrate e presenti
- try:
- print('ordine:',c.id,c.nome,c.ordine,"ultima causale",d.last_causale.id,d.last_causale.nome,d.last_causale.ordine)
- listalog.append(("Causale trovata",c.id,c.nome,c.ordine,"ultima causale",d.last_causale.id,d.last_causale.nome,d.last_causale.ordine))
- except Domini.last_causale.RelatedObjectDoesNotExist as rodne:
- print("errore:",rodne)
- listalog.append(("Errore:",rodne))
- d.last_causale_id = getConfigurazione('causale:default')
- print('d.last_causale_id',d.last_causale_id,d.last_causale.nome)
- listalog.append(('d.last_causale_id',d.last_causale_id,d.last_causale.nome))
- d.save()
- try:
- # se la posizione da richiedere e' piu' alta di quella precedentemente inviata:
- # correzione del 06/09/21a
- print("ordine causale trovata",c.ordine,"ultima causale assegnata",d.last_causale.ordine)
- if c.ordine > d.last_causale.ordine:
- print('ordine confermato: ',c.ordine,d.last_causale.ordine,d.last_causale.nome)
- listalog.append(('ordine confermato: ',c.ordine,d.last_causale.ordine,d.last_causale.nome))
- d.last_causale = c
- listadomini.append(d)
- else:
- print('ordine NON confermato: ',c.ordine,d.last_causale.ordine,d.last_causale.nome)
- listalog.append(('ordine NON confermato: ',c.ordine,d.last_causale.ordine,d.last_causale.nome))
- except Causale.DoesNotExist as dne:
- print('ordine forzato: ',c.ordine,d.last_causale.ordine)
- listalog.append(('ordine forzato: ',c.ordine,d.last_causale.ordine))
- d.last_causale = c
- listadomini.append(d)
- if not d.renew_code:
- d.renew_code = uuid4()
- if d.rinnovo_automatico:
- Aggiorna_Dominio_Da_Causale(d,getConfigurazione('Rinnovo:Automatico'))
- if not demo:
- d.save()
- else:
- print("Non salvo - modalita' demo")
- listalog.append(("Non salvo - modalità demo"))
- data={}
- #if demo:
- # data['data']=True
- data['demo']=demo
- data['totaledomini'] = len(domini)
- data['domini']=listadomini
- print('domini',listadomini,len(listadomini))
- listalog.append(('domini',listadomini,len(listadomini)))
- # invia la mail ai destinatari
- for i in listadomini:
- sm = ServizioMail()
- print('dominio in corso di comunicazione',i.nome)
- # servono alcune cose:
- #1: template
- template = i.last_causale.template
- #2: lista dei destinatari a cui mandare l'avviso
- #3: lista da inviare in amministrazione
- print(template.nome)
- listadestinatari=[]
- print(i.contatti)
- PresenteContattoDestinatari=False
- if len(i.contatti)>0:
- PresenteContattoDestinatari=True
- tmpdestinatari = re.split(',| ',i.contatti)
- for td in tmpdestinatari:
- # dovremmo validare ogni elemento
- listadestinatari.append(td)
- print("mail to ",td)
- listalog.append(("mail to ",td))
- listadestinatari.append(i.last_causale.from_email)
- dictdict={}
- dictdict['dominio'] = i.__dict__
- dictdict['causale'] = i.last_causale.__dict__
- dictdict['totaledomini'] = len(listadomini)
- if not demo: dictdict['uuid'] = i.renew_code
- else: dictdict['uuid'] = uuid4()
- if not demo: dictdict['renew_code'] = i.renew_code
- else: dictdict['renew_code'] = uuid4()
- print('!!presenza flag PresenteContattoDestinatari:',PresenteContattoDestinatari)
- listalog.append(('!!presenza flag PresenteContattoDestinatari:',PresenteContattoDestinatari))
- if PresenteContattoDestinatari:
- dictdict['PresenteContattoDestinatari']=True
- sm.set_rcptto(listadestinatari)
- sm.set_soggetto(template.soggetto)
- sm.set_oggetto(template.oggetto)
- sm.set_data(dictdict)
- if not demo:
- sm.send()
- #************************************
- # invia la mail alla contabilita'
- lista_destinatari = []
- if i.last_causale.send_email_account:
- if len(i.last_causale.to_account):
- tmplista = re.split(',| ',i.last_causale.to_account)
- for t in tmplista:
- listadestinatari.append(t)
- accountdft = getConfigurazione('mail:accounting')
- if accountdft and len(accountdft):
- accountdft = re.split(',| ',accountdft)
- for t in accountdft:
- listadestinatari.append(t)
-
- co = getConfigurazione("mail:accounting:domain:expire")
- template = None
- flag = False
- try:
- template = Template.objects.get(pk=co)
- flag = True
- except Template.DoesNotExists as dne:
- print('template errato',co)
- listalog.append(('template errato',co))
- sm.set_rcptto(listadestinatari)
- sm.set_soggetto(template.soggetto)
- sm.set_oggetto(template.oggetto)
- sm.set_data(dictdict)
- if flag and not demo:
- sm.send()
- else:
- print("Modalita' Demo, non spedisco")
- listalog.append("Modalita' demo, nessuna spedizione")
- # ignoro la verifica dei contatti, tanto stiamo andando solo con la voce nel dominio
-
- if not demo:
- data['listalog'] = listalog
- return render(request,"Controllo.Scadenze.Contratto.html",data)
- def ControlloScadenzaDefinitiva(request,demo=0,dominio=None):
- '''
- questa funzione effettua la scansione dei domini per verificare che non ci siano scadenze imminenti.
- il flag: demo se 1 non effettua l'invio
- dovrebbero venir inviate le seguenti mail:
- scadenza in arrivo: al destinatario
- lista prossime scadenze notificate all'amministrazione e al server
- demo = 1: nessuna operazione
- demo = 0: modalita' demo, non invia le email
- dominio = 0: operazioni normali
- dominio = id: predispone invio mail per il dominio <id>
- causale = 0: operazioni normali
- causale = id: invia email con la causale <id>
- '''
- domini = Domini.objects.all().filter(enabled=True).order_by('date_expire_contract')
- if dominio:
- print('dominio richiesto:',dominio)
- domini = Domini.objects.filter(id=dominio).filter(enabled=True).order_by('date_expire_contract')
- print('dominio trovato:',domini)
- causali = Causale.objects.get(pk=getConfigurazione('dominio-scaduto'))
- print('causale trovata:',causali)
- listadomini=[]
- for d in domini:
- if causali.enabled: #se la causale e' abilitata
- if causali.domain_expired: #riguarda proprio la scadenza del contratt
- print('scaduto',d.nome,int((d.date_expire_contract - date.today()).days),int(causali.valore))
- # se oggi - data_scadenza (25-20> 3...) allora e' scaduto.
- if int((date.today() - d.date_expire_contract).days) > int(causali.valore): #raggiunta di avviso raggiunta
- print("scadenze raggiunte: ",d.nome,causali.nome,d.date_expire_contract,(d.date_expire_contract - date.today()).days,causali.valore)
- # verifica eventuali causali gia' registrate e presenti
- d.last_causale = causali
- print('assegnata causale:',d.last_causale.nome)
- d.enabled = False
- d.save()
- listadomini.append(d)
- data={}
- data['domini']=listadomini
- print('domini',listadomini)
- # invia la mail
- sm = ServizioMail()
- for i in listadomini:
- print(i.nome)
- # servono alcune cose:
- #1: template
- template = causali.template
- #2: lista dei destinatari a cui mandare l'avviso
- #3: lista da inviare in amministrazione
- print(template.nome)
- listadestinatari=[]
- print(i.contatti)
- PresenteContattoDestinatari=False
- #if len(i.contatti)>0:
- # PresenteContattoDestinatari=True
- # tmpdestinatari = re.split(',| ',i.contatti)
- # for d in tmpdestinatari:
- # # dovremmo validare ogni elemento
- # listadestinatari.append(d)
- # print("mail to ",d)
- listadestinatari.append(causali.from_email)
- dictdict={}
- dictdict['dominio'] = i.__dict__
- dictdict['causale'] = causali.__dict__
- dictdict['data'] = date.today()
- print('!!presenza flag PresenteContattoDestinatari:',PresenteContattoDestinatari)
- if PresenteContattoDestinatari: dictdict['PresenteContattoDestinatari']=True
-
- sm.set_rcptto(listadestinatari)
- sm.set_soggetto(template.soggetto)
- sm.set_oggetto(template.oggetto)
- sm.set_data(dictdict)
- if demo==1:
- sm.mail()
- return render(request,"Controllo.Scadenze.html",data)
- def ControlloScadenzaVicina(request,demo=0,dominio=None):
- '''
- questa funzione ha il solo scopo di comunicare periodicamente le scadenze vicine (il range puo' essere desunto dalla configurazione)
- il flag: demo se 1 non effettua l'invio
- '''
- if demo==1: demo=True
- else: demo=False
- domini_scadenza_contract = Domini.objects.all().filter(enabled=True).order_by('date_expire_contract')
- domini_scadenza_registrar = Domini.objects.all().filter(enabled=True).order_by('date_expire_registrar')
- if dominio:
- print('dominio richiesto:',dominio)
- domini = Domini.objects.filter(id=dominio).filter(enabled=True).order_by('date_expire_contract')
- domini_scadenza_contract = Domini.objects.filter(id=dominio).filter(enabled=True).order_by('date_expire_contract')
- domini_scadenza_registrar = Domini.objects.filter(id=dominio).filter(enabled=True).order_by('date_expire_registrar')
- print('domini la cui registrazione e in scadenza:',domini_scadenza_registrar)
- print('domini il cui contratto e in scadenza: ',domini_scadenza_contract)
- limiteAvviso = int(getConfigurazione("scadenza:limite:avviso"))
- listascadenzaregistrar = []
- listascadenzacontract = []
- for d in domini_scadenza_registrar:
- if int((d.date_expire_registrar - date.today()).days) < limiteAvviso:
- print(int((d.date_expire_registrar - date.today()).days))
- listascadenzaregistrar.append(d)
- for d in domini_scadenza_contract:
- if int((d.date_expire_contract - date.today()).days) < limiteAvviso:
- print(int((d.date_expire_contract - date.today()).days))
- listascadenzacontract.append(d)
- data={}
- data['limiteAvviso'] = limiteAvviso
- data['listascadenzaregistrar'] = listascadenzaregistrar
- data['listascadenzacontract'] = listascadenzacontract
- # invia la mail
- sm = ServizioMail()
- print(dir(sm))
- template = Template.objects.get(pk=getConfigurazione("scadenza:limite:template"))
- listadestinatari = []
- listadestinatari.append(getConfigurazione("mail:notifica"))
- dictdict={}
- dictdict['listascadenzaregistrar'] = listascadenzaregistrar
- dictdict['listascadenzacontract'] = listascadenzacontract
- dictdict['data'] = date.today()
- dictdict['limiteavviso'] = limiteAvviso
- print(template.soggetto)
- print(template.oggetto)
- sm.set_rcptto(listadestinatari)
- sm.set_soggetto(template.soggetto)
- sm.set_oggetto(template.oggetto)
- sm.set_data(dictdict)
- if not demo:
- sm.send()
- return render(request,"Controllo.Vicino.html",data)
-
- def ConfermaScadenza(request,uuid=None):
- # primo step, verifichiamo uuid
- print("uuid =",uuid)
- print(type(uuid))
- dom = Domini.objects.all().filter(enabled=True)
- for d in dom:
- print("compare:",uuid,d.renew_code)
- if d.renew_code and uuid == UUID(d.renew_code):
- print(d.nome,uuid)
- '''
- passaggi da fare:
- chiedere conferma
- dare conferma al cliente della registrazione
- avvisare l'amministrazione
- aggiornare il db
- '''
- value = {}
- value['dominio'] = d
- if request.method == 'POST':
- invia_risposta = False
- causale = None
- if "Renew" in request.POST:
- rinnova = request.POST.get('Renew')
- print('dominio da rinnovare',rinnova)
- d = Domini.objects.get(pk=rinnova)
- if d:
- # carica causale di autorizzato al rinnovo
- causale = Causale.objects.get(pk=getConfigurazione("causale:rinnovo_autorizzato"))
- print("causale: ",causale.nome)
- d.last_causale = causale
- d.renew_code = None
- d.save()
- invia_risposta = True
- value['risposta'] = True
- if "Loose" in request.POST:
- perdi = request.POST.get('Loose')
- print('dominio da NON rinnovare',perdi)
- d = Domini.objects.get(pk=perdi)
- if d:
- # carica causale di autorizzato al rinnovo
- causale = Causale.objects.get(pk=getConfigurazione("causale:rinnovo_non_autorizzato"))
- print("causale: ",causale.nome)
- d.last_causale = causale
- d.renew_code = None
- d.save()
- invia_risposta = True
- value['risposta']=False
- if invia_risposta:
- sm = ServizioMail()
- listadestinatari=[]
- print(d.contatti)
- if len(d.contatti)>0:
- tmpdestinatari = re.split(',| ',d.contatti)
- for t in tmpdestinatari:
- # dovremmo validare ogni elemento
- listadestinatari.append(t)
- print("email to: ",t)
- listadestinatari.append(causale.from_email)
- dictdict={}
- dictdict['dominio'] = d.__dict__
- dictdict['causale'] = causale.__dict__
- dictdict['data'] = date.today()
- sm.set_rcptto(listadestinatari)
- sm.set_soggetto(causale.template.soggetto)
- sm.set_oggetto(causale.template.oggetto)
- sm.set_data(dictdict)
- sm.send()
- if causale.send_email_account:
- ac = getConfigurazione("mail:accounting")
- sm.set_rcptto([ac,])
- te = getConfigurazione("mail:accounting_template")
- template = Template.objects.get(pk=te)
- sm.set_soggetto(template.soggetto)
- sm.set_oggetto(template.oggetto)
- sm.set_data(dictdict)
- sm.send()
- value['causale'] = causale
- print("value:",value)
- return render(request,"conferma.scelta.rinnovo.html",value)
- return render(request,'richiesta.conferma.html',value)
- return render(request,"notfound.html")
- def ConfermaScadenza(request,uuid=None):
- # primo step, verifichiamo uuid
- print("uuid =",uuid)
- print(type(uuid))
- dom = Domini.objects.all().filter(enabled=True)
- for d in dom:
- print("compare:",uuid,d.renew_code)
- if d.renew_code and uuid == UUID(d.renew_code):
- print(d.nome,uuid)
- '''
- passaggi da fare:
- chiedere conferma
- dare conferma al cliente della registrazione
- avvisare l'amministrazione
- aggiornare il db
- '''
- value = {}
- value['dominio'] = d
- if request.method == 'POST':
- invia_risposta = False
- causale = None
- if "Renew" in request.POST:
- rinnova = request.POST.get('Renew')
- print('dominio da rinnovare',rinnova)
- d = Domini.objects.get(pk=rinnova)
- if d:
- # carica causale di autorizzato al rinnovo
- causale = Causale.objects.get(pk=getConfigurazione("causale:rinnovo_autorizzato"))
- print("causale: ",causale.nome)
- d.last_causale = causale
- d.renew_code = None
- d.save()
- invia_risposta = True
- value['risposta'] = True
- if "Loose" in request.POST:
- perdi = request.POST.get('Loose')
- print('dominio da NON rinnovare',perdi)
- d = Domini.objects.get(pk=perdi)
- if d:
- # carica causale di autorizzato al rinnovo
- causale = Causale.objects.get(pk=getConfigurazione("causale:rinnovo_non_autorizzato"))
- print("causale: ",causale.nome)
- d.last_causale = causale
- d.renew_code = None
- d.save()
- invia_risposta = True
- value['risposta']=False
- if invia_risposta:
- sm = ServizioMail()
- listadestinatari=[]
- print(d.contatti)
- if len(d.contatti)>0:
- tmpdestinatari = re.split(',| ',d.contatti)
- for t in tmpdestinatari:
- # dovremmo validare ogni elemento
- listadestinatari.append(t)
- print("email to: ",t)
- listadestinatari.append(causale.from_email)
- dictdict={}
- dictdict['dominio'] = d.__dict__
- dictdict['causale'] = causale.__dict__
- dictdict['data'] = date.today()
- sm.set_rcptto(listadestinatari)
- sm.set_soggetto(causale.template.soggetto)
- sm.set_oggetto(causale.template.oggetto)
- sm.set_data(dictdict)
- sm.send()
- if causale.send_email_account:
- ac = getConfigurazione("mail:accounting")
- sm.set_rcptto([ac,])
- te = getConfigurazione("mail:accounting_template")
- template = Template.objects.get(pk=te)
- sm.set_soggetto(template.soggetto)
- sm.set_oggetto(template.oggetto)
- sm.set_data(dictdict)
- sm.send()
- value['causale'] = causale
- print("value:",value)
- return render(request,"conferma.scelta.rinnovo.html",value)
- return render(request,'richiesta.conferma.html',value)
- return render(request,"notfound.html")
-
- # misurazioni e occupazioni
- def CheckQuotaMail(request,dominio=None,mail=None,quota=None):
- value = {}
- if dominio:
- d = Domini.objecs.filter(nome=dominio.lower())
- if len(d) == 1:
- d = d[0]
- if mail:
- print(mail)
- u = User.objects.filter(nome=d).filter(mail=mail.lower(),tobedeleted=False)
-
- if len(u) == 1:
- print('len',len(u))
- u = u[0]
- print('Trovato',d.nome,u.id,int(quota))
- u.mail_quota = int(quota)
- u.save()
- result = d.user_set.all().aggregate(Sum('mail_quota'))
- if not d.mail_quota:
- d.mail_quota = 0
- d.last_mail_quota = d.mail_quota
- d.date_mail_quota = date.today()
- d.last_mail_check = True
- if result['mail_quota__sum']:
- d.mail_quota = result['mail_quota__sum']
- #else:
- # d.mail_quota = 0
- d.last_mail_quota_check = True
- print('Quota mail',d.mail_quota)
- d.save()
- return render(request,'Controllo.Quota.html',value)
-
- def CheckQuotaHttp(request,dominio=None,quota=None):
- value = {}
- if dominio:
- d = Domini.objects.filter(nome=dominio.lower(),tobedeleted=False)
- print(d)
- if len(d) == 1:
- d = d[0]
- print('dominio Trovato',d.nome,int(quota))
- d.http_quota = int(quota)
- d.save()
- # caselle ftp/httpd
- result = d.ftpuser_set.filter(ftpgroup__section='http').aggregate(Sum('quota'))
- d.last_http_quota = d.http_quota
- d.date_http_quota = date.today()
- if result['quota__sum']:
- d.http_quota = result['quota__sum']
- #else:
- # d.http_quota = 0
- if not d.http_quota:
- d.http_quota = 0
- d.last_http_quota_check = True
- print('Quota http',d.http_quota)
- d.save()
- return render(request,'Controllo.Quota.html',value)
- def CheckQuotaSql(request,database=None,quota=None):
- value = {}
- dominio_di_riferimento = None
- if database:
- d = SqlDatabase.objects.filter(nome=database.lower(),tobedeleted=False)
- print(d)
- if len(d) == 1:
- d = d[0]
- dominio_di_riferimento = d.dominio_id
- print('database Trovato',d.nome,int(quota))
- d.quota = int(quota)
- d.save()
- # sql
- #registriamo i dati nel dominio
- dd = d.dominio
- result = dd.sqldatabase_set.all().aggregate(Sum('quota'))
- dd.last_sql_quota = dd.sql_quota
- dd.date_sql_quota = date.today()
- if result['quota__sum']:
- dd.sql_quota = result['quota__sum']
- #else:
- # dd.sql_quota = 0
- if not dd.sql_quota:
- dd.sql_quota = 0
- dd.last_sql_quota_check = True
- dd.save()
- print('Quota sql ',dd.sql_quota)
- return render(request,'Controllo.Quota.html',value)
- def CheckQuotaFtp(request,dominio=None,ftp=None,quota=None):
- value = {}
- dominio_di_riferimento = None
- if dominio:
- d = Domini.objects.filter(domain=dominio.lower(),tobedeleted=False)
- if len(d) == 1:
- d = d[0]
- dominio_di_riferimento = d.id
- print('dominio Trovato',d.domain)
- f = FTPUser.objects.filter(dominio=d.id,utente=ftp,tobedeleted=False)
- if len(f) == 1:
- f = f[0]
- f.ftp_quota = int(quota)
- f.save()
- result = d.ftpuser_set.filter().filter(ftpgroup__section='ftp').aggregate(Sum('ftp_quota'))
- d.last_ftp_quota = d.ftp_quota
- d.date_ftp_quota = date.today()
- if result['quota__sum']:
- d.ftp_quota = result['quota__sum']
- else:
- d.ftp_quota = 0
- if not d.ftp_quota:
- d.ftp_quota = 0
- d.last_ftp_quota_check = True
- d.save()
- print('Quota ftp ',d.ftp_quota)
- return render(request,'Controllo.Quota.html',value)
- def ComunicazioneControlloQuota(request,demo=False,dominio=0):
- value = {}
- try:
- dominio = int(dominio)
- print('dominio indicato:',dominio)
- except ValueError as ve:
- print("dominio non valido:", dominio)
- print(ve)
- dominio = None
- lista_quota = {}
- d = Domini.objects.filter(pk=dominio)
- print("dominio trovato",d)
- if not d:
- d = Domini.objects.all().order_by('nome')
- print('lista domini',d)
- value['domini'] = d
- sm = ServizioMail()
- quota_notifica = getConfigurazione('quota:notifica')
- quota_notifica = re.findall("[ |,]",quota_notifica)
- print(quota_notifica)
- sm.set_listadestinatari(quota_notifica)
- template = Template.objects.get(pk=getConfigurazione('quota:template:notifica'))
- sm.set_soggetto(template.soggetto)
- print('richiesta html',template.html)
- sm.set_oggetto(template.oggetto,template.html)
- template_dati = {}
- template_dati['domini'] = d
- sm.set_data(template_dati)
- if not demo:
- print('richiesta demo:1')
- sm.send()
- quota_accounting = getConfigurazione('quota:notifica:accounting')
- quota_accounting = re.split(',| ',quota_accounting)
- sm.set_listadestinatari(quota_accounting)
- print('Quota_Account',quota_accounting)
- if not demo:
- print('richiesta demo:1')
- sm.send()
- value['demo'] = demo
- return render(request,'Controllo.Quota.html',value)
- def ComunicazioneFinale(request,mailfinale=None):
- #invia una comunicazione a una specifica email
- '''
- deve inviare specificatamente:
- elenco email e occupazione finale mail
- elenco ftp e occupazione finale ftp
- elenco sql e occupazione finale sql
- elenco nextcloud e occupazione nextcloud
- occupazione totale
- differenze rispetto al passato
- '''
- def OccupazioneControlloQuota(request,dominio=None):
- value = dict()
- c = m.start()
- domini = None
- dtask = datetime.now().timestamp()
- dc = 0
- if not dominio:
- domini = Domini.objects.all().filter(tobedeleted=False)
- else:
- print('dominio richiesto:',dominio)
- domini = Domini.objects.filter(pk=dominio)
- mq = mqtt()
- mq.build('topic','messaggio/quota')
- mq.build('richiesta','quota')
- mq.build('stampa',True)
- tmp = dict()
- tmp['dtask'] = dtask
- tmpdom = list()
- for d in domini:
- tmpdom.append({'id':d.id,'nome':d.nome})
- tmp['domini'] = tmpdom
- mq.build('data',tmp)
- mq.pubblica()
- tmp=None
- tmpdom=None
- listadomini = list() #contiene la lista dei domini da pubblicare
- #cazz - inizio operazioni
- for dominio in domini:
- listadomini.append(dominio)
- ftpdict = dict()
- ftpdict['op'] = 'Quota'
- ftpdict['id'] = dominio.id
- ftpdict['do'] = dominio.nome
- ftpdict['stampa'] = True
- # ottiene la lista degli spazio assegnati via ftp
- listaftp = dominio.ftpuser_set.all()
- print('Numero di elementi',len(listaftp))
- for lf in listaftp:
- # le sezioni si possono dividere in tre, due accorpabili
- # http e stor, enb (enb: enbass, da verificare) 01.12.22
- ftpdict['ftpid'] = lf.id
- ftpdict['ftpuser']= lf.utente
- dc = dc +1
- ftpdict['dc'] = dc
- ftpdict['dtask'] = dtask
- ftpdict['stampa']=True
- print('ftp id',lf.id,'counter',dc,'dtask',dtask)
- try:
- #print('ftpgroup',lf.ftpgroup.id)
- #construisce la stringa che deve essere inviata via mqtt
- ftpdict['ftphome'] = lf.ftpgroup.directory % {'site':dominio.nome,'ftp':lf.utente}
- ftpdict['ftpclass'] = lf.ftpgroup.section
- except FTPGroup.DoesNotExist as dne:
- print('Errore: dato non valido: ',ftpdict)
- print('stringa da inviare per ftp: ',ftpdict)
- try:
- print('richiesta su server specifico',lf.id)
- m.publish(c,"Richiesta/Quota/Http/{}".format(lf.ftpgroup.server),json.dumps(ftpdict))
- except FTPGroup.DoesNotExist as dne:
- print('richiesta diretta a tutti i server',lf.id)
- m.publish(c,"Richiesta/Quota/Http",json.dumps(ftpdict))
- #ottiene la lista degli utenti mail (locali)
- listamail = dominio.user_set.all()
- print('Numero di elementi',len(listamail))
- for lm in listamail:
- maildict = dict()
- maildict['op'] = 'Quota'
- maildict['id'] = dominio.id
- maildict['do'] = dominio.nome
- maildict['mailid'] = lm.id
- maildict['mailuser'] = lm.mail
- maildict['mailserver'] = dominio.mail_server.fisico
- maildict['stampa'] = True
- dc = dc +1
- maildict['dc'] = dc
- maildict['dtask'] = dtask
- try:
- maildict['mailserver'] = lm.mail_server.fisico
- except MailServer.DoesNotExist as dne:
- print('mail server non indicato nel record mail')
-
- print('stringa da inviare per la mail: ',maildict)
- try:
- print('richiesta su server specifico',lm.id)
- m.publish(c,"Richiesta/Quota/Mail/{}".format(dominio.mail_server.nome),json.dumps(maildict))
- except MailServer.DoesNotExist as dne:
- print('richiesta diretta a tutti i server',lf.id)
- m.publish(c,"Richiesta/Quota/Mail",json.dumps(maildict))
- print("json json",json.dumps(maildict))
-
- u = User.objects.get(pk=lm.id)
- u.mail_quota=0
- u.save()
- dominio.mail_quota=0
- dominio.save()
-
- value['domini'] = listadomini
- print('value',value)
- return render(request,'Controllo.Quota.html',value)
|