73 Добавление средвств через панель админа

This commit is contained in:
Vyacheslav Anzhiganov 2016-06-26 11:57:55 +03:00
parent a614f13b2a
commit 033f992ec1
9 changed files with 157 additions and 77 deletions

View file

@ -23,7 +23,6 @@ from SWSCloudCore.controllers.servers.manage import ControllerManageServer
from SWSCloudCore.controllers.users.manage import ControllerManageUsers
from SWSCloudCore.controllers.users.manage import ControllerManageUsersBalance
from SWSCloudCore.controllers.users.manage import ControllerManageUsersDetails
from SWSCloudCore.controllers.tasks.manage import ControllerManageTasks
from SWSCloudCore.controllers.plans import ControllerPlans
from SWSCloudCore import models
@ -92,43 +91,6 @@ def dashboard():
)
@viewAdministrator.route('/users/')
def users():
# check session
if not ControllerAdministrators().check_session():
return redirect(url_for("administrator.logout"))
# auth user
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
return redirect(url_for("administrator.logout"))
#
return render_template(
'administrator/users/index.html',
users=ControllerManageUsers().items_get()
)
@viewAdministrator.route('/users/details/<uuid:user_id>')
def user_details(user_id):
# check session
if not ControllerAdministrators().check_session():
return redirect(url_for("administrator.logout"))
# auth user
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
return redirect(url_for("administrator.logout"))
# check exists user by uuid
if not ControllerManageUsers().exists_by_id(user_id):
return redirect(url_for('administrator.users'))
#
if not ControllerBilling().exists(user_id):
ControllerBilling().create(user_id, g.settings['bonus'])
return render_template(
'administrator/users/details.html',
user_account=ControllerManageUsers().item_get(user_id),
user_details=ControllerManageUsersDetails().item_get(user_id),
user_balance=ControllerManageUsersBalance().item_get(user_id),
)
@viewAdministrator.route('/containers/')
def containers():
# check session

View file

@ -6,18 +6,7 @@
from flask import Blueprint, flash, g, jsonify, redirect, render_template, request, session, url_for
from SWSCloudCore.controllers.administrators import ControllerAdministrators
# from SWSCloudCore.controllers.billing import ControllerBilling
# from SWSCloudCore.controllers.common import ControllerMessagesEmail
# from SWSCloudCore.controllers.containers.manage import ControllerManageContainers
# from SWSCloudCore.controllers.vms.manage import ControllerVMSManage
# from SWSCloudCore.controllers.datacenters.manage import ControllerManageDatacenters
# from SWSCloudCore.controllers.ips.manage import ControllerManageIPs
# from SWSCloudCore.controllers.servers.manage import ControllerManageServer
# from SWSCloudCore.controllers.users.manage import ControllerManageUsers
# from SWSCloudCore.controllers.users.manage import ControllerManageUsersBalance
# from SWSCloudCore.controllers.users.manage import ControllerManageUsersDetails
from SWSCloudCore.controllers.tasks.manage import ControllerManageTasks
# from SWSCloudCore.controllers.plans import ControllerPlans
from SWSCloudCore import models
view_administrator_tasks = Blueprint('administrator_tasks', __name__, url_prefix='/administrator/tasks')

View file

@ -0,0 +1,96 @@
# coding: utf-8
from uuid import uuid4
import validators
from flask import Blueprint, flash
from flask import g
from flask import jsonify
from flask import redirect
from flask import render_template
from flask import request
from flask import session
from flask import url_for
from SWSCloudAdministrator.Administrator.tasks import view_administrator_tasks
from SWSCloudCore.controllers.administrators import ControllerAdministrators
from SWSCloudCore.controllers.billing import ControllerBilling
from SWSCloudCore.controllers.common import ControllerMessagesEmail
from SWSCloudCore.controllers.containers.manage import ControllerManageContainers
from SWSCloudCore.controllers.vms.manage import ControllerVMSManage
from SWSCloudCore.controllers.datacenters.manage import ControllerManageDatacenters
from SWSCloudCore.controllers.ips.manage import ControllerManageIPs
from SWSCloudCore.controllers.servers.manage import ControllerManageServer
from SWSCloudCore.controllers.users.manage import ControllerManageUsers
from SWSCloudCore.controllers.users.manage import ControllerManageUsersBalance
from SWSCloudCore.controllers.users.manage import ControllerManageUsersDetails
from SWSCloudCore.controllers.plans import ControllerPlans
from SWSCloudCore import models
view_administrator_users = Blueprint('administrator_users', __name__, url_prefix='/administrator/users')
@view_administrator_users.route('/')
def users():
# check session
if not ControllerAdministrators().check_session():
return redirect(url_for("administrator.logout"))
# auth user
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
return redirect(url_for("administrator.logout"))
#
return render_template(
'administrator/users/index.html',
users=ControllerManageUsers().items_get()
)
@view_administrator_users.route('/details/<uuid:user_id>.html')
def user_details(user_id):
# check session
if not ControllerAdministrators().check_session():
return redirect(url_for("administrator.logout"))
# auth user
if not ControllerAdministrators().auth(session.get('admin_email'), session.get('admin_password')):
return redirect(url_for("administrator.logout"))
# check exists user by uuid
if not ControllerManageUsers().exists_by_id(user_id):
return redirect(url_for('administrator_users.users'))
#
if not ControllerBilling().exists(user_id):
ControllerBilling().create(user_id, g.settings.get('bonus', 0))
return render_template(
'administrator/users/details.html',
user_account=ControllerManageUsers().item_get(user_id),
user_details=ControllerManageUsersDetails().item_get(user_id),
user_balance=ControllerManageUsersBalance().item_get(user_id),
)
@view_administrator_users.route('/credit_increase.html', methods=['POST'])
def user_credits_add():
# check session
if not ControllerAdministrators().check_session():
return redirect(url_for("administrator.logout"))
# auth user
if not ControllerAdministrators().auth(session.get('admin_email'), session.get('admin_password')):
return redirect(url_for("administrator.logout"))
user_id = request.form.get('user_id')
__amount = request.form.get('amount')
try:
amount = float(__amount)
except:
flash(u'Amount mast have type INT (123) or FLOAT (123.2)')
return redirect(url_for('administrator_users.user_details', user_id=user_id))
# check exists user by uuid
if not ControllerManageUsers().exists_by_id(user_id):
return redirect(url_for('administrator_users.users'))
#
if not ControllerBilling().exists(user_id):
ControllerBilling().create(user_id, g.settings.get('bonus', 0))
ControllerBilling().increase(user_id, amount)
return redirect(url_for('administrator_users.user_details', user_id=user_id))

View file

@ -8,6 +8,7 @@ from SWSCloudCore import models
from SWSCloudCore.config import config
from SWSCloudCore.models import database
from SWSCloudAdministrator.Administrator import viewAdministrator
from SWSCloudAdministrator.Administrator.users import view_administrator_users
from SWSCloudAdministrator.Administrator.tasks import view_administrator_tasks
app = Flask(__name__, static_folder='static', static_url_path='')
@ -19,6 +20,7 @@ babel = Babel(app)
app.register_blueprint(viewAdministrator)
app.register_blueprint(view_administrator_tasks)
app.register_blueprint(view_administrator_users)
# @app.errorhandler(404)

View file

@ -21,7 +21,7 @@
<li><a href="{{ url_for('administrator.dashboard') }}">Dashboard</a></li>
<li>Billing
<ul>
<li><a href="{{ url_for('administrator.users') }}">Users</a></li>
<li><a href="{{ url_for('administrator_users.users') }}">Users</a></li>
<li><a href="{{ url_for('administrator.payments') }}">Payments</a></li>
<li><a href="{{ url_for('administrator.plans_index') }}">Plans</a></li>
</ul>

View file

@ -6,66 +6,76 @@
{% block content %}
<h4>Account</h4>
<table class="table table-border">
<table class="table table-border" width="100%">
<tbody>
<tr>
<td>ID</td>
<td>{{ user_account['id'] }}</td>
<td><input type="text" value="{{ user_account['id'] }}" disabled /></td>
</tr>
<tr>
<td>Email</td>
<td>{{ user_account['email'] }}</td>
<td><input type="text" value="{{ user_account['email'] }}" disabled /></td>
</tr>
<tr>
<td>Status</td>
<td>{{ user_account['status'] }}</td>
<td><input type="text" value="{{ user_account['status'] }}" disabled /></td>
</tr>
</tbody>
</table>
<h4>Details</h4>
<a href="">Edit</a>
<table class="table">
<table class="table table-border" width="100%">
<tbody>
<tr>
<td>First name</td>
<td>{{ user_details['fname'] }}</td>
<td><input type="text" value="{{ user_details['fname'] }}" disabled /></td>
</tr>
<tr>
<td>Last name</td>
<td>{{ user_details['lname'] }}</td>
<td><input type="text" value="{{ user_details['lname'] }}" disabled /></td>
</tr>
<tr>
<td>Address</td>
<td>{{ user_details['address'] }}</td>
<td><input type="text" value="{{ user_details['address'] }}" disabled /></td>
</tr>
<tr>
<td>City</td>
<td>{{ user_details['city'] }}</td>
<td><input type="text" value="{{ user_details['city'] }}" disabled /></td>
</tr>
<tr>
<td>Country</td>
<td>{{ user_details['country'] }}</td>
<td><input type="text" value="{{ user_details['country'] }}" disabled /></td>
</tr>
<tr>
<td>State</td>
<td>{{ user_details['state'] }}</td>
<td><input type="text" value="{{ user_details['state'] }}" disabled /></td>
</tr>
<tr>
<td>ZIP code</td>
<td>{{ user_details['zipcode'] }}</td>
<td><input type="text" value="{{ user_details['zipcode'] }}" disabled /></td>
</tr>
</tbody>
</table>
<form action="{{ url_for('administrator_users.user_credits_add') }}" method="post">
<h4>Balance</h4>
<a href="">Add money</a>
<table class="table">
<table class="table" width="100%">
<tbody>
<tr>
<td>Balance</td>
<td>{{ user_balance['balance'] }}</td>
<td><input type="text" name="amount" value="" /></td>
<td><input type="hidden" name="user_id" value="{{user_account.id}}" /></td>
</tr>
</tbody>
</table>
</form>
<h4>Transactions history</h4>
...
<table class="table">
<tbody>
<tr>
<td>...</td>
<td>...</td>
</tr>
</tbody>
</table>
{% endblock %}

View file

@ -35,7 +35,7 @@
{% endif %}
</td>
<td>
<a href="{{ url_for('administrator.user_details', user_id=user.id) }}">Edit</a>
<a href="{{ url_for('administrator_users.user_details', user_id=user.id) }}">Edit</a>
</td>
</tr>
{% endfor %}

View file

@ -18,11 +18,23 @@ class ControllerBilling:
).get()
return x.balance
def update(self, user_id):
def increase(self, user_id, amount):
"""
Обновление баланса
"""
return None
balance = models.UsersBalance.get(models.UsersBalance.user == user_id)
balance.balance += float(amount)
balance.save()
return True
def reduce(self, user_id, amount):
"""
Обновление баланса
"""
balance = models.UsersBalance.get(models.UsersBalance.user == user_id)
balance.balance -= float(amount)
balance.save()
return True
def exists(self, user_id):
"""

View file

@ -74,6 +74,15 @@ class Plans(PgSQLModel):
cores = IntegerField(null=False)
class PlansContainers(PgSQLModel):
datacenter = ForeignKeyField(DataCenters, unique=True)
name = CharField(default='')
price_ip = IntegerField(null=False)
price_storage_gb = IntegerField(null=False)
price_memory_mb = IntegerField(null=False)
price_traffic_gb = IntegerField(null=False)
class PlansVMs(PgSQLModel):
id = UUIDField(primary_key=True, unique=True)
name = CharField(unique=True, null=False)
@ -248,7 +257,7 @@ class Notifications(PgSQLModel):
class NotificationsSecurity(PgSQLModel):
# auth_web
# auth_api
# auth_api
# auth_serverapi
alert = CharField(null=False)
notified = DateTimeField(default=datetime.datetime.now)
details = TextField()