Add Branches page #75

verify should come from settings and default to true #78
This commit is contained in:
PengfeiLi0218 2019-02-08 12:35:51 +08:00
parent ed3556152c
commit 739c44da62
11 changed files with 706 additions and 12 deletions

View File

@ -51,6 +51,7 @@ INSTALLED_APPS = [
'obp',
'consumers',
'users',
'branches',
'entitlementrequests',
'customers',
'metrics',

View File

@ -31,6 +31,7 @@ urlpatterns = [
url(r'^consumers/', include('consumers.urls')),
url(r'^entitlementrequests/', include('entitlementrequests.urls')),
url(r'^users/', include('users.urls')),
url(r'^branches/', include('branches.urls')),
url(r'^customers/', include('customers.urls')),
url(r'^metrics/', include('metrics.urls')),
url(r'^config/', include('config.urls')),

View File

@ -51,11 +51,13 @@
<li{% if metrics_summary_url in request.path %} class="active"{% endif %}><a href="{{ metrics_summary_url }}">KPI Dashboard</a></li>
</ul>
</li>
{% url "branches_list" as branches_list_url %}
{% url "customers-create" as customers_create_url %}
<li class="dropdown{% if customers_create_url in request.path %} active{% endif %}">
<a href="#" data-toggle="dropdown" class="dropdown-toggle">Resources</a>
<ul class="dropdown-menu">
<li{% if customers_create_url in request.path %} class="active"{% endif %}><a href="{{ customers_create_url }}">Customers</a></li>
<li{% if branches_list_url in request.path %} class="active"{% endif %}><a href="{{ branches_list_url }}">Branches</a></li>
</ul>
</li>
{% url "config-index" as config_index_url %}

View File

@ -0,0 +1,268 @@
"""
Forms of branches app
"""
from django import forms
import random
class CreateBranchForm(forms.Form):
branch_id = forms.CharField(
label='Branch Id',
widget=forms.TextInput(
attrs={
'placeholder': 'branch-id-{}'.format(random.randint(1,1000)),
'class': 'form-control',
}
),
initial='branch-id-{}'.format(random.randint(1,1000)),
)
bank_id = forms.ChoiceField(
label='Bank',
widget=forms.Select(
attrs={
'class': 'form-control',
}
),
choices=[],
)
name = forms.CharField(
label='Name',
widget=forms.TextInput(
attrs={
'placeholder': 'The name of the branch',
'class': 'form-control',
}
),
required=True
)
address_line1 = forms.CharField(
label='address_line1',
widget=forms.TextInput(
attrs={
'placeholder': 'No 1 the Road',
'class': 'form-control',
}
),
required=False
)
address_line2 = forms.CharField(
label='address_line2',
widget=forms.TextInput(
attrs={
'placeholder': 'The Place',
'class': 'form-control',
}
),
required=False
)
address_line3 = forms.CharField(
label='address_line3',
widget=forms.TextInput(
attrs={
'placeholder': 'The Hill',
'class': 'form-control',
}
),
required=False
)
address_city = forms.CharField(
label='city',
widget=forms.TextInput(
attrs={
'placeholder': 'Berlin',
'class': 'form-control',
}
),
required=False
)
address_county = forms.CharField(
label='county',
widget=forms.TextInput(
attrs={
'placeholder': 'String',
'class': 'form-control',
}
),
required=False
)
address_state = forms.CharField(
label='state',
widget=forms.TextInput(
attrs={
'placeholder': 'Brandenburg',
'class': 'form-control',
}
),
required=False
)
address_postcode = forms.CharField(
label='state',
widget=forms.TextInput(
attrs={
'placeholder': '13359',
'class': 'form-control',
}
),
required=False
)
address_country_code = forms.CharField(
label='country_code',
widget=forms.TextInput(
attrs={
'placeholder': 'DE',
'class': 'form-control',
}
),
required=False
)
location_latitude = forms.FloatField(
label='Latitude',
widget=forms.TextInput(
attrs={
'placeholder': 37.0,
'class': 'form-control',
}
),
required=False,
)
location_longitude = forms.FloatField(
label='Longitude',
widget=forms.TextInput(
attrs={
'placeholder': 110.0,
'class': 'form-control',
}
),
required=False,
)
meta_license_id = forms.CharField(
label='meta_license_id',
widget=forms.TextInput(
attrs={
'placeholder': 'PDDL',
'class': 'form-control',
}
),
required=False,
)
meta_license_name = forms.CharField(
label='meta_license_name',
widget=forms.TextInput(
attrs={
'placeholder': 'Open Data Commons Public Domain Dedication and License',
'class': 'form-control',
}
),
required=False,
)
lobby = forms.CharField(
label='Lobby',
widget=forms.TextInput(
attrs={
'placeholder': 'None',
'class': 'form-control',
}
),
required=False,
)
drive_up = forms.CharField(
label='Drive Up',
widget=forms.TextInput(
attrs={
'placeholder': 'None', # noqa
'class': 'form-control',
}
),
required=False,
)
branch_routing_scheme = forms.CharField(
label='Branch Routing Scheme',
widget=forms.TextInput(
attrs={
'placeholder': 'OBP',
'class': 'form-control',
}
),
required=False,
)
branch_routing_address = forms.CharField(
label='Branch Routing Address',
widget=forms.TextInput(
attrs={
'placeholder': '123abc',
'class': 'form-control',
}
),
required=False,
)
is_accessible = forms.CharField(
label='is accessible',
widget=forms.TextInput(
attrs={
'placeholder': 'true',
'class': 'form-control',
}
),
required=False,
)
accessibleFeatures = forms.CharField(
label='Accessible Features',
widget=forms.TextInput(
attrs={
'placeholder': 'wheelchair, atm usuable by the visually impaired',
'class': 'form-control',
}
),
required=False,
)
branch_type = forms.CharField(
label='Branch type',
widget=forms.TextInput(
attrs={
'placeholder': 'Full service store',
'class': 'form-control',
}
),
required=False,
)
more_info = forms.CharField(
label='More information',
widget=forms.TextInput(
attrs={
'placeholder': 'short walk to the lake from here',
'class': 'form-control',
}
),
required=False,
)
phone_number = forms.CharField(
label='Mobile Phone Number',
widget=forms.TextInput(
attrs={
'placeholder': 'E.g. +49 123 456 78 90 12',
'class': 'form-control',
}
),
required=False,
)
def __init__(self, *args, **kwargs):
kwargs.setdefault('label_suffix', '')
super(CreateBranchForm, self).__init__(*args, **kwargs)

View File

@ -0,0 +1,18 @@
#branches_list div {
margin: 5px 0;
}
/* The actual popup (appears on top) */
.popuptext {
width: 250px;
background-color: #555;
color: #fff;
text-align: left;
border-radius: 6px;
padding: 8px 0;
z-index: 1;
/*bottom: 125%;*/
top:100%
left: 50%;
margin-left: -80px;
}

View File

@ -0,0 +1,5 @@
$(document).ready(function($) {
$('#info').click(function() {
alert("Hello World")
});
});

View File

@ -0,0 +1,215 @@
{% extends 'base.html' %}
{% load static %}
{% block page_title %}{{ block.super }} / Branches{% endblock page_title %}
{% block content %}
<div id="branches_list">
<h1>Branches</h1>
<form method="post">
{% csrf_token %}
{% if form.non_field_errors %}
<div class="alert alert-danger">
{{ form.non_field_errors }}
</div>
{% endif %}
<div class="row">
<div class="col-xs-12 col-sm-4">
{% if form.branch_id.errors %}<div class="alert alert-danger">{{ form.branch_id.errors }}</div>{% endif %}
<div class="form-group">
{{ form.branch_id.label_tag }}
{{ form.branch_id }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.bank_id.errors %}<div class="alert alert-danger">{{ form.bank_id.errors }}</div>{% endif %}
<div class="form-group">
{{ form.bank_id.label_tag }}
{{ form.bank_id }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.name.errors %}<div class="alert alert-danger">{{ form.name.errors }}</div>{% endif %}
<div class="form-group">
{{ form.name.label_tag }}
{{ form.name }}
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">
{% if form.address_city.errors %}<div class="alert alert-danger">{{ form.address_city.errors }}</div>{% endif %}
<div class="form-group">
{{ form.address_city.label_tag }}
{{ form.address_city }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.location_latitude.errors %}<div class="alert alert-danger">{{ form.location_latitude.errors }}</div>{% endif %}
<div class="form-group">
{{ form.location_latitude.label_tag }}
{{ form.location_latitude }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.location_longitude.errors %}<div class="alert alert-danger">{{ form.location_longitude.errors }}</div>{% endif %}
<div class="form-group">
{{ form.location_longitude.label_tag }}
{{ form.location_longitude }}
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">
{% if form.meta_license_name.errors %}<div class="alert alert-danger">{{ form.meta_license_name.errors }}</div>{% endif %}
<div class="form-group">
{{ form.meta_license_name.label_tag }}
{{ form.meta_license_name }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.branch_routing_scheme.errors %}<div class="alert alert-danger">{{ form.branch_routing_scheme.errors }}</div>{% endif %}
<div class="form-group">
{{ form.branch_routing_scheme.label_tag }}
{{ form.branch_routing_scheme }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.branch_routing_address.errors %}<div class="alert alert-danger">{{ form.branch_routing_address.errors }}</div>{% endif %}
<div class="form-group">
{{ form.branch_routing_address.label_tag }}
{{ form.branch_routing_address }}
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">
{% if form.is_accessible.errors %}<div class="alert alert-danger">{{ form.is_accessible.errors }}</div>{% endif %}
<div class="form-group">
{{ form.is_accessible.label_tag }}
{{ form.is_accessible }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.accessibleFeatures.errors %}<div class="alert alert-danger">{{ form.accessibleFeatures.errors }}</div>{% endif %}
<div class="form-group">
{{ form.accessibleFeatures.label_tag }}
{{ form.accessibleFeatures }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.branch_type.errors %}<div class="alert alert-danger">{{ form.branch_type.errors }}</div>{% endif %}
<div class="form-group">
{{ form.branch_type.label_tag }}
{{ form.branch_type }}
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">
{% if form.more_info.errors %}<div class="alert alert-danger">{{ form.more_info.errors }}</div>{% endif %}
<div class="form-group">
{{ form.more_info.label_tag }}
{{ form.more_info }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.phone_number.errors %}<div class="alert alert-danger">{{ form.phone_number.errors }}</div>{% endif %}
<div class="form-group">
{{ form.phone_number.label_tag }}
{{ form.phone_number }}
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 hidden-xs">
<div class="form-group">
<button type="submit" class="btn btn-primary btn-green">Add</button>
</div>
</div>
</div>
</form>
<div class="table-responsive">
<table class="table table-hover tablesorter" id="branches-list">
<thead>
<th>Branch Id</th>
<th>Bank Id</th>
<th>Branch Name</th>
<th>More_info</th>
<th>Update Button</th>
</thead>
<tbody>
{% for branch in branches_list %}
{% url 'branches_update' branch.id branch.bank_id as url_branch_update %}
<tr data-branch-id="{{ branch.id }}">
<td>{{ branch.id }}</td>
<td>{{ branch.bank_id }}</td>
<td>{{ branch.name }}</td>
<td>
<div class="popuptext">
<ul>
<li>Address:
<ul>
<li>line1: {{branch.address.line_1}}</li>
<li>line2: {{branch.address.line_2}}</li>
<li>line3: {{branch.address.line_3}}</li>
<li>city: {{branch.address.city}}</li>
<li>county: {{branch.address.county}}</li>
<li>state: {{branch.address.state}}</li>
<li>postcode: {{branch.address.postcode}}</li>
<li>country_code: {{branch.address.country_code}}</li>
</ul>
</li>
<li>Location:
<ul>
<li>latitude: {{branch.location.latitude}}</li>
<li>longitude: {{branch.location.longitude}}</li>
</ul>
</li>
<li>Meta License:
<ul>
<li>id: {{branch.meta.license.id}}</li>
<li>name: {{branch.meta.license.name}}</li>
</ul>
</li>
<li>Branch Routing
<ul>
<li>Scheme: {{branch.branch_routing.scheme}}</li>
<li>Address: {{branch.branch_routing.address}}</li>
</ul>
</li>
<li>Branch Type: {{branch.branch_type}}</li>
<li>More Info: {{branch.more_info}}</li>
<li>Phone Number: {{branch.phone_number}}</li>
</ul>
</div>
</td>
<td><a href="{{ url_branch_update }}" class="btn btn-primary">Update</a></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}
{% block extrajs %}
{% comment %}
<script type="text/javascript" src="{% static 'branches/js/branches.js' %}"></script>
<script type="text/javascript">
</script>
{% endcomment %}
{% endblock extrajs %}
{% block extracss %}
<link href="{% static 'branches/css/branches.css' %}" rel="stylesheet">
{% endblock extracss %}

View File

@ -0,0 +1,167 @@
{% extends 'base.html' %}
{% load static %}
{% block page_title %}{{ block.super }} / Branches{% endblock page_title %}
{% block content %}
<div id="branches">
<h1>Update Branch</h1>
<h2>{{ bank_id }} : {{ branch_id }}</h2>
<form method="post">
{% csrf_token %}
{% if form.non_field_errors %}
<div class="alert alert-danger">
{{ form.non_field_errors }}
</div>
{% endif %}
<div class="row" style="display: None">
<div class="col-xs-12 col-sm-4">
{% if form.bank_id.errors %}<div class="alert alert-danger">{{ form.bank_id.errors }}</div>{% endif %}
<div class="form-group">
{{ form.bank_id.label_tag }}
{{ form.bank_id }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.branch_id.errors %}<div class="alert alert-danger">{{ form.branch_id.errors }}</div>{% endif %}
<div class="form-group">
{{ form.branch_id.label_tag }}
{{ form.branch_id }}
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">
{% if form.name.errors %}<div class="alert alert-danger">{{ form.name.errors }}</div>{% endif %}
<div class="form-group">
{{ form.name.label_tag }}
{{ form.name }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.address_line1.errors %}<div class="alert alert-danger">{{ form.address_line1.errors }}</div>{% endif %}
<div class="form-group">
{{ form.address_line1.label_tag }}
{{ form.address_line1 }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.address_line2.errors %}<div class="alert alert-danger">{{ form.address_line2.errors }}</div>{% endif %}
<div class="form-group">
{{ form.address_line2.label_tag }}
{{ form.address_line2 }}
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">
{% if form.address_line3.errors %}<div class="alert alert-danger">{{ form.address_line3.errors }}</div>{% endif %}
<div class="form-group">
{{ form.address_line3.label_tag }}
{{ form.address_line3 }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.address_city.errors %}<div class="alert alert-danger">{{ form.address_city.errors }}</div>{% endif %}
<div class="form-group">
{{ form.address_city.label_tag }}
{{ form.address_city }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.address_state.errors %}<div class="alert alert-danger">{{ form.address_state.errors }}</div>{% endif %}
<div class="form-group">
{{ form.address_state.label_tag }}
{{ form.address_state }}
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">
{% if form.address_postcode.errors %}<div class="alert alert-danger">{{ form.address_postcode.errors }}</div>{% endif %}
<div class="form-group">
{{ form.address_postcode.label_tag }}
{{ form.address_postcode }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.address_country_code.errors %}<div class="alert alert-danger">{{ form.address_country_code.errors }}</div>{% endif %}
<div class="form-group">
{{ form.address_country_code.label_tag }}
{{ form.address_country_code }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.location_latitude.errors %}<div class="alert alert-danger">{{ form.location_latitude.errors }}</div>{% endif %}
<div class="form-group">
{{ form.location_latitude.label_tag }}
{{ form.location_latitude }}
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">
{% if form.location_longitude.errors %}<div class="alert alert-danger">{{ form.location_longitude.errors }}</div>{% endif %}
<div class="form-group">
{{ form.location_longitude.label_tag }}
{{ form.location_longitude }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.meta_license_id.errors %}<div class="alert alert-danger">{{ form.meta_license_id.errors }}</div>{% endif %}
<div class="form-group">
{{ form.meta_license_id.label_tag }}
{{ form.meta_license_id }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.meta_license_name.errors %}<div class="alert alert-danger">{{ form.meta_license_name.errors }}</div>{% endif %}
<div class="form-group">
{{ form.meta_license_name.label_tag }}
{{ form.meta_license_name }}
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">
{% if form.lobby.errors %}<div class="alert alert-danger">{{ form.lobby.errors }}</div>{% endif %}
<div class="form-group">
{{ form.lobby.label_tag }}
{{ form.lobby }}
</div>
</div>
<div class="col-xs-12 col-sm-4">
{% if form.drive_up.errors %}<div class="alert alert-danger">{{ form.drive_up.errors }}</div>{% endif %}
<div class="form-group">
{{ form.drive_up.label_tag }}
{{ form.drive_up }}
</div>
</div>
</div>
<input type="submit" value="Update" class="btn btn-primary" />
</form>
</div>
{% endblock content %}
{% block extrajs %}
{% comment %}
<script type="text/javascript" src="{% static 'branches/js/branches.js' %}"></script>
<script type="text/javascript">
</script>
{% endcomment %}
{% endblock extrajs %}
{% block extracss %}
<link href="{% static 'branches/css/branches.css' %}" rel="stylesheet">
{% endblock extracss %}

View File

@ -0,0 +1,17 @@
# -*- coding: utf-8 -*-
"""
URLs for metrics app
"""
from django.conf.urls import url
from .views import IndexBranchesView, UpdateBranchesView
urlpatterns = [
url(r'^$',
IndexBranchesView.as_view(),
name='branches_list'),
url(r'^update/(?P<branch_id>[0-9\w\@\.\+-]+)/bank/(?P<bank_id>[0-9\w\@\.\+-]+)/$',
UpdateBranchesView.as_view(),
name='branches_update')
]

View File

@ -6,6 +6,6 @@ App config for users app
from django.apps import AppConfig
class UsersConfig(AppConfig):
"""Config for users"""
name = 'users'
class BranchesConfig(AppConfig):
"""Config for branches"""
name = 'branches'

View File

@ -56,7 +56,7 @@ class IndexView(LoginRequiredMixin, TemplateView):
try:
urlpath = '/entitlements'
entitlements = api.get(urlpath)
if 'code' in entitlements and entitlements['code']==400:
if 'code' in entitlements and entitlements['code']>=400:
messages.error(self.request, entitlements['message'])
else:
for entitlement in entitlements['list']:
@ -166,7 +166,7 @@ class DetailView(LoginRequiredMixin, FormView):
try:
urlpath = '/users/user_id/{}'.format(self.kwargs['user_id'])
user = self.api.get(urlpath)
if 'code' in user and user['code']==403:
if 'code' in user and user['code']>=400:
messages.error(self.request, user['message'])
else:
context['form'].fields['user_id'].initial = user['user_id']
@ -210,17 +210,17 @@ class MyDetailView(LoginRequiredMixin, FormView):
'role_name': data['role_name'],
}
entitlement = self.api.post(urlpath, payload=payload)
if entitlement['code']==201:
if 'code' in entitlement and entitlement['code'] >= 400:
messages.error(self.request, entitlement['message'])
else:
msg = 'Entitlement with role {} has been added.'.format(entitlement['role_name'])
messages.success(self.request, msg)
else:
messages.error(self.request, entitlement['message'])
self.success_url = self.request.path
except APIError as err:
messages.error(self.request, err)
return super(MyDetailView, self).form_invalid(form)
except:
messages.error(self.request, 'Unknown Error')
except Exception as err:
messages.error(self.request, 'Unknown Error. {}'.format(err))
return super(MyDetailView, self).form_invalid(form)
else:
return super(MyDetailView, self).form_valid(form)
@ -236,7 +236,7 @@ class MyDetailView(LoginRequiredMixin, FormView):
context['form'].fields['user_id'].initial = user['user_id']
except APIError as err:
messages.error(self.request, err)
except:
except Exception as err:
messages.error(self.request, 'Unknown Error')
context.update({
@ -255,7 +255,7 @@ class DeleteEntitlementView(LoginRequiredMixin, View):
urlpath = '/users/{}/entitlement/{}'.format(
kwargs['user_id'], kwargs['entitlement_id'])
result = api.delete(urlpath)
if result is not None and 'code' in result and result['code']==400:
if result is not None and 'code' in result and result['code']>=400:
messages.error(request, result['message'])
else:
msg = 'Entitlement with role {} has been deleted.'.format(