Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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)
Beispiel #7
0
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,
        })