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, })
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
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, })
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)
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]))
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)
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')
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)
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)
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)))
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]))
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)
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'))
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 []
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"))
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)))
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, })
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, })
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
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, }
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, })
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]))
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
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
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]))
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)
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)
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
def search_orgs(request): return json_response([{'title': o.title, 'name': o.name} for o in Organization.get_all()])
def orgs_base(request, template="orgs/orgs_base.html"): organizations = Organization.get_all() vals = dict(orgs = organizations) return render(request, template, vals)
def get_data(request, org): organization = Organization.get_by_name(org) return json_response(organization)
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)
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
def options(self): return [(o.name, o.title) for o in Organization.get_all()]
def get_organization(self): from corehq.apps.orgs.models import Organization return Organization.get_by_name(self.organization)
def search_orgs(request): return json_response([{ 'title': o.title, 'name': o.name } for o in Organization.get_all()])
def orgs_base(request, template="orgs/orgs_base.html"): organizations = Organization.get_all() vals = dict(orgs=organizations) return render(request, template, vals)