class DetailView(LoginRequiredMixin, FormView): """Detail view for a user""" form_class = AddEntitlementForm template_name = 'users/detail.html' def dispatch(self, request, *args, **kwargs): self.api = API(request.session.get('obp')) return super(DetailView, self).dispatch(request, *args, **kwargs) def get_form(self, *args, **kwargs): form = super(DetailView, self).get_form(*args, **kwargs) try: form.fields['bank_id'].choices = self.api.get_bank_id_choices() except APIError as err: messages.error(self.request, err) return form def form_valid(self, form): """Posts entitlement data to API""" try: data = form.cleaned_data urlpath = '/users/{}/entitlements'.format(data['user_id']) payload = { 'bank_id': data['bank_id'], 'role_name': data['role_name'], } entitlement = self.api.post(urlpath, payload=payload) except APIError as err: messages.error(self.request, err) return super(DetailView, self).form_invalid(form) msg = 'Entitlement with role {} has been added.'.format( entitlement['role_name']) messages.success(self.request, msg) self.success_url = self.request.path return super(DetailView, self).form_valid(form) def get_context_data(self, **kwargs): context = super(DetailView, self).get_context_data(**kwargs) # NOTE: assuming there is just one user with that email address # The API needs a call 'get user by id'! user = {} try: urlpath = '/users/user_id/{}'.format(self.kwargs['user_id']) user = self.api.get(urlpath) context['form'].fields['user_id'].initial = user['user_id'] except APIError as err: messages.error(self.request, err) context.update({ 'apiuser': user, # 'user' is logged-in user in template context }) return context
class UpdateAtmsView(LoginRequiredMixin, FormView): template_name = "atms/update.html" success_url = '/atms/' form_class = CreateAtmForm def dispatch(self, request, *args, **kwargs): self.api = API(request.session.get('obp')) return super(UpdateAtmsView, self).dispatch(request, *args, **kwargs) def get_form(self, *args, **kwargs): form = super(UpdateAtmsView, self).get_form(*args, **kwargs) # Cannot add api in constructor: super complains about unknown kwarg form.api = self.api fields = form.fields urlpath = "/banks/{}/atms/{}".format(self.kwargs['bank_id'], self.kwargs['atm_id']) 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") try: result = self.api.get(urlpath) fields['bank_id'].initial = self.kwargs['bank_id'] fields['atm_id'].initial = self.kwargs['atm_id'] fields['name'].initial = result['name'] fields['address'].initial = json.dumps(result['address'], indent=4) fields['location_latitude'].initial = result['location'][ 'latitude'] fields['location_longitude'].initial = result['location'][ 'longitude'] fields['meta_license_id'].initial = result['meta']['license']['id'] fields['meta_license_name'].initial = result['meta']['license'][ 'name'] fields['minimum_withdrawal'].initial = result['minimum_withdrawal'] fields['branch_identification'].initial = result[ 'branch_identification'] if result['is_accessible'].lower() == 'true': fields['is_accessible'].choices = [(True, True), (False, False)] else: fields['is_accessible'].choices = [(False, False), (True, True)] if result['has_deposit_capability'].lower() == 'true': fields['has_deposit_capability'].choices = [(True, True), (False, False)] else: fields['has_deposit_capability'].choices = [(False, False), (True, True)] fields['has_deposit_capability'].initial = result[ 'accessibility_features'] fields['site_identification'].initial = result[ 'site_identification'] fields['site_name'].initial = result['site_name'] fields['cash_withdrawal_national_fee'].initial = result[ 'cash_withdrawal_national_fee'] fields['cash_withdrawal_international_fee'].initial = result[ 'cash_withdrawal_international_fee'] fields['balance_inquiry_fee'].initial = result[ 'balance_inquiry_fee'] fields['services'].initial = result['services'] fields['located_at'].initial = result['located_at'] fields['more_info'].initial = result['more_info'] fields['located_at'].initial = result['located_at'] fields['lobby'].initial = json.dumps(result['lobby'], indent=4) if result['supported_languages'].lower() == 'en': fields['supported_languages'].choices = [("en", "en"), ("fr", "fr"), ("de", "de")] elif result['supported_languages'].lower() == 'fr': fields['supported_languages'].choices = [("fr", "fr"), ("en", "en"), ("de", "de")] else: fields['supported_languages'].choices = [("de", "de"), ("fr", "fr"), ("en", "en")] fields['supported_languages'].initial = result[ 'supported_languages'] if result['supported_currencies'].lower() == 'eur': fields['supported_currencies'].choices = [("EUR", "EUR"), ("MXN", "MXN"), ("USD", "USD")] elif result['supported_currencies'].lower() == 'mxn': fields['supported_currencies'].choices = [("MXN", "MXN"), ("EUR", "EUR"), ("USD", "USD")] else: fields['supported_currencies'].choices = [("USD", "USD"), ("MXN", "MXN"), ("EUR", "EUR")] fields['supported_currencies'].initial = result[ 'supported_currencies'] if result['notes'].lower() == 'string1': fields['notes'].choices = [("String1", "String1"), ("String2", "String2")] else: fields['notes'].choices = [("String2", "String2"), ("String1", "String1")] fields['notes'].initial = result['notes'] if result['location_categories'].lower() == 'atbi': fields['location_categories'].choices = [("ATBI", "ATBI"), ("ATBE", "ATBE")] else: fields['location_categories'].choices = [("ATBE", "ATBE"), ("ATBI", "ATBI")] fields['location_categories'].initial = result[ 'location_categories'] except APIError as err: messages.error(self.request, err) except Exception as err: messages.error(self.request, "Unknown Error {}".format(err)) return form def form_valid(self, form): data = form.cleaned_data urlpath = '/banks/{}/atms/{}'.format(data["bank_id"], data["atm_id"]) payload = { #"id": data["atm_id"], "bank_id": data["bank_id"], "name": data["name"], "address": json.loads(data['address']), "location": { "latitude": float(data["location_latitude"]), "longitude": float(data["location_longitude"]) }, "meta": { "license": { "id": data["meta_license_id"], "name": data["meta_license_name"] } }, "has_deposit_capability": data["has_deposit_capability"], "accessibility_features": data["accessibility_features"], "minimum_withdrawal": data["minimum_withdrawal"], "branch_identification": data["branch_identification"], "site_identification": data["site_identification"], "site_name": data["site_name"], "cash_withdrawal_national_fee": data["cash_withdrawal_national_fee"], "cash_withdrawal_international_fee": data["cash_withdrawal_international_fee"], "balance_inquiry_fee": data["balance_inquiry_fee"], "services": data["services"], "more_info": data["more_info"], "located_at": data["located_at"], "phone_number": data["phone_number"], "supported_languages": data["supported_languages"], "supported_currencies": data["supported_currencies"], "notes": data["notes"], "location_categories": data["location_categories"] } try: result = self.api.put(urlpath, payload=payload) if 'code' in result and result['code'] >= 400: error_once_only(self.request, result['message']) return super(UpdateAtmsView, self).form_invalid(form) except APIError as err: messages.error(self.request, err) return super(UpdateAtmsView, self).form_invalid(form) except: messages.error(self.request, "Unknown Error") return super(UpdateAtmsView, self).form_invalid(form) msg = 'Atm {} for Bank {} has been created successfully!'.format( # noqa data["atm_id"], data["bank_id"]) messages.success(self.request, msg) return super(UpdateAtmsView, self).form_valid(form) def get_context_data(self, **kwargs): context = super(UpdateAtmsView, self).get_context_data(**kwargs) self.bank_id = self.kwargs['bank_id'] self.atm_id = self.kwargs['atm_id'] context.update({'atm_id': self.atm_id, 'bank_id': self.bank_id}) return context
class IndexAtmsView(LoginRequiredMixin, FormView): """Index view for ATMs""" template_name = "atms/index.html" form_class = CreateAtmForm success_url = reverse_lazy('atms_list') def dispatch(self, request, *args, **kwargs): self.api = API(request.session.get('obp')) return super(IndexAtmsView, self).dispatch(request, *args, **kwargs) def get_form(self, *args, **kwargs): form = super(IndexAtmsView, self).get_form(*args, **kwargs) # Cannot add api in constructor: super complains about unknown kwarg form.api = self.api fields = form.fields try: fields['bank_id'].choices = self.api.get_bank_id_choices() fields['is_accessible'].choices = [('', 'Choose...'), (True, True), (False, False)] fields['has_deposit_capability'].choices = [('', 'Choose...'), (True, True), (False, False)] fields['supported_languages'].choices = [('', 'Choose...'), ("en", "en"), ("fr", "fr"), ("de", "de")] fields['notes'].choices = [('', 'Choose...'), ("String1", "String1"), ("String2", "String2")] fields['supported_currencies'].choices = [('', 'Choose...'), ("EUR", "EUR"), ("MXN", "MXN"), ("USD", "USD")] fields['location_categories'].choices = [('', 'Choose...'), ("ATBI", "ATBI"), ("ATBE", "ATBE")] fields['lobby'].initial = json.dumps( { "monday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "tuesday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "wednesday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "thursday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "friday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "saturday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "sunday": [{ "opening_time": "10:00", "closing_time": "18:00" }] }, indent=4) fields['address'].initial = json.dumps( { "line_1": "No 1 the Road", "line_2": "The Place", "line_3": "The Hill", "city": "Berlin", "county": "String", "state": "Brandenburg", "postcode": "13359", "country_code": "DE" }, indent=4) except APIError as err: messages.error(self.request, err) except Exception as err: messages.error(self.request, err) return form def form_valid(self, form): try: data = form.cleaned_data urlpath = '/banks/{}/atms'.format(data['bank_id']) payload = { "id": data["atm_id"], "bank_id": data["bank_id"], "name": data["name"], "address": json.loads(data['address']), "location": { "latitude": float(data["location_latitude"]) if data["location_latitude"] is not None else 37.0, "longitude": float(data["location_longitude"]) if data["location_longitude"] is not None else 110.0 }, "meta": { "license": { "id": "PDDL", "name": data["meta_license_name"] if data["meta_license_name"] != "" else "license name" } }, "monday": { "opening_time": "10:00", "closing_time": "18:00" }, "tuesday": { "opening_time": "10:00", "closing_time": "18:00" }, "wednesday": { "opening_time": "10:00", "closing_time": "18:00" }, "thursday": { "opening_time": "10:00", "closing_time": "18:00" }, "friday": { "opening_time": "10:00", "closing_time": "18:00" }, "saturday": { "opening_time": "10:00", "closing_time": "18:00" }, "sunday": { "opening_time": "10:00", "closing_time": "18:00" }, "is_accessible": data["is_accessible"] if data["is_accessible"] != "" else "false", "located_at": data["located_at"] if data["located_at"] != "" else "false", "more_info": data["more_info"] if data["more_info"] != "" else "false", "has_deposit_capability": data["has_deposit_capability"] if data["has_deposit_capability"] != "" else "false", "supported_languages": [data["supported_languages"]], "services": [data["services"]], "accessibility_features": [data["accessibility_features"]], "supported_currencies": [data["supported_currencies"]], "notes": [data["notes"]], "location_categories": [data["location_categories"]], "minimum_withdrawal": data["minimum_withdrawal"] if data["minimum_withdrawal"] != "" else "false", "branch_identification": data["branch_identification"] if data["branch_identification"] != "" else "false", "site_identification": data["site_identification"] if data["site_identification"] != "" else "false", "site_name": data["site_name"] if data["site_name"] != "" else "false", "cash_withdrawal_national_fee": data["cash_withdrawal_national_fee"] if data["cash_withdrawal_national_fee"] != "" else "false", "cash_withdrawal_international_fee": data["cash_withdrawal_international_fee"] if data["cash_withdrawal_international_fee"] != "" else "false", "balance_inquiry_fee": data["balance_inquiry_fee"] if data["balance_inquiry_fee"] != "" else "false", } result = self.api.post(urlpath, payload=payload) except APIError as err: messages.error(self.request, "Unknown Error") return super(IndexAtmsView, self).form_invalid(form) except Exception as err: messages.error(self.request, "Unknown Error") return super(IndexAtmsView, self).form_invalid(form) if 'code' in result and result['code'] >= 400: messages.error(self.request, result['message']) return super(IndexAtmsView, self).form_valid(form) msg = 'atm {} for Bank {} has been created successfully!'.format( result["id"], result['bank_id']) messages.success(self.request, msg) return super(IndexAtmsView, self).form_valid(form) def get_banks(self): api = API(self.request.session.get('obp')) try: urlpath = '/banks' result = api.get(urlpath) if 'banks' in result: return [ bank['id'] for bank in sorted(result['banks'], key=lambda d: d['id']) ] else: return [] except APIError as err: messages.error(self.request, err) return [] def get_atms(self, context): api = API(self.request.session.get('obp')) try: self.bankids = self.get_banks() atms_list = [] for bank_id in self.bankids: urlpath = '/banks/{}/atms'.format(bank_id) result = api.get(urlpath) if 'atms' in result: atms_list.extend(result['atms']) except APIError as err: messages.error(self.request, err) return [] except Exception as inst: messages.error(self.request, "Unknown Error {}".format(type(inst).__name__)) return [] return atms_list def get_context_data(self, **kwargs): context = super(IndexAtmsView, self).get_context_data(**kwargs) atms_list = self.get_atms(context) context.update({'atms_list': atms_list, 'bankids': self.bankids}) return context
class UpdateBranchesView(LoginRequiredMixin, FormView): template_name = "branches/update.html" success_url = '/branches/' form_class = CreateBranchForm def dispatch(self, request, *args, **kwargs): self.api = API(request.session.get('obp')) return super(UpdateBranchesView, self).dispatch(request, *args, **kwargs) def get_form(self, *args, **kwargs): form = super(UpdateBranchesView, self).get_form(*args, **kwargs) # Cannot add api in constructor: super complains about unknown kwarg form.api = self.api fields = form.fields urlpath = "/banks/{}/branches/{}".format(self.kwargs['bank_id'], self.kwargs['branch_id']) 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") try: result = self.api.get(urlpath) fields['bank_id'].initial = self.kwargs['bank_id'] fields['branch_id'].initial = self.kwargs['branch_id'] fields['name'].initial = result['name'] fields['address'].initial = json.dumps(result['address'], indent=4) fields['location_latitude'].initial = result['location'][ 'latitude'] fields['location_longitude'].initial = result['location'][ 'longitude'] fields['meta_license_id'].initial = result['meta']['license']['id'] fields['meta_license_name'].initial = result['meta']['license'][ 'name'] fields['branch_routing_scheme'].initial = result['branch_routing'][ 'scheme'] fields['branch_routing_address'].initial = result[ 'branch_routing']['address'] if result['is_accessible'].lower() == 'true': fields['is_accessible'].choices = [(True, True), (False, False)] else: fields['is_accessible'].choices = [(False, False), (True, True)] fields['accessibleFeatures'].initial = result['accessibleFeatures'] fields['branch_type'].initial = result['branch_type'] fields['more_info'].initial = result['more_info'] fields['phone_number'].initial = result['phone_number'] fields['lobby'].initial = json.dumps(result['lobby'], indent=4) fields['drive_up'].initial = json.dumps(result['drive_up'], indent=4) except APIError as err: messages.error(self.request, err) except Exception as err: messages.error(self.request, "Unknown Error {}".format(err)) return form def form_valid(self, form): data = form.cleaned_data urlpath = '/banks/{}/branches/{}'.format(data["bank_id"], data["branch_id"]) payload = { #"id": data["branch_id"], "bank_id": data["bank_id"], "name": data["name"], "address": json.loads(data['address']), "location": { "latitude": float(data["location_latitude"]), "longitude": float(data["location_longitude"]) }, "meta": { "license": { "id": data["meta_license_id"], "name": data["meta_license_name"] } }, "lobby": json.loads(data["lobby"]), "drive_up": json.loads(data["drive_up"]), "branch_routing": { "scheme": data["branch_routing_scheme"] if data["branch_routing_scheme"] != "" else "license name", "address": data["branch_routing_address"] if data["branch_routing_address"] != "" else "license name" }, "is_accessible": data["is_accessible"], "accessibleFeatures": data["accessibleFeatures"], "branch_type": data["branch_type"], "more_info": data["more_info"], "phone_number": data["phone_number"] } try: result = self.api.put(urlpath, payload=payload) if 'code' in result and result['code'] >= 400: error_once_only(self.request, result['message']) return super(UpdateBranchesView, self).form_invalid(form) except APIError as err: messages.error(self.request, err) return super(UpdateBranchesView, self).form_invalid(form) except: messages.error(self.request, "Unknown Error") return super(UpdateBranchesView, self).form_invalid(form) msg = 'Branch {} for Bank {} has been created successfully!'.format( # noqa data["branch_id"], data["bank_id"]) messages.success(self.request, msg) return super(UpdateBranchesView, self).form_valid(form) def get_context_data(self, **kwargs): context = super(UpdateBranchesView, self).get_context_data(**kwargs) self.bank_id = self.kwargs['bank_id'] self.branch_id = self.kwargs['branch_id'] context.update({'branch_id': self.branch_id, 'bank_id': self.bank_id}) return context
class IndexBranchesView(LoginRequiredMixin, FormView): """Index view for branches""" template_name = "branches/index.html" form_class = CreateBranchForm success_url = reverse_lazy('branches_list') def dispatch(self, request, *args, **kwargs): self.api = API(request.session.get('obp')) return super(IndexBranchesView, self).dispatch(request, *args, **kwargs) def get_form(self, *args, **kwargs): form = super(IndexBranchesView, self).get_form(*args, **kwargs) # Cannot add api in constructor: super complains about unknown kwarg form.api = self.api fields = form.fields try: fields['bank_id'].choices = self.api.get_bank_id_choices() fields['is_accessible'].choices = [('', 'Choose...'), (True, True), (False, False)] fields['drive_up'].initial = json.dumps( { "monday": { "opening_time": "10:00", "closing_time": "18:00" }, "tuesday": { "opening_time": "10:00", "closing_time": "18:00" }, "wednesday": { "opening_time": "10:00", "closing_time": "18:00" }, "thursday": { "opening_time": "10:00", "closing_time": "18:00" }, "friday": { "opening_time": "10:00", "closing_time": "18:00" }, "saturday": { "opening_time": "10:00", "closing_time": "18:00" }, "sunday": { "opening_time": "10:00", "closing_time": "18:00" } }, indent=4) fields['lobby'].initial = json.dumps( { "monday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "tuesday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "wednesday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "thursday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "friday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "saturday": [{ "opening_time": "10:00", "closing_time": "18:00" }], "sunday": [{ "opening_time": "10:00", "closing_time": "18:00" }] }, indent=4) fields['address'].initial = json.dumps( { "line_1": "No 1 the Road", "line_2": "The Place", "line_3": "The Hill", "city": "Berlin", "county": "String", "state": "Brandenburg", "postcode": "13359", "country_code": "DE" }, indent=4) except APIError as err: messages.error(self.request, err) except: messages.error(self.request, "Unknown Error") return form def form_valid(self, form): try: data = form.cleaned_data urlpath = '/banks/{}/branches'.format(data['bank_id']) payload = { "id": data["branch_id"], "bank_id": data["bank_id"], "name": data["name"], "address": json.loads(data['address']), "location": { "latitude": float(data["location_latitude"]) if data["location_latitude"] is not None else 37.0, "longitude": float(data["location_longitude"]) if data["location_longitude"] is not None else 110.0 }, "meta": { "license": { "id": "PDDL", "name": data["meta_license_name"] if data["meta_license_name"] != "" else "license name" } }, "lobby": json.loads(data['lobby']), "drive_up": json.loads(data["drive_up"]), "branch_routing": { "scheme": data["branch_routing_scheme"] if data["branch_routing_scheme"] != "" else "license name", "address": data["branch_routing_address"] if data["branch_routing_address"] != "" else "license name" }, "is_accessible": data["is_accessible"] if data["is_accessible"] != "" else "false", "accessibleFeatures": data["accessibleFeatures"] if data["accessibleFeatures"] != "" else "accessible features name", "branch_type": data["branch_type"] if data["branch_type"] != "" else "branch type", "more_info": data["more_info"] if data["more_info"] != "" else "more info", "phone_number": data["phone_number"] if data["phone_number"] != "" else "phone number" } result = self.api.post(urlpath, payload=payload) except APIError as err: error_once_only(self.request, err) return super(IndexBranchesView, self).form_invalid(form) except Exception as err: error_once_only(self.request, "Unknown Error") return super(IndexBranchesView, self).form_invalid(form) if 'code' in result and result['code'] >= 400: error_once_only(self.request, result['message']) return super(IndexBranchesView, self).form_valid(form) msg = 'Branch {} for Bank {} has been created successfully!'.format( result['id'], result['bank_id']) messages.success(self.request, msg) return super(IndexBranchesView, self).form_valid(form) def get_banks(self): api = API(self.request.session.get('obp')) try: urlpath = '/banks' result = api.get(urlpath) if 'banks' in result: return [ bank['id'] for bank in sorted(result['banks'], key=lambda d: d['id']) ] else: return [] except APIError as err: messages.error(self.request, err) return [] def get_branches(self, context): api = API(self.request.session.get('obp')) try: self.bankids = self.get_banks() branches_list = [] for bank_id in self.bankids: urlpath = '/banks/{}/branches'.format(bank_id) result = api.get(urlpath) if 'branches' in result: branches_list.extend(result['branches']) except APIError as err: messages.error(self.request, err) return [] except Exception as inst: messages.error(self.request, "Unknown Error {}".format(type(inst).__name__)) return [] return branches_list def get_context_data(self, **kwargs): context = super(IndexBranchesView, self).get_context_data(**kwargs) branches_list = self.get_branches(context) context.update({ 'branches_list': branches_list, 'bankids': self.bankids }) return context
class CreateView(LoginRequiredMixin, FormView): """View to create a customer""" form_class = CreateCustomerForm template_name = 'customers/create.html' success_url = reverse_lazy('customers-create') def dispatch(self, request, *args, **kwargs): self.api = API(request.session.get('obp')) return super(CreateView, self).dispatch(request, *args, **kwargs) def get_form(self, *args, **kwargs): form = super(CreateView, self).get_form(*args, **kwargs) # Cannot add api in constructor: super complains about unknown kwarg 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") fields['last_ok_date'].initial =\ datetime.datetime.now().strftime(settings.API_DATETIMEFORMAT) return form def form_valid(self, form): data = form.cleaned_data urlpath = '/banks/{}/customers'.format(data['bank_id']) payload = { 'user_id': data['user_id'], 'customer_number': data['customer_number'], 'legal_name': data['legal_name'], 'mobile_phone_number': data['mobile_phone_number'], 'email': data['email'], 'face_image': { 'url': data['face_image_url'], 'date': data['face_image_date'], }, 'date_of_birth': data['date_of_birth'], 'relationship_status': data['relationship_status'], 'dependants': data['dependants'], 'dob_of_dependants': data['dob_of_dependants'], 'credit_rating': { 'rating': data['credit_rating_rating'], 'source': data['credit_rating_source'], }, 'credit_limit': { 'currency': data['credit_limit_currency'], 'amount': data['credit_limit_amount'], }, 'highest_education_attained': data['highest_education_attained'], 'employment_status': data['employment_status'], 'kyc_status': data['kyc_status'], 'last_ok_date': data['last_ok_date'].strftime(settings.API_DATETIMEFORMAT), } try: result = self.api.post(urlpath, payload=payload) except APIError as err: messages.error(self.request, err) return super(CreateView, self).form_invalid(form) except: messages.error(self.request, "Unknown Error") return super(CreateView, self).form_invalid(form) msg = 'Customer number {} for user {} has been created successfully!'.format( # noqa result['customer_number'], data['username']) messages.success(self.request, msg) return super(CreateView, self).form_valid(form)
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, **kwargs): data = form.cleaned_data post_url_path = '/banks/{}/user-invitation'.format(data['bank_id']) get_url_path = '/banks/{}/user-invitations'.format(data['bank_id']) invitations = [] payload = { 'first_name': data['first_name'], 'last_name': data['last_name'], 'email': data['email'], 'company': data['company'], 'country': data['country'], 'purpose': 'DEVELOPER' } context = self.get_context_data(**kwargs) try: result = self.api.post(post_url_path, payload=payload) if 'code' in result and result['code'] >= 400: messages.error(self.request, result['message']) return super(InvitationView, self).form_valid(form) else: self.get_invitations(context, get_url_path, invitations) msg = 'User Invitation ({}) at Bank({}) has been {}!'.format( result['first_name'], data['bank_id'], result['status']) messages.success(self.request, msg) return self.render_to_response(context) except APIError as err: messages.error(self.request, err) return super(InvitationView, self).form_invalid(form) except Exception as err: messages.error(self.request, "Unknown Error:{}".format(str(err))) return super(InvitationView, self).form_invalid(form) def get_invitations(self, context, get_url_path, invitations): response = self.api.get(get_url_path) if 'code' in response and response['code'] >= 400: messages.error(self.request, response['message']) else: invitations = invitations + response['user_invitations'] context.update({ 'invitations': invitations, })