def top_10_cantidad_medicamentos(get): mfiltersPedidoDeFarmacia = get_filtros(get, pmodels.PedidoDeFarmacia) mfiltersPedidoDeClinica = get_filtros(get, pmodels.PedidoDeClinica) pedidosDeFarmacia = pmodels.PedidoDeFarmacia.objects.filter(**mfiltersPedidoDeFarmacia) pedidosDeClinica = pmodels.PedidoDeClinica.objects.filter(**mfiltersPedidoDeClinica) estadisticas = {} cantidadTotalMedicamentoEnPedidos = 0 for pedido in pedidosDeFarmacia: for detalle in pedido.get_detalles(): cantidadMedicamento = detalle.cantidad medicamento = detalle.medicamento.__str__() if medicamento in estadisticas: estadisticas[medicamento] += cantidadMedicamento else: estadisticas[medicamento] = cantidadMedicamento cantidadTotalMedicamentoEnPedidos += cantidadMedicamento for pedido in pedidosDeClinica: for detalle in pedido.get_detalles(): cantidadMedicamento = detalle.cantidad medicamento = detalle.medicamento.__str__() if medicamento in estadisticas: estadisticas[medicamento] += cantidadMedicamento else: estadisticas[medicamento] = cantidadMedicamento cantidadTotalMedicamentoEnPedidos += cantidadMedicamento # ordeno y selecciono top10 top = OrderedDict(sorted(estadisticas.items(), key=lambda t: t[1], reverse=True)) top10 = dict(itertools.islice(top.items(), 10)) top10 = OrderedDict(sorted(top10.items(), key=lambda t: t[1], reverse=True)) estadisticas = { 'columnChart': {'medicamentos': [], 'cantidades': []}, 'pieChart': [], 'excel': [] } resto = cantidadTotalMedicamentoEnPedidos for medicamento, cantidad in top10.items(): estadisticas['columnChart']['medicamentos'].append(medicamento) estadisticas['columnChart']['cantidades'].append(cantidad) avg = float("%.2f" % ((cantidad * 100) / float(cantidadTotalMedicamentoEnPedidos))) estadisticas['pieChart'].append({'name': medicamento, 'y': avg}) estadisticas['excel'].append({'medicamento': medicamento, 'cantidad': cantidad}) resto -= cantidad if resto > 0: avg = float("%.2f" % ((resto * 100) / float(cantidadTotalMedicamentoEnPedidos))) estadisticas['pieChart'].append({'name': u'Otros', 'y': avg}) return estadisticas
def VerOrganizaciones(request): filters = get_filtros(request.GET, Omodels.Organizacion) mfilters = dict(filter(lambda v: v[0] in Omodels.Organizacion.FILTROS, filters.items())) organizacionesFarmacia = Omodels.Farmacia.objects.filter(**mfilters) organizacionesClinica = Omodels.Clinica.objects.filter(**mfilters) organizacionesObraSocial = Omodels.ObraSocial.objects.filter(**mfilters) organizacionesLaboratorio = Omodels.Laboratorio.objects.filter(**mfilters) return render(request, "organizaciones_mobile.html", {"organizacionesFarmacia": organizacionesFarmacia, "organizacionesClinica": organizacionesClinica, "organizacionesObraSocial": organizacionesObraSocial, "organizacionesLaboratorio": organizacionesLaboratorio})
def VerMedicamentos(request): filters = get_filtros(request.GET, Mmodels.Medicamento) mfilters = dict(filter(lambda v: v[0] in Mmodels.Medicamento.FILTROS, filters.items())) medicamentos = Mmodels.Medicamento.objects.filter(**mfilters) estadisticas = { 'total': Mmodels.Medicamento.objects.all().count(), 'filtrados': medicamentos.count() } return render(request, "medicamentos_mobile.html", {"medicamentos": medicamentos, "filtros": filters, 'estadisticas': estadisticas})
def top_10_organizaciones_pedidos_medicamentos(get_filtros, valores): filtros = {'desde': valores['desde'], 'hasta': valores['hasta']} mfiltersPedidoDeFarmacia = get_filtros(filtros, pmodels.PedidoDeFarmacia) mfiltersPedidoDeClinica = get_filtros(filtros, pmodels.PedidoDeClinica) pedidosDeFarmacia = pmodels.PedidoDeFarmacia.objects.filter(**mfiltersPedidoDeFarmacia) pedidosDeClinica = pmodels.PedidoDeClinica.objects.filter(**mfiltersPedidoDeClinica) med = valores['medicamento'] estadisticas = {} totalSolicitudesMedicamento = 0 for pedido in pedidosDeFarmacia: farmacia = "Farmacia "+pedido.farmacia.razonSocial for detalle in pedido.get_detalles(): if detalle.medicamento == med: if farmacia in estadisticas: estadisticas[farmacia] += 1 else: estadisticas[farmacia] = 1 totalSolicitudesMedicamento += 1 break for pedido in pedidosDeClinica: clinica = "Clinica " + pedido.clinica.razonSocial for detalle in pedido.get_detalles(): if detalle.medicamento == med: if clinica in estadisticas: estadisticas[clinica] += 1 else: estadisticas[clinica] = 1 totalSolicitudesMedicamento += 1 break # ordeno y selecciono top10 top = OrderedDict(sorted(estadisticas.items(), key=lambda t: t[1], reverse=True)) top10 = dict(itertools.islice(top.items(), 10)) top10 = OrderedDict(sorted(top10.items(), key=lambda t: t[1], reverse=True)) estadisticas = { 'columnChart': {'organizaciones': [], 'cantidades': []}, 'pieChart': [], 'excel': {'medicamento': '', 'datos': []} } resto = totalSolicitudesMedicamento for organizacion, cantidad in top10.items(): estadisticas['columnChart']['organizaciones'].append(organizacion) estadisticas['columnChart']['cantidades'].append(cantidad) avg = float("%.2f" % ((cantidad * 100) / float(totalSolicitudesMedicamento))) estadisticas['pieChart'].append({'name': organizacion, 'y': avg}) estadisticas['excel']['datos'].append({'organizacion': organizacion, 'cantidad': cantidad}) resto -= cantidad estadisticas['excel']['medicamento'] = med.__str__() if resto > 0: avg = float("%.2f" % ((resto * 100) / float(totalSolicitudesMedicamento))) estadisticas['pieChart'].append({'name': u'Otros', 'y': avg}) return estadisticas