Esempio n. 1
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))       
    
Esempio n. 2
0
def details(request):
    #TODO: controllare che effettivamente i calcoli siano giusti
#    getcontext().prec = 2
    template = "statistiche/dettaglio_dipendente.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
    dipendente = None 
    if request.method == "GET" and request.GET.has_key("fdipendente"):
        dipendente_id = request.GET["fdipendente"][1:]
        
        if dipendente_id:
            dipendente = models.Dipendente.objects.get(id=dipendente_id)
            if dipendente.ruolo == "agt":
                contratti = contratti.filter(agente=dipendente)
            else:
                filter_ids = []
                for contratto in contratti:
                    if contratto.appuntamento:
                        if contratto.appuntamento.telefonista == dipendente:
                            filter_ids.append(contratto.id)
                if filter_ids:
                    contratti = contratti.filter(id__in=filter_ids)
    
    n_stipulati = 0
#    n_completi = 0
#    n_inviati = 0
#    n_caricati = 0
#    n_attivati = 0
    in_tot = 0
    out_tot = 0
    tot_fisso = 0
    in_tot_detail = {}
    out_tot_detail = {}
    n_stipulati_details ={}
    gestori = models.Gestore.objects.all()
    for gestore in gestori:
        g = str(gestore)
        in_tot_detail[g] = 0
        out_tot_detail[g] = 0
        n_stipulati_details[g] = 0
    out_tot_prov_agt = 0
    out_tot_prov_bonus_agt = 0
    out_tot_extra_agt = 0
    out_tot_prov_tel = 0
    out_tot_prov_bonus_tel = 0
    out_tot_extra_tel = 0
    
    if contratti.exists() and dipendente:
        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"]) 
            
            n_stipulati += daily_totals["contratti"]["stipulati"]
            # aggoiorniamo i totali
            in_tot += daily_totals["totali"]["entrate"]["total"]
            if dipendente.ruolo == "agt":
                out_tot += (daily_totals["uscite"]["prov_agt"] + 
                            daily_totals["uscite"]["prov_bonus_agt"] +
                            daily_totals["uscite"]["extra_agt"])
                out_tot_extra_agt += daily_totals["uscite"]["extra_agt"]
            else:
                out_tot += (daily_totals["uscite"]["prov_tel"] + 
                            daily_totals["uscite"]["prov_bonus_tel"] +
                            daily_totals["uscite"]["extra_tel"])
                out_tot_extra_tel += daily_totals["uscite"]["extra_tel"]
            # 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]
                n_stipulati_details[g] += daily_totals["contratti"]["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"]

        # aggiungiamo il fisso
        tot_fisso = calc_fisso(period, [dipendente,])
        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
    
    details = {}
    if dipendente:
        details["stipulati"] = {}
        details["stipulati"]["tot"] = n_stipulati
        details["stipulati"]["details"] = n_stipulati_details
        details["economia"] = {}
        details["economia"]["tot_uscite"] = out_tot
        details["economia"]["tot_fisso"] = tot_tot_detail["fisso"]
        if dipendente.ruolo == "agt":
            details["economia"]["tot_prov"] = out_tot_prov_agt
            details["economia"]["tot_prov_bonus"] = out_tot_prov_bonus_agt
            details["economia"]["extra"] = out_tot_extra_agt
        else:
            details["economia"]["tot_prov"] = out_tot_prov_tel
            details["economia"]["tot_prov_bonus"] = out_tot_prov_bonus_tel
            details["economia"]["extra"] = out_tot_extra_tel
        details["economia"]["tot_entrate"] = in_tot
    
    if request.is_ajax():
        data = {"dipendente": dipendente,
                "details": details,
                "period": (period[0], period[1])}
        return render_to_response(template, 
                                  data,
                                  context_instance=RequestContext(request))   
    
    filterform = forms.DetailsFilterForm()
    
    data = {"dipendente": dipendente,
            "details": details,
            "filterform": filterform,
            "period": (period[0], period[1])}
    return render_to_response(template, data,
                              context_instance=RequestContext(request))  
Esempio n. 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))    
Esempio n. 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))