Exemple #1
0
def district(request):
    districts = []
    for district in Zone.objects.filter(category=5).order_by("name"):
        if has_access(request, zone=district):
            districts.append(district)
            
    return as_html(request, "district.html", {"districts": districts})
Exemple #2
0
def hsa_edit(request, object_id):
    provider = Provider.objects.get(id=object_id)
    context = {}
    if request.POST:
        provider_form = ProviderForm(request.POST, instance=provider)
        user_form = UserForm(request.POST, instance=provider.user)
        if provider_form.is_valid() and user_form.is_valid():
            user_form.save()
            provider_form.save()
            return HttpResponseRedirect("/hsa/")
    else:
        provider_form = ProviderForm(instance=provider)
        user_form = UserForm(instance=provider.user)

    context["provider_form"] = provider_form
    context["user_form"] = user_form
    context["message_form"] = MessageForm(request.POST or None)

    try:
        context["mobile"] = request.user.provider.mobile
    except ObjectDoesNotExist:
        context["mobile"] = False

    context["object"] = provider
    return as_html(request, "user_edit_form.html", context)
Exemple #3
0
def gmc(request):
    gmcs = []
    for gmc in Facility.objects.filter().order_by("name"):
        if has_access(request, facility=gmc):
            gmcs.append(gmc)

    return as_html(request, "gmc.html", {"facilities": gmcs})
Exemple #4
0
def login(request):
    context = {}
    context["msg"] = messages.get(request.GET.get("msg", None))
    
    if request.method == "POST":
        form = LoginForm(request.POST)
        if not request.user.is_authenticated():
            if form.is_valid():
                user = auth.authenticate(
                    username=form.cleaned_data["username"], 
                    password=form.cleaned_data["password"])
                if user:
                    if user.is_active:
                        auth.login(request, user)
                        if has_roles(user, ["gmc",]):
                            try:
                                facility = user.get_profile().facility.id
                                return HttpResponseRedirect("/facility/%s/" % facility)
                            except (ObjectDoesNotExist, AttributeError):
                                pass 
                                
                        return HttpResponseRedirect("/")
                        
                return HttpResponseRedirect("/accounts/login/?msg=login_failed")
    else:
        form = LoginForm()
        
    context["form"] = form
    return as_html(request, "login.html", context)
Exemple #5
0
def provider_list(request):
    nonhtml, tables = get(request, (["provider", Q()],))
    if nonhtml:
        return nonhtml
    context = {
        "provider": tables[0],
    }
    return as_html(request, "providerlist.html", context)
Exemple #6
0
def view(request):
    term = request.GET.get("q")
    query = Q(ref_id__icontains=term)

    nonhtml, tables = get(request, [ ["case", query], ])
    if nonhtml: 
        return nonhtml

    return as_html(request, "searchview.html", { "search": tables[0], })
Exemple #7
0
def district_view(request):
    district = request.GET.get("d")
    context = {
        "districts": Zone.objects.all(),
    }
    if district:
        nonhtml, tables = get(request, (["case", Q(zone=district)],))
        if nonhtml:
            return nonhtml
        context["cases"] = tables[0]

    return as_html(request, "districtview.html", context)
Exemple #8
0
def child_view(request, object_id):
    case = Case.objects.get(id=object_id)
    nonhtml, tables = get_dict(request, [
        ["reports", Q(case=case)],
    ])
    if nonhtml:
        return nonhtml

    context = {}
    context.update(tables)
    context["object"] = case
    context["object_fields"] = [ {"key": f.verbose_name, "value": getattr(case, f.name)} for f in case._meta.fields ]

    return as_html(request, "child_view.html", context)
Exemple #9
0
def hsa(request):
    q = Q()
    if not has_roles(request.user, "partner"):
        q = Q(id__in=get_providers(request.user))
    nonhtml, tables = get_dict(request, [
        ["providers", q],
    ])
    if nonhtml:
        return nonhtml

    context = {}
    context.update(tables)

    return as_html(request, "hsa.html", context)
Exemple #10
0
def provider_view(request, object_id):
    provider = get_object_or_404(Provider, id=object_id)
    nonhtml, tables = get(request, (
        ["case", Q(provider=provider)],
        ["message", Q(sent_by=provider.user)],
        ["event", Q(content_type="provider", object_id=provider.pk)]
        ))
    if nonhtml:
        return nonhtml
    context = {
        "object": provider,
        "cases": tables[0],
        "messages": tables[1],
        "event": tables[2]
    }
    return as_html(request, "providerview.html", context)
Exemple #11
0
def child_list(request):
    q = Q()
    if not has_roles(request.user, "partner"):
        q = Q(provider__in=get_providers(request.user))

    nonhtml, tables = get(request, [
        ["case", q & Q(active=True)],
        ["reports", q],
        ["case", q & Q(active=False)]
    ])
    if nonhtml:
        return nonhtml

    context = {}
    context["active"] = tables[0]
    context["reports"] = tables[1]
    context["inactive"] = tables[2]

    return as_html(request, "child_list.html", context)
Exemple #12
0
def hsa_add(request):
    context = {}
    if request.POST:
        provider_form = ProviderForm(request.POST)
        user_form = UserForm(request.POST)
        if provider_form.is_valid() and user_form.is_valid():
            user = user_form.save()
            provider = provider_form.save(commit=False)
            provider.user = user
            provider.save()
            return HttpResponseRedirect("/hsa/")
    else:
        provider_form = ProviderForm()
        user_form = UserForm()

    context["provider_form"] = provider_form
    context["user_form"] = user_form

    return as_html(request, "user_add_form.html", context)
Exemple #13
0
def setup(request):
    nonhtml, tables = get(request, [
        ["facilities", Q()],
        ["zones", Q(category=5)],
        ["zones", Q(category=4)],
        ["message", Q(form_error=False)],
        ["message", Q(form_error=True)],
    ])
    if nonhtml:
        return nonhtml

    context = {
        "facilities": tables[0],
        "regions": tables[1],
        "districts": tables[2],
        "message_pass": tables[3],
        "message_fail": tables[4]
    }

    return as_html(request, "setup.html", context)
Exemple #14
0
def case_view(request, object_id):
    case = get_object_or_404(Case, id=object_id)
    nonhtml, tables = get(request, [
        ["malnutrition", Q(case=case)],
        ["diagnosis", Q(case=case)],
        ["malaria", Q(case=case)],
        ["event", Q(content_type="case", object_id=object_id)],
        ])

    if nonhtml:
        return nonhtml

    context = {
        "object": case,
        "malnutrition": tables[0],
        "diagnosis": tables[1],
        "malaria": tables[2],
        "event": tables[3],
    }
    return as_html(request, "caseview.html", context)
Exemple #15
0
def _view(request, graphs, root):
    """ Assemble the graphs and bits the user wants """
    context = {}

    context["message"] = graphs.render(name="message", type=graphs.count, args=[])
    context["severe"] = graphs.render(name="severe", type=graphs.percentage_status, args=[2,3])
    context["moderate"] = graphs.render(name="moderate", type=graphs.percentage_status, args=[1,])
    context["oedema"] = graphs.render(name="oedema", type=graphs.percentage_observation, args=[1,])
    context["diarrhea"] = graphs.render(name="diarrhea", type=graphs.percentage_observation, args=[3,])
    context["stunting"] = graphs.render(name="stunting", type=graphs.percentage_stunting, args=[])
    
    export = request.GET.get("export", None)
    if export:
        return _csv_export(context, export)
    

    context["lastmonth"] = _setup_last_month(context)
    context["filter"], context["zones"] = _setup_zones_filter(request, graphs.zones_unfiltered)
    context["facilities"] = _setup_facility_filter(graphs.facilities)
    context["breadcrumbs"] = _add_breadcrumbs(root)
    return as_html(request, "dashboard.html", context)
Exemple #16
0
def _view(request, graphs, root):
    """ Assemble the graphs and bits the user wants """
    context = {}

    nonhtml, tables = _setup_tables(request, graphs)
    context["tables"] = tables
    if nonhtml:
        return nonhtml

    context["message"] = graphs.render(name="message", type=graphs.count, args=[])
    context["severe"] = graphs.render(name="severe", type=graphs.percentage_status, args=[2, 3])
    context["moderate"] = graphs.render(name="moderate", type=graphs.percentage_status, args=[1])
    context["oedema"] = graphs.render(name="oedema", type=graphs.percentage_observation, args=[1])
    context["diarrhea"] = graphs.render(name="diarrhea", type=graphs.percentage_observation, args=[3])
    context["stunting"] = graphs.render(name="stunting", type=graphs.percentage_stunting, args=[])

    context["lastmonth"] = _setup_last_month(context)
    context["filter"], context["zones"] = _setup_zones_filter(request, graphs.zones_unfiltered)
    context["facilities"] = _setup_facility_filter(graphs.facilities)
    context["breadcrumbs"] = _add_breadcrumbs(root)

    return as_html(request, "dashboard.html", context)
Exemple #17
0
def dashboard(request):
    nonhtml, tables = get(request, [
        ["case", Q()],
        ["event", Q()],
        ["message", Q()],
    ])
    if nonhtml:
        return nonhtml

    has_provider = True
    context = {
        "case_table": tables[0],
        "event_table": tables[1],
        "message_table": tables[2]
    }    

    try:
        mobile = request.user.provider.mobile
        if request.method == "POST":
            messageform = MessageForm(request.POST)
            if messageform.is_valid():
                result = message_users(mobile, **messageform.cleaned_data)
                context["msg"] = result
        else:
            messageform = MessageForm()
    except ObjectDoesNotExist:
        has_provider = False
        messageform = None

    context.update({
            "message_form": messageform,
            "has_provider": has_provider,
            "summary": get_summary(),
            "graph": get_graph()
        })

    return as_html(request, "dashboard.html", context)
Exemple #18
0
def view(request, zone_id=None, facility_id=None):
    """ This is the main view that is a pretty magic view
    it figures out if you are looking for a facility, a zone
    or none at all. It then sets up the graph and passess on
    to a view to do the real work"""
    dct = {
        "classes": { "ReportMalnutrition": ReportMalnutrition, "Zone": Zone, "Case": Case },
        "limit": "",
    }
    access = False
    
    if not zone_id and not facility_id:
        # right so here are at the root of the site
        access = has_access(request)
        if not access:
            # according to the docs, district has access to the national page
            access = has_roles(request.user, ["district",])
            
        # we are at the root, so we set the root to non
        root = None
        # this is malawi specific, give us the districts
        zones = Q(category=4)
        facilities = None
        # to setup the SQL, use the _zones method
        sql_setup = _zones
    elif facility_id:
        # here we are looking at a facility
        root = Facility.objects.get(id=facility_id)
        access = has_access(request, facility=root)
        
        zones = None
        facilities = Q(id=facility_id)
        # use the right sql method for the setup
        sql_setup = _facilities
    elif zone_id:
        # this gets a little more complicated
        # because the sub zones could be zones or facilites
        root = Zone.objects.get(id=zone_id)
        access = has_access(request, zone=root)
        facilities = Q(zone=root)
        if not root.get_child_ids():
            # then we need to look for facilities
            sql_setup = _facilities
        else:
            sql_setup = _zones
            
        zones = Q(head=root)

    # do we need to filter
    filter_zone = request.GET.get("filter_zone")

    # this is used to show the filters on the right of the screen
    dct["zones_unfiltered"] = zones

    if filter_zone:
        zones = Q(id=filter_zone)
    
    dct["zones"] = zones
    dct["sql_setup"] = sql_setup
    dct["root"] = root
    dct["facilities"] = facilities

    graphs = Graphs(**dct)
    if access:
        return _view(request, graphs, root) 
    else:
        return as_html(request, "no_access.html", {})