Example #1
0
def org_settings(request, domain):
    domain = Domain.get_by_name(domain)

    org_users = []
    teams = Team.get_by_domain(domain.name)
    for team in teams:
        for user in team.get_members():
            user.team_id = team.get_id
            user.team = team.name
            org_users.append(user)

    for user in org_users:
        user.current_domain = domain.name

    all_orgs = Organization.get_all()

    return render(
        request, 'domain/orgs_settings.html', {
            "project":
            domain,
            'domain':
            domain.name,
            "organization":
            Organization.get_by_name(getattr(domain, "organization", None)),
            "org_users":
            org_users,
            "all_orgs":
            all_orgs,
        })
Example #2
0
 def clean_org_name(self):
     data = self.cleaned_data['org_name'].strip().lower()
     if not re.match("^%s$" % new_org_re, data):
         raise forms.ValidationError('Only lowercase letters and numbers allowed. Single hyphens may be used to separate words.')
     if Organization.get_by_name(data) or Organization.get_by_name(data.replace('-', '.')):
         raise forms.ValidationError('Organization name already taken---please try another')
     return data
Example #3
0
def register_org(request, template="registration/org_request.html"):
    referer_url = request.GET.get('referer', '')
    if request.method == "POST":
        form = OrganizationRegistrationForm(request.POST, request.FILES)
        if form.is_valid():
            name = form.cleaned_data["org_name"]
            title = form.cleaned_data["org_title"]
            email = form.cleaned_data["email"]
            url = form.cleaned_data["url"]
            location = form.cleaned_data["location"]

            org = Organization(name=name, title=title, location=location, email=email, url=url)
            org.save()

            request.couch_user.add_org_membership(org.name, is_admin=True)
            request.couch_user.save()

            send_new_request_update_email(request.couch_user, get_ip(request), org.name, entity_type="org")

            if referer_url:
                return redirect(referer_url)
            messages.info(request, render_to_string('orgs/partials/landing_notification.html',
                                                       {"org": org, "user": request.couch_user}), extra_tags="html")
            return HttpResponseRedirect(reverse("orgs_landing", args=[name]))
    else:
        form = OrganizationRegistrationForm()

    return render(request, template, {
        'form': form,
    })
Example #4
0
def register_org(request, template="registration/org_request.html"):
    referer_url = request.GET.get('referer', '')
    if request.method == "POST":
        form = OrganizationRegistrationForm(request.POST, request.FILES)
        if form.is_valid():
            name = form.cleaned_data["org_name"]
            title = form.cleaned_data["org_title"]
            email = form.cleaned_data["email"]
            url = form.cleaned_data["url"]
            location = form.cleaned_data["location"]
            logo = form.cleaned_data["logo"]
            if logo:
                logo_filename = logo.name
            else:
                logo_filename = ''

            org = Organization(name=name, title=title, location=location, email=email, url=url, logo_filename=logo_filename)
            org.save()
            if logo:
                org.put_attachment(content=logo.read(), name=logo.name)

            if referer_url:
                return redirect(referer_url)
            return HttpResponseRedirect(reverse("orgs_landing", args=[name]))
    else:
        form = OrganizationRegistrationForm() # An unbound form

    vals = dict(form=form)
    return render_to_response(request, template, vals)
Example #5
0
def register_org(request, template="registration/org_request.html"):
    referer_url = request.GET.get('referer', '')
    if request.method == "POST":
        form = OrganizationRegistrationForm(request.POST, request.FILES)
        if form.is_valid():
            name = form.cleaned_data["org_name"]
            title = form.cleaned_data["org_title"]
            email = form.cleaned_data["email"]
            url = form.cleaned_data["url"]
            location = form.cleaned_data["location"]

            org = Organization(name=name, title=title, location=location, email=email, url=url)
            org.save()

            request.couch_user.add_org_membership(org.name, is_admin=True)
            request.couch_user.save()

            send_new_request_update_email(request.couch_user, get_ip(request), org.name, entity_type="org")

            if referer_url:
                return redirect(referer_url)
            messages.info(request, render_to_string('orgs/partials/landing_notification.html',
                                                       {"org": org, "user": request.couch_user}), extra_tags="html")
            return HttpResponseRedirect(reverse("orgs_landing", args=[name]))
    else:
        form = OrganizationRegistrationForm()

    return render(request, template, {
        'form': form,
    })
Example #6
0
def org_request(request, domain):
    org_name = request.POST.get("org_name", None)
    org = Organization.get_by_name(org_name)
    if org:
        org_request = OrgRequest.get_requests(
            org_name, domain=domain, user_id=request.couch_user.get_id)
        if not org_request:
            org_request = OrgRequest(organization=org_name,
                                     domain=domain,
                                     requested_by=request.couch_user.get_id,
                                     requested_on=datetime.datetime.utcnow())
            org_request.save()
            _send_request_notification_email(request, org, domain)
            messages.success(
                request,
                "Your request was submitted. The admin of organization %s can now choose to manage the project %s"
                % (org_name, domain))
        else:
            messages.error(
                request,
                "You've already submitted a request to this organization")
    else:
        messages.error(request,
                       "The organization '%s' does not exist" % org_name)
    return HttpResponseRedirect(reverse('domain_org_settings', args=[domain]))
Example #7
0
def orgs_team_members(request, org, team_id, template="orgs/orgs_team_members.html"):
    #organization and teams
    organization = Organization.get_by_name(org)
    teams = Team.get_by_org(org)
    current_domains = Domain.get_by_organization(org)

    #check that the team exists
    team = Team.get(team_id)
    if team is None:
        raise Http404("Group %s does not exist" % team_id)

    #inspect the members of the team
    member_ids = team.get_member_ids()
    members = WebUser.view("_all_docs", keys=member_ids, include_docs=True).all()
    members.sort(key=lambda user: user.username)

    #inspect the domains of the team
    domain_names = team.get_domains()
    domains = list()
    for name in domain_names:
        domains.append([Domain.get_by_name(name), team.role_label(domain=name)])

    all_org_domains = Domain.get_by_organization(org)
    non_domains = [domain for domain in all_org_domains if domain.name not in domain_names]

    all_org_member_ids = organization.members
    all_org_members = WebUser.view("_all_docs", keys=all_org_member_ids, include_docs=True).all()
    non_members = [member for member in all_org_members if member.user_id not in member_ids]

    vals = dict(org=organization, team=team, teams=teams, members=members, nonmembers=non_members, domains=current_domains, team_domains=domains, team_nondomains=non_domains)
    return render_to_response(request, template, vals)
Example #8
0
def orgs_logo(request, org, template="orgs/orgs_logo.html"):
    organization = Organization.get_by_name(org)
    if organization.logo_filename:
        image = organization.get_logo()
    else:
        image = None
    return HttpResponse(image, content_type='image/gif')
Example #9
0
def orgs_update_info(request, org):
    organization = Organization.get_by_name(org)
    form = UpdateOrgInfo(request.POST, request.FILES)
    if form.is_valid():
        logo = None
        if form.cleaned_data["org_title"] or organization.title:
            organization.title = form.cleaned_data["org_title"]
        if form.cleaned_data["email"] or organization.email:
            organization.email = form.cleaned_data["email"]
        if form.cleaned_data["url"] or organization.url:
            organization.url = form.cleaned_data["url"]
        if form.cleaned_data["location"] or organization.location:
            organization.location = form.cleaned_data["location"]
            # logo not working, need to look into this
        if form.cleaned_data["logo"]:
            logo = form.cleaned_data["logo"]
            if organization.logo_filename:
                organization.delete_attachment(organization.logo_filename)
            organization.logo_filename = logo.name

        organization.save()
        if logo:
            organization.put_attachment(content=logo.read(), name=logo.name)
        return HttpResponseRedirect(request.META.get("HTTP_REFERER") or reverse("orgs_landing", args=[org]))
    else:
        return orgs_landing(request, org, update_form=form)
Example #10
0
def orgs_team_members(request, org, team_id, template="orgs/orgs_team_members.html"):
    organization = Organization.get_by_name(org)

    ctxt = base_context(request, organization)
    ctxt["tab"] = "teams"

    try:
        team = Team.get(team_id)
    except ResourceNotFound:
        raise Http404("Team %s does not exist" % team_id)

    team_members = team.get_members()
    team_members.sort(key=lambda user: user.username)

    # inspect the domains of the team
    domain_names = team.get_domains()
    team_domains = list()
    for name in domain_names:
        team_domains.append([Domain.get_by_name(name), team.role_label(domain=name), UserRole.by_domain(name)])

    nonmembers = [
        m.username for m in filter(lambda m: m.username not in [tm.username for tm in team_members], ctxt["members"])
    ]
    nondomains = [d.name for d in filter(lambda d: d.name not in [td[0].name for td in team_domains], ctxt["domains"])]

    ctxt.update(
        dict(
            team=team,
            team_members=team_members,
            nonmembers=nonmembers,
            team_domains=team_domains,
            nondomains=nondomains,
        )
    )
    return render(request, template, ctxt)
Example #11
0
def add_all_to_team(request, org, team_id):
    organization = Organization.get_by_name(org)
    members = organization.get_members()
    for member in members:
        member.add_to_team(org, team_id)
        member.save()
    return HttpResponseRedirect(reverse(request.POST.get("redirect_url", "orgs_team_members"), args=(org, team_id)))
Example #12
0
def orgs_update_info(request, org):
    organization = Organization.get_by_name(org)
    if request.method == "POST":
        form = UpdateOrgInfo(request.POST, request.FILES)
        if form.is_valid():
            logo = None
            if form.cleaned_data['org_title'] or organization.title:
                organization.title = form.cleaned_data['org_title']
            if form.cleaned_data['email'] or organization.email:
                organization.email = form.cleaned_data['email']
            if form.cleaned_data['url'] or organization.url:
                organization.url = form.cleaned_data['url']
            if form.cleaned_data['location'] or organization.location:
                organization.location = form.cleaned_data['location']
                #logo not working, need to look into this
            if form.cleaned_data['logo']:
                logo = form.cleaned_data['logo']
                if organization.logo_filename:
                    organization.delete_attachment(organization.logo_filename)
                    organization.logo_filename = logo.name

            organization.save()
            if logo:
                organization.put_attachment(content=logo.read(), name=logo.name)
        else:
            return orgs_landing(request, org, update_form=form)
    return HttpResponseRedirect(reverse('orgs_landing', args=[org]))
Example #13
0
def public(request, org, template='orgs/public.html'):
    organization = Organization.get_by_name(org, strict=True)
    ctxt = base_context(request, organization)
    ctxt["snapshots"] = []
    for dom in ctxt["domains"]:
        if dom.published_snapshot() and dom.published_snapshot().is_approved:
            ctxt["snapshots"].append(dom.published_snapshot())
    return render(request, template, ctxt)
Example #14
0
def public(request, org, template='orgs/public.html'):
    organization = Organization.get_by_name(org, strict=True)
    ctxt = base_context(request, organization)
    ctxt["snapshots"] = []
    for dom in ctxt["domains"]:
        if dom.published_snapshot() and dom.published_snapshot().is_approved:
            ctxt["snapshots"].append(dom.published_snapshot())
    return render(request, template, ctxt)
Example #15
0
def verify_org(request, org):
    organization = Organization.get_by_name(org)
    if request.POST.get('verify') == 'true':
        organization.verified = True
        organization.save()
    elif request.POST.get('verify') == 'false':
        organization.verified = False
        organization.save()
    return HttpResponseRedirect(request.META.get('HTTP_REFERER') or reverse('orgs_base'))
Example #16
0
 def get_domains(self):
     from corehq.apps.orgs.models import Organization
     from corehq.apps.domain.models import Domain
     org = self.request.GET.get('org', None)
     organization = Organization.get_by_name(org, strict=True)
     if organization and \
             (self.request.couch_user.is_superuser or self.request.couch_user.is_member_of_org(org)):
         return [d for d in Domain.get_by_organization(organization.name).all()]
     return []
Example #17
0
def verify_org(request, org):
    organization = Organization.get_by_name(org)
    if request.POST.get("verify") == "true":
        organization.verified = True
        organization.save()
    elif request.POST.get("verify") == "false":
        organization.verified = False
        organization.save()
    return HttpResponseRedirect(request.META.get("HTTP_REFERER") or reverse("orgs_base"))
Example #18
0
def verify_org(request, org):
    organization = Organization.get_by_name(org)
    if request.POST.get('verify') == 'true':
        organization.verified = True
        organization.save()
    elif request.POST.get('verify') == 'false':
        organization.verified = False
        organization.save()
    return HttpResponseRedirect(request.META.get('HTTP_REFERER') or reverse('orgs_base'))
Example #19
0
def add_all_to_team(request, org, team_id):
    team = Team.get(team_id)
    if team:
        organization = Organization.get_by_name(org)
        members = organization.members
        for member in members:
            team.add_member(member)
    if 'redirect_url' in request.POST:
        return HttpResponseRedirect(reverse(request.POST['redirect_url'], args=(org, team_id)))
Example #20
0
 def response_cross_project_reports(self):
     """
     Organization menu and corresponding reports are hidden on downgrade.
     """
     if self.domain.organization:
         org = Organization.get_by_name(self.domain.organization)
         return self._fmt_alert(
             _("You will lose access to cross-project reports for the organization '%(org_name)s'.") % {
                 'org_name': org.title,
             })
Example #21
0
 def response_cross_project_reports(self):
     """
     Organization menu and corresponding reports are hidden on downgrade.
     """
     if self.domain.organization:
         org = Organization.get_by_name(self.domain.organization)
         return self._fmt_alert(
             _("You will lose access to cross-project reports for the "
               "organization '%(org_name)s'.") % {
                   'org_name': org.title,
               })
Example #22
0
    def clean_email(self):
        data = self.cleaned_data["email"].strip().lower()
        validate_email(data)

        existing_member = CouchUser.get_by_username(data)
        if existing_member:
            org = Organization.get_by_name(self.org_name)
            for member in org.get_members():
                if member.get_id == existing_member.get_id:
                    raise forms.ValidationError("User is already part of this organization!")

        return data
Example #23
0
    def page_context(self):
        domain = self.domain_object
        org_users = []
        teams = Team.get_by_domain(domain.name)
        for team in teams:
            for user in team.get_members():
                user.team_id = team.get_id
                user.team = team.name
                org_users.append(user)

        for user in org_users:
            user.current_domain = domain.name

        all_orgs = Organization.get_all()

        return {
            "project": domain,
            'domain': domain.name,
            "organization": Organization.get_by_name(getattr(domain, "organization", None)),
            "org_users": org_users,
            "all_orgs": all_orgs,
        }
Example #24
0
def org_settings(request, domain):
    domain = Domain.get_by_name(domain)

    org_users = []
    teams = Team.get_by_domain(domain.name)
    for team in teams:
        for user in team.get_members():
            user.team_id = team.get_id
            user.team = team.name
            org_users.append(user)

    for user in org_users:
        user.current_domain = domain.name

    all_orgs = Organization.get_all()

    return render(request, 'domain/orgs_settings.html', {
        "project": domain, 'domain': domain.name,
        "organization": Organization.get_by_name(getattr(domain, "organization", None)),
        "org_users": org_users,
        "all_orgs": all_orgs,
    })
Example #25
0
def orgs_add_member(request, org):
    if request.method == "POST":
        form = AddMemberForm(org, request.POST)
        if form.is_valid():
            username = form.cleaned_data['member_email']
            user_id = CouchUser.get_by_username(username).userID
            organization = Organization.get_by_name(org)
            organization.add_member(user_id)
            messages.success(request, "Member Added!")
        else:
            messages.error(request, "Unable to add member")
            return orgs_landing(request, org, add_member_form=form)
    return HttpResponseRedirect(reverse('orgs_landing', args=[org]))
Example #26
0
    def clean_email(self):
        data = self.cleaned_data['email'].strip().lower()
        validate_email(data)

        existing_member = CouchUser.get_by_username(data)
        if existing_member:
            org = Organization.get_by_name(self.org_name)
            for member in org.get_members():
                if member.get_id == existing_member.get_id:
                    raise forms.ValidationError(
                        'User is already part of this organization!')

        return data
Example #27
0
    def clean_member_email(self):
        data = self.cleaned_data['member_email'].strip().lower()
        validate_email(data)
        exists = CouchUser.get_by_username(data)

        if not exists:
            raise forms.ValidationError('User not found!')

        org = Organization.get_by_name(self.org_name)
        for id in org.members:
            if id == exists.get_id:
                raise forms.ValidationError('User is already part of this organization!')

        return data
Example #28
0
def org_request(request, domain):
    org_name = request.POST.get("org_name", None)
    org = Organization.get_by_name(org_name)
    if org:
        org_request = OrgRequest.get_requests(org_name, domain=domain, user_id=request.couch_user.get_id)
        if not org_request:
            org_request = OrgRequest(organization=org_name, domain=domain,
                requested_by=request.couch_user.get_id, requested_on=datetime.datetime.utcnow())
            org_request.save()
            messages.success(request,
                "Your request was submitted. The admin of organization %s can now choose to manage the project %s" %
                (org_name, domain))
        else:
            messages.error(request, "You've already submitted a request to this organization")
    else:
        messages.error(request, "The organization '%s' does not exist" % org_name)
    return HttpResponseRedirect(reverse('domain_org_settings', args=[domain]))
Example #29
0
def orgs_landing(request, org, template="orgs/orgs_landing.html", form=None, add_form=None, add_member_form=None, add_team_form=None, update_form=None):
    organization = Organization.get_by_name(org)

    reg_form_empty = not form
    add_form_empty = not add_form
    add_member_form_empty = not add_member_form
    add_team_form_empty = not add_team_form
    update_form_empty = not update_form

    reg_form = form or DomainRegistrationForm(initial={'org': organization.name})
    add_form = add_form or AddProjectForm(org)
    add_member_form = add_member_form or AddMemberForm(org)
    add_team_form = add_team_form or AddTeamForm(org)

    update_form = update_form or UpdateOrgInfo(initial={'org_title': organization.title, 'email': organization.email, 'url': organization.url, 'location': organization.location})

    current_teams = Team.get_by_org(org)
    current_domains = Domain.get_by_organization(org)
    members = [WebUser.get_by_user_id(user_id) for user_id in organization.members]
    vals = dict( org=organization, domains=current_domains, reg_form=reg_form,
                 add_form=add_form, reg_form_empty=reg_form_empty, add_form_empty=add_form_empty, update_form=update_form, update_form_empty=update_form_empty, add_member_form=add_member_form, add_member_form_empty=add_member_form_empty, add_team_form=add_team_form, add_team_form_empty=add_team_form_empty, teams=current_teams, members=members)
    return render_to_response(request, template, vals)
Example #30
0
def generate_invoices(based_on_date=None):
    """
    Generates all invoices for the past month.
    """
    today = based_on_date or datetime.date.today()
    invoice_start, invoice_end = utils.get_previous_month_date_range(today)
    invoiceable_subscriptions = Subscription.objects.filter(date_start__lt=invoice_end,
                                                            date_end__gt=invoice_start).all()

    def _create_invoice(sub):
        invoice_factory = SubscriptionInvoiceFactory(invoice_start, invoice_end, sub)
        invoice_factory.create()

    invoiced_orgs = []
    orgs = Organization.get_db().view('orgs/by_name', group=True, group_level=1).all()
    org_names = [o['key'] for o in orgs]
    for org_name in org_names:
        try:
            subscription = invoiceable_subscriptions.get(subscriber__organization=org_name)
        except ObjectDoesNotExist:
            continue
        _create_invoice(subscription)
        invoiced_orgs.append(org_name)

    all_domain_ids = [d['id'] for d in Domain.get_all(include_docs=False)]
    for domain_doc in iter_docs(Domain.get_db(), all_domain_ids):
        domain_name = domain_doc['name']
        domain_org = domain_doc['organization']
        try:
            subscription = invoiceable_subscriptions.get(subscriber__domain=domain_name)
        except ObjectDoesNotExist:
            if domain_org not in invoiced_orgs:
                domain = Domain.wrap(domain_doc)
                invoice_factory = CommunityInvoiceFactory(invoice_start, invoice_end, domain)
                invoice_factory.create()
            continue
        _create_invoice(subscription)
Example #31
0
def check_and_set_org(req, org):
    from corehq.apps.orgs.models import Organization
    organization = Organization.get_by_name(org, strict=True)
    if not organization:
        raise Http404
    req.organization = organization
Example #32
0
def search_orgs(request):
    return json_response([{'title': o.title, 'name': o.name} for o in Organization.get_all()])
Example #33
0
def orgs_base(request, template="orgs/orgs_base.html"):
    organizations = Organization.get_all()
    vals = dict(orgs = organizations)
    return render(request, template, vals)
Example #34
0
def get_data(request, org):
    organization = Organization.get_by_name(org)
    return json_response(organization)
Example #35
0
def orgs_landing(
    request,
    org,
    template="orgs/orgs_landing.html",
    form=None,
    add_form=None,
    invite_member_form=None,
    add_team_form=None,
    update_form=None,
    tab=None,
):
    organization = Organization.get_by_name(org, strict=True)

    reg_form_empty = not form
    add_form_empty = not add_form
    invite_member_form_empty = not invite_member_form
    add_team_form_empty = not add_team_form

    reg_form = form or DomainRegistrationForm(initial={"org": organization.name})
    add_form = add_form or AddProjectForm(org)
    invite_member_form = invite_member_form or InviteMemberForm(org)
    add_team_form = add_team_form or AddTeamForm(org)

    ctxt = base_context(request, organization, update_form=update_form)
    potential_domains = []

    # display a notification for each org request that hasn't previously been seen
    if request.couch_user.is_org_admin(org):
        requests = OrgRequest.get_requests(org)
        for req in requests:
            if req.seen or req.domain in [d.name for d in ctxt["domains"]]:
                continue
            messages.info(
                request,
                render_to_string(
                    "orgs/partials/org_request_notification.html",
                    {"requesting_user": WebUser.get(req.requested_by).username, "org_req": req, "org": organization},
                ),
                extra_tags="html",
            )

        # get the existing domains that an org admin would add to the organization
        potential_domains = request.couch_user.domains
        potential_domains.extend([req.domain for req in requests])
        potential_domains = list(set(filter(lambda d: d not in ctxt["domains"], potential_domains)))

    ctxt.update(
        dict(
            reg_form=reg_form,
            add_form=add_form,
            reg_form_empty=reg_form_empty,
            add_form_empty=add_form_empty,
            invite_member_form=invite_member_form,
            invite_member_form_empty=invite_member_form_empty,
            add_team_form=add_team_form,
            add_team_form_empty=add_team_form_empty,
            tab="projects",
            potential_domains=potential_domains,
        )
    )
    return render(request, template, ctxt)
Example #36
0
 def update_params(self):
     available_orgs = [{'val': o.name, 'text': o.title} for o in  Organization.get_all()]
     self.selected = self.request.GET.get(self.slug,'')
     self.options = available_orgs
Example #37
0
 def options(self):
     return [(o.name, o.title) for o in Organization.get_all()]
Example #38
0
 def get_organization(self):
     from corehq.apps.orgs.models import Organization
     return Organization.get_by_name(self.organization)
Example #39
0
 def update_params(self):
     available_orgs = [{'val': o.name, 'text': o.title} for o in  Organization.get_all()]
     self.selected = self.request.GET.get(self.slug,'')
     self.options = available_orgs
Example #40
0
def search_orgs(request):
    return json_response([{
        'title': o.title,
        'name': o.name
    } for o in Organization.get_all()])
Example #41
0
def orgs_base(request, template="orgs/orgs_base.html"):
    organizations = Organization.get_all()
    vals = dict(orgs=organizations)
    return render(request, template, vals)
Example #42
0
def get_data(request, org):
    organization = Organization.get_by_name(org)
    return json_response(organization)
Example #43
0
 def options(self):
     return [(o.name, o.title) for o in  Organization.get_all()]
Example #44
0
 def get_organization(self):
     from corehq.apps.orgs.models import Organization
     return Organization.get_by_name(self.organization)