73 Добавление средвств через панель админа
This commit is contained in:
parent
a614f13b2a
commit
033f992ec1
9 changed files with 157 additions and 77 deletions
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
96
SWSCloudAdministrator/Administrator/users.py
Normal file
96
SWSCloudAdministrator/Administrator/users.py
Normal 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))
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h4>Balance</h4>
|
||||
<a href="">Add money</a>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Balance</td>
|
||||
<td>{{ user_balance['balance'] }}</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>
|
||||
<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 %}
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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):
|
||||
"""
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue