diff --git a/apimanager/base/templates/base.html b/apimanager/base/templates/base.html index 673dfff..0178c78 100644 --- a/apimanager/base/templates/base.html +++ b/apimanager/base/templates/base.html @@ -35,11 +35,13 @@ Entitlement Requests {% url "users-index" as users_index_url %} {% url 'my-user-detail' API_USER_ID as url_users_detail %} - {% url "api-metrics" as api_metrics_url %} diff --git a/apimanager/users/forms.py b/apimanager/users/forms.py index eeef5b9..aee23b6 100644 --- a/apimanager/users/forms.py +++ b/apimanager/users/forms.py @@ -5,7 +5,6 @@ Forms of users app from django import forms - class AddEntitlementForm(forms.Form): user_id = forms.CharField( widget=forms.HiddenInput(), @@ -34,3 +33,76 @@ class AddEntitlementForm(forms.Form): def __init__(self, *args, **kwargs): kwargs.setdefault('label_suffix', '') super(AddEntitlementForm, self).__init__(*args, **kwargs) + +class CreateInvitationForm(forms.Form): + bank_id = forms.ChoiceField( + label='Bank', + widget=forms.Select( + attrs={ + 'class': 'form-control', + } + ), + choices=[], + ) + first_name = forms.CharField( + label='First Name', + widget=forms.TextInput( + attrs={ + 'placeholder': 'First Name', + 'class': 'form-control', + } + ), + ) + last_name = forms.CharField( + label='Last Name', + widget=forms.TextInput( + attrs={ + 'placeholder': 'Last Name', + 'class': 'form-control', + } + ), + ) + email = forms.CharField( + label='Email', + widget=forms.EmailInput( + attrs={ + 'placeholder': 'felixsmith@example.com', + 'class': 'form-control', + } + ), + required=False, + ) + company = forms.CharField( + label='Company', + widget=forms.TextInput( + attrs={ + 'placeholder': 'TESOBE GmbH', + 'class': 'form-control', + } + ), + required=False, + ) + country = forms.CharField( + label='Country', + widget=forms.TextInput( + attrs={ + 'placeholder': 'Germany', + 'class': 'form-control', + } + ), + required=False, + ) + purpose = forms.CharField( + label='Purpose', + widget=forms.TextInput( + attrs={ + 'placeholder': 'For the Bank App', + 'class': 'form-control', + } + ), + required=False, + ) + + def __init__(self, *args, **kwargs): + kwargs.setdefault('label_suffix', '') + super(CreateInvitationForm, self).__init__(*args, **kwargs) diff --git a/apimanager/users/templates/users/invitation.html b/apimanager/users/templates/users/invitation.html new file mode 100644 index 0000000..d000982 --- /dev/null +++ b/apimanager/users/templates/users/invitation.html @@ -0,0 +1,84 @@ +{% extends 'base.html' %} +{% load static %} + +{% block page_title %}{{ block.super }} / Users{% endblock page_title %} + + +{% block content %} +
+

Invitation Developer

+ +
+ {% csrf_token %} + {% if form.non_field_errors %} +
+ {{ form.non_field_errors }} +
+ {% endif %} + +
+
+ {% if form.bank_id.errors %}
{{ form.bank_id.errors }}
{% endif %} +
+ {{ form.bank_id.label_tag }} + {{ form.bank_id }} +
+
+
+ {% if form.first_name.errors %}
{{ form.first_name.errors }}
{% endif %} +
+ {{ form.first_name.label_tag }} + {{ form.first_name }} +
+
+
+ {% if form.last_name.errors %}
{{ form.last_name.errors }}
{% endif %} +
+ {{ form.last_name.label_tag }} + {{ form.last_name }} +
+
+
+
+
+ {% if form.email.errors %}
{{ form.email.errors }}
{% endif %} +
+ {{ form.email.label_tag }} + {{ form.email }} +
+
+
+ {% if form.company.errors %}
{{ form.company.errors }}
{% endif %} +
+ {{ form.company.label_tag }} + {{ form.company }} +
+
+
+ {% if form.country.errors %}
{{ form.country.errors }}
{% endif %} +
+ {{ form.country.label_tag }} + {{ form.country }} +
+
+
+ {% if form.purpose.errors %}
{{ form.purpose.errors }}
{% endif %} +
+ {{ form.purpose.label_tag }} + {{ form.purpose }} +
+
+
+ + +
+
+{% endblock content %} + + +{% block extrajs %} +{% endblock extrajs %} + +{% block extracss %} + +{% endblock extracss %} diff --git a/apimanager/users/urls.py b/apimanager/users/urls.py index 87229ee..94e6f40 100644 --- a/apimanager/users/urls.py +++ b/apimanager/users/urls.py @@ -5,7 +5,7 @@ URLs for users app from django.conf.urls import url -from .views import IndexView, DetailView, MyDetailView, DeleteEntitlementView +from .views import IndexView, DetailView, MyDetailView, DeleteEntitlementView,InvitationView urlpatterns = [ url(r'^all$', @@ -17,6 +17,9 @@ urlpatterns = [ url(r'^myuser/user_id/(?P[\w\@\.\+-]+)$', MyDetailView.as_view(), name='my-user-detail'), + url(r'^myuser/invitation$', + InvitationView.as_view(), + name='my-user-invitation'), url(r'^(?P[\w-]+)/entitlement/delete/(?P[\w-]+)$', DeleteEntitlementView.as_view(), name='users-delete-entitlement'), diff --git a/apimanager/users/views.py b/apimanager/users/views.py index f23faad..052be24 100644 --- a/apimanager/users/views.py +++ b/apimanager/users/views.py @@ -2,17 +2,15 @@ """ Views of users app """ - from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin from django.http import HttpResponseRedirect -from django.urls import reverse +from django.urls import reverse, reverse_lazy from django.views.generic import FormView, TemplateView, View from base.filters import BaseFilter from obp.api import API, APIError - -from .forms import AddEntitlementForm +from .forms import AddEntitlementForm,CreateInvitationForm class FilterRoleName(BaseFilter): @@ -254,6 +252,54 @@ class MyDetailView(LoginRequiredMixin, FormView): }) return context +class InvitationView(LoginRequiredMixin, FormView): + """View to create a User Invitation""" + form_class = CreateInvitationForm + template_name = 'users/invitation.html' + success_url = reverse_lazy('my-user-invitation') + + def dispatch(self, request, *args, **kwargs): + self.api = API(request.session.get('obp')) + return super(InvitationView, self).dispatch(request, *args, **kwargs) + + def get_form(self, *args, **kwargs): + form = super(InvitationView, self).get_form(*args, **kwargs) + form.api = self.api + fields = form.fields + try: + fields['bank_id'].choices = self.api.get_bank_id_choices() + except APIError as err: + messages.error(self.request, err) + except: + messages.error(self.request, "Unknown Error") + return form + + def form_valid(self, form): + data = form.cleaned_data + urlpath = '/banks/{}/user-invitation'.format(data['bank_id']) + payload = { + 'first_name': data['first_name'], + 'last_name': data['last_name'], + 'email': data['email'], + 'company': data['company'], + 'country': data['country'], + 'purpose': data['purpose'] + } + try: + result = self.api.post(urlpath, payload=payload) + if 'code' in result and result['code'] >= 400: + messages.error(self.request, result['message']) + return super(InvitationView, self).form_valid(form) + else: + msg = 'Create User Invitation secret_key({}) at Bank({}) has been {}!'.format(result['secret_key'],data['bank_id'], result['status'] ) + messages.success(self.request, msg) + return super(InvitationView, self).form_valid(form) + except APIError as err: + messages.error(self.request, err) + return super(InvitationView, self).form_invalid(form) + except: + messages.error(self.request, "Unknown Error") + return super(InvitationView, self).form_invalid(form) class DeleteEntitlementView(LoginRequiredMixin, View): """View to delete an entitlement"""