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))
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))