Beispiel #1
0
def canvas_obiettivo_trimestrale(request):
    template = TMP_CANVAS
    
    # FIXME: ragionare sulla gestione del periodo
    if request.method == "GET" and request.GET.has_key("fanno") and request.GET.has_key("fquarto"):
        period = u.get_quarter(request.GET)
    else:
        period = u.get_current_quarter()
    
    # in conteggio per il raggiungimento degli obiettivi è fatto sui contratti
    # inviati nel quarto di riferimento
    contratti_inviati = models.Contratto.objects.filter(data_inviato__gte=period[0], 
                                                        data_inviato__lte=period[1], 
                                                        inviato=True)\
                                                .order_by("data_inviato")\
                                                .select_related("piano_tariffario")
    
    # ricaviamo contratti solo degli agenti/telefonisti selezionati 
    if request.method == "GET" and request.GET.has_key("fagente"):
        agenti_ids = u.get_agenti_ids(request.GET)
        if agenti_ids:
            contratti_inviati = contratti_inviati.filter(agente__in=agenti_ids) 
    if request.method == "GET" and request.GET.has_key("ftelefonista"):
        tel_ids = u.get_telefonisti_ids(request.GET)
        if tel_ids:
            contratti_inviati = contratti_inviati.filter(telefonista__in=tel_ids)    
    
    obiettivi = models.Obiettivo.objects.filter(data_inizio__lte=period[0])
    
    d, totals = get_points(obiettivi, contratti_inviati)

#    totals = {}
#    for obiettivo in obiettivi:
#        totals[obiettivo.denominazione] = {"inviati": 0, 
#                                           "caricati": 0,
#                                           "punteggio": 0,}
#    d = {}
#    if contratti_inviati.exists():        
#        dates = contratti_inviati.values("data_inviato").distinct()
#
#        for date in dates:
#            data_inviato = date["data_inviato"].strftime("%d/%m/%Y")
#            d[data_inviato] = {}
#            
#            daily_points = get_daily_points(obiettivi, 
#                                            contratti_inviati, 
#                                            date["data_inviato"])
#            for denominazione in daily_points.keys():
#                d[data_inviato][denominazione] = {"data": data_inviato,
#                                                  "punteggio": daily_points[denominazione]["punteggio"],
#                                                  "inviati": daily_points[denominazione]["contratti"],}
#                totals[denominazione]["punteggio"] += daily_points[denominazione]["punteggio"]
#                totals[denominazione]["inviati"] += daily_points[denominazione]["contratti"]
#            for obiettivo in obiettivi:
#                punteggio_day = 0
#                
#                contratti_day = contratti_inviati.filter(data_inviato=date["data_inviato"])
#                n_inviati = 0
#                for contratto in contratti_day:
#                    # determiniamo il piano tariffario
#                    pts = models.PianoTariffario.objects.filter(contratto=contratto).iterator()
#                    
#                    punteggio_contratto = 0
#                    for pt in pts:
#                        q = pt.num
#                        tariffa = pt.tariffa      
#                        
#                        if check_tariffa(obiettivo, tariffa):
#                            punteggio_contratto = +q
#                    
#                    n_inviati += 1
#                    punteggio_day += punteggio_contratto
#                
#                d[data_inviato][obiettivo.denominazione] = {"data": data_inviato,
#                                                            "punteggio": punteggio_day,
#                                                            "inviati": n_inviati,}    
#                totals[obiettivo.denominazione]["punteggio"] += punteggio_day
#                totals[obiettivo.denominazione]["inviati"] += n_inviati
    
    rows = []        
    date_cur = period[0]
    today = datetime.today().date()
    y_cur = 0
    m_cur = 0
    
    while date_cur <= period[1]:
        if date_cur.year != y_cur:
            year = date_cur.year
            y_cur = date_cur.year
        else:
            year = None
        
        if date_cur.month != m_cur:
            m_cur = date_cur.month
            if date_cur == today:
                month = (date_cur.strftime("%B"), today)
            else:
                month = (date_cur.strftime("%B"), None)
        else:
            if date_cur == today:
                month = (None, today)
            else:    
                month = (None, None)
        
        row = {"anno": year, "mese": month}
        k = date_cur.strftime("%d/%m/%Y")
        if k in d:
            for obiettivo in obiettivi:
                row[obiettivo.denominazione] = d[k][obiettivo.denominazione]
        rows.append(row)
        date_cur += timedelta(1)
    
#    for obiettivo in obiettivi:
#        diff = obiettivo.punteggio - totals[obiettivo.denominazione]["punteggio"]
#        diff = totals[obiettivo.denominazione]["goal"]
#        if diff < 0:
#            totals[obiettivo.denominazione]["msg"] = "Obiettivo raggiunto (+{})".format(diff)
#        elif diff == 0:
#            totals[obiettivo.denominazione]["msg"] = "Obiettivo raggiunto"
#        else:
#            totals[obiettivo.denominazione]["msg"] = "Per raggiungere l'obiettivo mancano {} punti".format(diff)    
            
    if request.is_ajax():
        data = {"rows": rows, "obiettivi": obiettivi, "period": period, "totali": totals}
        return render_to_response(template,
                                  data,
                                  context_instance=RequestContext(request))        
    
    filterform = forms.ObiettivoFilterForm()
    data = {"rows": rows, "obiettivi": obiettivi, "period": period, 
            "totali": totals, "filterform": filterform,}
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Beispiel #2
0
def init_provvigione(request, object_id):
    # FIXME: data licenziamento non è presa in considerazione
    # da correggere, non ora però
    template = TMP_PROV
    dipendente = get_object_or_404(models.Dipendente, pk=object_id)
    
    period = u.get_current_quarter()
    
    data_inizio = request.GET.get("fdata_inizio", "")
    data_fine = request.GET.get("fdata_fine", "")
    
    retribuzioni = models.RetribuzioneDipendente.objects.filter(
                            dipendente=object_id, variazione=False,).order_by("-data_inizio")
    earliest_retribuzione = retribuzioni[retribuzioni.count()-1] if retribuzioni.exists() else None
    
    variazioni = models.RetribuzioneDipendente.objects.filter(
                            dipendente=object_id, variazione=True,).order_by("-data_inizio")                                                     
    
    data_min = datetime.strptime(data_inizio[1:], "%d/%m/%Y").date() if data_inizio else period[0]
    data_min = data_min if data_min >= earliest_retribuzione.data_inizio else earliest_retribuzione.data_inizio
    data_max = datetime.strptime(data_fine[1:], "%d/%m/%Y").date() if data_fine else period[1]
    retribuzioni = retribuzioni.filter(Q(data_fine__gte=data_min, 
                                         data_inizio__lte=data_max) | 
                                       Q(data_fine__isnull=True,
                                         data_inizio__lte=data_max))
    variazioni = variazioni.filter(data_fine__gte=data_min,
                                   data_inizio__lte=data_max)
    
    days = (data_max - data_min).days
    
    # creaiamo un dizionario con tutte le variazioni e le retribuzioni
    objs = {}
    # variazioni
    if variazioni.exists():          
        for index, var_cur in enumerate(variazioni):
            obj = {"anno": None,
                   "mese": None,
                   "retribuzione": None,
                   "variazione": None,
                   "rowspan_r": None,
                   "rowspan_v": None,} 
            obj["variazione"] = var_cur       
            if data_max < var_cur.data_fine:
                row = 0
                obj["rowspan_v"] = (data_max - var_cur.data_inizio).days + 1
            else:           
                row = (data_max - var_cur.data_fine).days
                obj["rowspan_v"] = (var_cur.data_fine - var_cur.data_inizio).days + 1
            objs[row] = obj
            for i in xrange(row + 1, row + obj["rowspan_v"]):
                objs[i] = {"anno": None,
                           "mese": None,
                           "retribuzione": None,
                           "variazione": "occupied",
                           "rowspan_r": None,
                           "rowspan_v": None,}
    # retribuzioni
    if retribuzioni.exists():
        for index, ret_cur in enumerate(retribuzioni):
            obj = {"anno": None,
                   "mese": None,
                   "retribuzione": None,
                   "variazione": None,
                   "rowspan_r": None,
                   "rowspan_v": None,} 
            obj["retribuzione"] = ret_cur       
            if ret_cur.data_fine:
                row = (data_max - ret_cur.data_fine).days
                obj["rowspan_r"] = (ret_cur.data_fine - ret_cur.data_inizio).days + 1
            else:
                row = 0
                obj["rowspan_r"] = (data_max - ret_cur.data_inizio).days + 1
            if row in objs:
                objs[row]["retribuzione"] = obj["retribuzione"]
                objs[row]["rowspan_r"] = obj["rowspan_r"]
            else:
                objs[row] = obj
            for i in xrange(row + 1, row + obj["rowspan_r"]):
                if i in objs:
                    objs[i]["retribuzione"] = "occupied"
                else:
                    objs[i] = {"anno": None,
                               "mese": None,
                               "retribuzione": "occupied",
                               "variazione": None,
                               "rowspan_r": None,
                               "rowspan_v": None,}
                    
    # creiamo la lista di righe di dati da inserire nella tabella.
    rows = []
    data_cur = data_max
    y_cur = data_cur.year
    m_cur = data_cur.month
    for i in xrange(days + 1):
        data_cur -= timedelta(1)
        if y_cur != data_cur.year:
            year = data_cur.year
            y_cur = year
            month = (m_cur, )
        else:
            year = None
        if m_cur != data_cur.month:
            month = (m_cur, )
            year = data_cur.year
            m_cur = data_cur.month
        else:
            month = None
        if i in objs:
            objs[i]["anno"] = year
            objs[i]["mese"] = month
            rows.append(objs[i])
            del objs[i]
        else:
            rows.append({"anno": year,
                         "mese": month,
                         "retribuzione": None,
                         "variazione": None,
                         "rowspan_r": None,
                         "rowspan_v": None,})
    
    # aggiungiamo la data iniziale e finale
    rows[0]["anno"] = data_max.year
    rows[0]["mese"] = (data_max.month, data_max)
    rows[len(rows)-1]["anno"] = data_min.year
    rows[len(rows)-1]["mese"] = (data_min.month, data_min)
    
    if request.is_ajax():
        template = TMP_PROV_TABLE
        data = {"rows": rows, "days": range(days), "period": (data_min, data_max)}
        return render_to_response(template,
                                  data,
                                  context_instance=RequestContext(request))        
    
    data = {"dipendente": dipendente, "rows": rows, "period": (data_min, data_max)}
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Beispiel #3
0
def canvas_tim_telecom(request):
    template = "statistiche/canvas_tim_telecom.html"
    
    if request.method == "GET" and request.GET.has_key("fperiodo"):
        period = u.get_period(request.GET)
    else:
        period = u.get_current_quarter()
    
    contratti = models.Contratto.objects.filter(data_stipula__gte=period[0],
                                                data_stipula__lte=period[1])
    contratti = contratti.exclude(pianotariffario__tariffa__gestore="edison")
    
    # ricaviamo gli agenti artefici dei contratti selezionati 
    if request.method == "GET" and request.GET.has_key("fagente"):
        agenti_ids = u.get_agenti_ids(request.GET)
        agenti = models.Dipendente.objects.filter(contratto__pk__in=contratti).filter(pk__in=agenti_ids).distinct().iterator()
    else:
        agenti = models.Dipendente.objects.filter(contratto__pk__in=contratti).distinct().iterator()
#             
#    objs = []
#    
#    if contratti.exists(): 
#        for agt in agenti:
#            points = get_tim_telecom_points(contratti, agt)
#            objs.append({"agente": agt, 
#                         "sim": points["sim_tot"], 
#                         "dati_opz": points["dati_tot"] + points["opz_tot"],
#                         "nip_ull": points["nip_tot"] + points["ull_tot"],
#                         "adsl": points["adsl_tot"],
#                         "punti_tim": points["ptg_tim"],
#                         "punti_telecom": points["ptg_telecom"],
#                         "tot_punti": points["ptg_tim"] + points["ptg_telecom"],
#                         "posizione": None})
#            contratti_agt = contratti.filter(agente=agt)
#            
#            if contratti_agt.exists():
#                # TIM
#                pt_tim_agt = models.PianoTariffario.objects.filter(contratto__in=contratti_agt,
#                    tariffa__gestore=models.Gestore.objects.get(denominazione="tim"))
#                
#                sim_tot = pt_tim_agt.filter(tariffa__tipo=models.TipologiaTariffa.objects.get(denominazione="sim"),
#                    opzione=False).aggregate(tot=Sum("num"))
#                sim_tot = sim_tot["tot"] if sim_tot["tot"] else 0
#                
#                dati_tot = pt_tim_agt.filter(tariffa__tipo=models.TipologiaTariffa.objects.get(denominazione="dati"),
#                    opzione=False).aggregate(tot=Sum("num"))
#                dati_tot = dati_tot["tot"] if dati_tot["tot"] else 0
#                
#                opz_tot = pt_tim_agt.filter(opzione=True).aggregate(tot=Sum("num"))
#                opz_tot = opz_tot["tot"] if opz_tot["tot"] else 0
#
#                # calcoliamo il punteggio ricavato dai contratti
#                # 1 - estraiamo una lista con quantità delle tariffa * punteggio della tariffa
#                # 2 - sommiamo i valori contenuti nella lista
#                list_ptg = [ptar.tariffa.punteggio * ptar.num for ptar in pt_tim_agt]
#                ptg_tim_tot = reduce(operator.add, list_ptg) if list_ptg else 0
#                
#                #TELECOM
#                pt_telecom_agt = models.PianoTariffario.objects.filter(contratto__in=contratti_agt,
#                    tariffa__gestore=models.Gestore.objects.get(denominazione="telecom")) 
#                               
#                nip_tot = pt_telecom_agt.filter(tariffa__servizio=models.ServizioTariffa.objects.get(denominazione="nip"),
#                    opzione=False).aggregate(tot=Sum("num"))
#                nip_tot = nip_tot["tot"] if nip_tot["tot"] else 0
#                
#                ull_tot = pt_telecom_agt.filter(tariffa__servizio=models.ServizioTariffa.objects.get(denominazione="ull"),
#                    opzione=False).aggregate(tot=Sum("num"))
#                ull_tot = ull_tot["tot"] if ull_tot["tot"] else 0
#                
#                adsl_tot = pt_telecom_agt.filter(tariffa__tipo=models.TipologiaTariffa.objects.get(denominazione="adsl"),                                                 
#                    opzione=False).aggregate(tot=Sum("num"))
#                adsl_tot = adsl_tot["tot"] if adsl_tot["tot"] else 0
#                
#                # calcoliamo il punteggio ricavato dai contratti
#                # 1 - estraiamo una lista con quantità delle tariffe * punteggio della tariffa
#                # 2 - sommiamo i valori contenuti nella lista
#                list_ptg = [ptar.tariffa.punteggio * ptar.num for ptar in pt_telecom_agt]
#                ptg_telecom_tot = reduce(operator.add, list_ptg) if list_ptg else 0
#                   
#                objs.append({"agente": agt, 
#                             "sim": sim_tot, 
#                             "dati_opz": dati_tot + opz_tot,
#                             "nip_ull": nip_tot + ull_tot,
#                             "adsl": adsl_tot,
#                             "punti_tim": ptg_tim_tot,
#                             "punti_telecom": ptg_telecom_tot,
#                             "tot_punti": ptg_tim_tot + ptg_telecom_tot,
#                             "posizione": None})
#                
#        # selezioniamo solo i primi 15 agenti in base al totale dei punteggi
#        objs = [ obj for obj in sorted(objs, key=lambda x: x["tot_punti"], reverse=True)[:15]]
#        # aggiungiamo il valore della posizione
#        # la posizione aumenta solo nel caso in cui il totale dei punti è minore
#        pos = 1
#        tot_punti_cur = 0
#        for obj in objs:
#            obj["posizione"] = pos
#            if obj["tot_punti"] != tot_punti_cur:
#                pos += 1
#                tot_punti_cur = obj["tot_punti"]
#    
#        objs = sort_objs(objs)
    
    objs = get_tim_telecom_ranking(contratti, agenti)
    
    # calcoliamo i totali
#    sim = 0
#    dati_opz = 0
#    nip_ull = 0
#    adsl = 0
#    punti_tim = 0
#    punti_telecom = 0
#    for obj in objs:
#        sim += obj["sim"]
#        dati_opz += obj["dati_opz"]
#        nip_ull += obj["nip_ull"]
#        adsl += obj["adsl"]
#        punti_tim += obj["punti_tim"]
#        punti_telecom += obj["punti_telecom"]
#    totals = [sim, dati_opz, nip_ull, adsl, punti_tim, punti_telecom, punti_tim + punti_telecom]
    totals = get_tim_telecom_totals(objs)
    
    table = tables.CanvasTable(objs)
    table.paginate(page=request.GET.get("page", 1))
    table.order_by = request.GET.get("sort")
    
    if request.is_ajax():
#        template = "statistiche/reporttable_snippet.html"
        data = {"table": table, 
                "totals": totals, 
                "period": (period[0].strftime("%d/%m/%Y"), 
                           period[1].strftime("%d/%m/%Y"))}
        return render_to_response(template, 
                                  data,
                                  context_instance=RequestContext(request))   
    
    filterform = forms.CanvasFilterForm()
    
    data = {"table": table, 
            "totals": totals,
            "filterform": filterform,
            "period": (period[0].strftime("%d/%m/%Y"), 
                       period[1].strftime("%d/%m/%Y"))}
    return render_to_response(template, 
                              data,
                              context_instance=RequestContext(request))    
Beispiel #4
0
def canvas_edison(request):
    template = "statistiche/canvas_edison.html"
    
    if request.method == "GET" and request.GET.has_key("fperiodo"):
        period = u.get_period(request.GET)
    else:
        period = u.get_current_quarter()
    
    contratti = models.Contratto.objects.filter(pianotariffario__tariffa__gestore="edison",
                                                data_stipula__gte=period[0],
                                                data_stipula__lte=period[1])
    
    # ricaviamo gli agenti artefici dei contratti selezionati
    # ricaviamo gli agenti artefici dei contratti selezionati 
    if request.method == "GET" and request.GET.has_key("fagente"):
        agenti_ids = u.get_agenti_ids(request.GET)
        agenti = models.Dipendente.objects.filter(contratto__pk__in=contratti).filter(pk__in=agenti_ids).distinct().iterator()
    else:
        agenti = models.Dipendente.objects.filter(contratto__pk__in=contratti).distinct().iterator()
    
#    objs = []
#    
#    if contratti.exists(): 
#        for agt in agenti:
#            points = get_edison_points(contratti, agt)
#            
#            contratti_agt = contratti.filter(agente=agt)
#            
#            if contratti_agt.exists():
#                pt_edison_agt = models.PianoTariffario.objects.filter(contratto__in=contratti_agt)
#                bus_en_tot = pt_edison_agt.filter(tariffa__tipo=models.TipologiaTariffa.objects.get(denominazione="luce"),
#                                                  cliente__tipo="bus").aggregate(tot=Sum("num"))
#                bus_en_tot = bus_en_tot["tot"] if bus_en_tot["tot"] else 0
#                
#                pri_en_tot = pt_edison_agt.filter(tariffa__tipo=models.TipologiaTariffa.objects.get(denominazione="luce"),
#                                                  cliente__tipo="pri").aggregate(tot=Sum("num"))
#                pri_en_tot = pri_en_tot["tot"] if pri_en_tot["tot"] else 0
#                
#                bus_gas_tot = pt_edison_agt.filter(tariffa__tipo=models.TipologiaTariffa.objects.get(denominazione="gas"),
#                                                   cliente__tipo="bus").aggregate(tot=Sum("num"))
#                bus_gas_tot = bus_gas_tot["tot"] if bus_gas_tot["tot"] else 0
#                
#                pri_gas_tot = pt_edison_agt.filter(tariffa__tipo=models.TipologiaTariffa.objects.get(denominazione="gas"),
#                                                   cliente__tipo="pri").aggregate(tot=Sum("num"))
#                pri_gas_tot = pri_gas_tot["tot"] if pri_gas_tot["tot"] else 0               
#                   
#            objs.append({"agente": agt, 
#                         "bus_en": points["bus_en"], 
#                         "pri_en": points["pri_en_tot"],
#                         "bus_gas": points["bus_gas_tot"],
#                         "pri_gas": points["pri_gas_tot"],
#                         "tot": (points["bus_en_tot"] + points["bus_gas_tot"] 
#                                 + points["pri_en_tot"] + points["pri_gas_tot"]),
#                         "posizione": None})
#                
#        # selezioniamo solo i primi 15 agenti in base al totale dei punteggi
#        objs = [ obj for obj in sorted(objs, key=lambda x: x["tot"], reverse=True)[:15]]
#        # aggiungiamo il valore della posizione
#        # la posizione aumenta solo nel caso in cui il totale dei punti è minore
#        pos = 1
#        tot_punti_cur = 0
#        for obj in objs:
#            obj["posizione"] = pos
#            if obj["tot_punti"] != tot_punti_cur:
#                pos += 1
#                tot_punti_cur = obj["tot_punti"]
#        
#        objs = sort_objs(objs)
    objs = get_edison_ranking(contratti, agenti)
    
    # calcoliamo i totali
#    bus_en= 0
#    pri_en = 0
#    bus_gas = 0
#    pri_gas = 0
#    for obj in objs:
#        bus_en += obj["bus_en"]
#        pri_en += obj["pri_en"]
#        bus_gas += obj["bus_gas"]
#        pri_gas += obj["pri_gas"]
#    totals = [bus_en, pri_en, bus_gas, pri_gas, bus_en + pri_en + bus_gas + pri_gas]
    
    totals = get_edison_totals(objs)
    
    table = tables.CanvasTable(objs)
    table.paginate(page=request.GET.get("page", 1))
    table.order_by = request.GET.get("sort")
    
    if request.is_ajax():
#        template = "statistiche/reporttable_snippet.html"
        data = {"table": table, 
                "totals": totals, 
                "period": (period[0].strftime("%d/%m/%Y"), 
                           period[1].strftime("%d/%m/%Y"))}
        return render_to_response(template, 
                                  data,
                                  context_instance=RequestContext(request))    
    
    filterform = forms.CanvasFilterForm()
    
    data = {"table": table, 
            "filterform": filterform,
            "period": (period[0].strftime("%d/%m/%Y"), 
                       period[1].strftime("%d/%m/%Y"))}
    return render_to_response(template, 
                              data,
                              context_instance=RequestContext(request))       
    
Beispiel #5
0
def send_report_mail(request):
    default_options = get_default_options()
    email = default_options["email_titolare"]
    if email:
        today = datetime.today().date()
        # spediamo nel testo dell'email, alcune informazioni:
        # incasso della giornata: entrate/uscite
        contratti = (
            models.Contratto.objects.filter(data_stipula=today)
            .order_by("data_stipula")
            .select_related("piano_tariffario")
        )

        # Finanze
        finances = get_daily_totals(contratti, today)
        # Classifiche
        period = u.get_current_quarter()
        contratti = models.Contratto.objects.filter(data_stipula__gte=period[0], data_stipula__lte=period[1])
        contratti_tim_telecom = contratti.exclude(pianotariffario__tariffa__gestore="edison")
        dipendenti_tim_telecom = (
            models.Dipendente.objects.filter(contratto__pk__in=contratti_tim_telecom).distinct().iterator()
        )
        ranking_tim_telecom = get_tim_telecom_ranking(contratti_tim_telecom, dipendenti_tim_telecom)
        contratti_edison = contratti.exclude(pianotariffario__tariffa__gestore="tim").exclude(
            pianotariffario__tariffa__gestore="telecom"
        )
        dipendenti_edison = models.Dipendente.objects.filter(contratto__pk__in=contratti_edison).distinct().iterator()
        ranking_edison = get_edison_ranking(contratti_edison, dipendenti_edison)
        # Obiettivi
        obiettivi = models.Obiettivo.objects.filter(data_inizio__lte=period[0])
        contratti_inviati = (
            models.Contratto.objects.filter(data_inviato__gte=period[0], data_inviato__lte=period[1], inviato=True)
            .order_by("data_inviato")
            .select_related("piano_tariffario")
        )
        ignore, goals = get_points(obiettivi, contratti_inviati)
        data = {
            "finanze": finances,
            "ranking_tim_telecom": ranking_tim_telecom,
            "ranking_edison": ranking_edison,
            "obiettivi": goals,
        }

        html_content = render_to_string("email.html", data)
        text_content = strip_tags(html_content)  # this strips the html, so people will have the text as well.

        # create the email, and attach the HTML version as well.
        subject = "Riepilogo Mobiltime {}".format(today.strftime("%d/%m/%Y"))
        from_email = "agenzia"
        to_email = email
        msg = EmailMultiAlternatives(subject, text_content, from_email, [to_email])
        msg.attach_alternative(html_content, "text/html")
        msg.send()

        logger.debug("{}: Email riepilogativa inviata".format(request.user))
        messages.add_message(request, messages.SUCCESS, "Email riepilogativa iniviata a {}".format(email))
    else:
        logger.debug("{}: modificate le opzioni iniziali".format(request.user))
        messages.add_message(
            request,
            messages.ERROR,
            "Email non iniviata: " "Inserire la password del titolare nella pagina delle opzioni",
        )
    return HttpResponseRedirect(reverse("home"))