Exemple #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))
Exemple #2
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))    
Exemple #3
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))       
    
Exemple #4
0
def inout(request):
    #TODO: controllare che effettivamente i calcoli siano giusti
#    getcontext().prec = 2
    template = "statistiche/entrate_uscite.html"
    
    if request.method == "GET" and request.GET.has_key("fperiodo"):
        period = u.get_period(request.GET)
    else:
        period = u.get_current_month()
        
    # entrate
    # 1 - contratti stipulati
    contratti = models.Contratto.objects.filter(data_stipula__gte=period[0], 
                                                data_stipula__lte=period[1])\
                                                .order_by("data_stipula")\
                                                .select_related()
                                                  
    # ricaviamo contratti solo degli agenti selezionati 
    if request.method == "GET" and request.GET.has_key("fagente"):
        agenti_ids = u.get_agenti_ids(request.GET)
    
        if agenti_ids:
            contratti = contratti.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 = contratti.filter(telefonista__in=tel_ids)
            filter_ids = []
            telefonisti = models.Dipendente.objects.filter(id__in=tel_ids)
            for contratto in contratti:
                if contratto.appuntamento:
                    if contratto.appuntamento.telefonista in telefonisti:
                        filter_ids.append(contratto.id)
            if filter_ids:
                contratti = contratti.filter(id__in=filter_ids)
               
    # FIXME: implementare selezione gestori
    
    objs = []
    objs_in = []
    objs_out = []
    
    n_stipulati = 0
    n_completi = 0
    n_inviati = 0
    n_caricati = 0
    n_attivati = 0
    in_tot = 0
    out_tot = 0
    in_tot_detail = {}
    out_tot_detail = {}
    gestori = models.Gestore.objects.all()
    for gestore in gestori:
        g = str(gestore)
        in_tot_detail[g] = 0
        out_tot_detail[g] = 0
    out_tot_prov_agt = 0
    out_tot_prov_bonus_agt = 0
    out_tot_prov_tel = 0
    out_tot_prov_bonus_tel = 0
    
    if contratti.exists():
        dates = contratti.values("data_stipula").distinct()
        for date in dates:
            contratti_day = contratti.filter(data_stipula=date["data_stipula"]).iterator()
            
            daily_totals = get_daily_totals(contratti_day, date["data_stipula"]) 
            t = "{}/{}/{}/{}".format(daily_totals["contratti"]["stipulati"],
                                     daily_totals["contratti"]["completi"],
                                     daily_totals["contratti"]["inviati"],
                                     daily_totals["contratti"]["caricati"],
                                     daily_totals["contratti"]["attivati"])
            objs.append({"data": date["data_stipula"], 
                         "n_stipulati": t, 
                         "entrate": daily_totals["totali"]["entrate"], 
                         "uscite": daily_totals["totali"]["uscite"],
                         "totali": daily_totals["totali"]["totali"]})
            objs_in.append({"data": date["data_stipula"],
                            "n_stipulati": t,
                            "entrate": daily_totals["entrate"]["entrate"]})
            objs_out.append({"data": date["data_stipula"], 
                            "n_stipulati": t,
                            "uscite": daily_totals["uscite"]["uscite"],
                            "prov_agt": "{0:.2f}".format(Decimal(daily_totals["uscite"]["prov_agt"])),
                            "prov_bonus_agt": "{0:.2f}".format(Decimal(daily_totals["uscite"]["prov_bonus_agt"])),
                            "prov_tel": "{0:.2f}".format(Decimal(daily_totals["uscite"]["prov_tel"])),
                            "prov_bonus_tel": "{0:.2f}".format(Decimal(daily_totals["uscite"]["prov_bonus_tel"]))})

            # aggoiorniamo i totali
            in_tot += daily_totals["totali"]["entrate"]["total"]
            out_tot += daily_totals["totali"]["uscite"]["total"]
            # aggiorniamo i dettagli dei totali
            for gestore in gestori:
                g = str(gestore)
                in_tot_detail[g] += daily_totals["totali"]["entrate"]["details"][g]
                out_tot_detail[g] += daily_totals["totali"]["uscite"]["details"][g]
            out_tot_prov_agt += daily_totals["uscite"]["prov_agt"]
            out_tot_prov_bonus_agt += daily_totals["uscite"]["prov_bonus_agt"]
            out_tot_prov_tel += daily_totals["uscite"]["prov_tel"]
            out_tot_prov_bonus_tel += daily_totals["uscite"]["prov_bonus_tel"]
            
            n_stipulati += daily_totals["contratti"]["stipulati"]
            n_completi += daily_totals["contratti"]["completi"]
            n_inviati += daily_totals["contratti"]["inviati"]
            n_caricati += daily_totals["contratti"]["caricati"]
            n_attivati += daily_totals["contratti"]["attivati"]
    
    # aggiungiamo il fisso
    tot_fisso = calc_fisso(period)
    out_tot += tot_fisso
    
    tot_tot_detail = {}
    for gestore in gestori:
        g = str(gestore)
        tot_tot_detail[g] = in_tot_detail[g] - out_tot_detail[g]
    tot_tot_detail["fisso"] = tot_fisso
    out_tot_detail["fisso"] = tot_fisso
    
    totals = {"n_stipulati": "{}/{}/{}/{}/{}".format(n_stipulati, n_completi, n_inviati, n_caricati, n_attivati),
              "entrate": {"total": in_tot,
                          "details": in_tot_detail},
              "uscite": {"total": out_tot,
                         "details": out_tot_detail},
              "totali": {"total": in_tot - out_tot,
                         "details": tot_tot_detail}}
    totals_in = {"n_stipulati": "{}/{}/{}/{}/{}".format(n_stipulati, n_completi, n_inviati, n_caricati, n_attivati),
                 "entrate": {"total": in_tot,
                             "details": in_tot_detail}}
    totals_out = {"n_stipulati": "{}/{}/{}/{}/{}".format(n_stipulati, n_completi, n_inviati, n_caricati, n_attivati),
                  "uscite": {"total": out_tot,
                             "details": out_tot_detail},
                  "prov_agt": out_tot_prov_agt,
                  "prov_bonus_agt": out_tot_prov_bonus_agt,
                  "prov_tel": out_tot_prov_tel,
                  "prov_bonus_tel": out_tot_prov_bonus_tel}
    
    # creiamo le tabelle 
    table = tables.InOutTotalsTable(objs, per_page_field=10,)
    table.paginate(page=request.GET.get("page", 1))
    table.order_by = request.GET.get("sort")    
    table_in = tables.InTable(objs_in, prefix="in-", per_page_field=10,)
    table_in.paginate(page=request.GET.get("in-page", 1))
    table_in.order_by = request.GET.get("in-sort")
    table_out = tables.OutTable(objs_out, prefix="out-", per_page_field=10,)
    table_out.paginate(page=request.GET.get("out-page", 1))
    table_out.order_by = request.GET.get("out-sort")
    
    if request.is_ajax():
        data = {"table": table,
                "table_in": table_in,
                "table_out": table_out,
                "totals": totals,
                "totals_in": totals_in,
                "totals_out": totals_out,
                "period": (period[0], period[1])}
        return render_to_response(template, 
                                  data,
                                  context_instance=RequestContext(request))   
    
    filterform = forms.InOutFilterForm()
    
    data = {"table": table,
            "table_in": table_in,
            "table_out": table_out,
            "totals": totals,
            "totals_in": totals_in,
            "totals_out": totals_out,
            "filterform": filterform,
            "period": (period[0], period[1])}
    return render_to_response(template, data,
                              context_instance=RequestContext(request))