diff --git a/SWSCloudAdministrator/Administrator/__init__.py b/SWSCloudAdministrator/Administrator/__init__.py index 722fcec..992c903 100644 --- a/SWSCloudAdministrator/Administrator/__init__.py +++ b/SWSCloudAdministrator/Administrator/__init__.py @@ -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/') -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 diff --git a/SWSCloudAdministrator/Administrator/tasks.py b/SWSCloudAdministrator/Administrator/tasks.py index 5524a59..21aa1a5 100644 --- a/SWSCloudAdministrator/Administrator/tasks.py +++ b/SWSCloudAdministrator/Administrator/tasks.py @@ -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') diff --git a/SWSCloudAdministrator/Administrator/users.py b/SWSCloudAdministrator/Administrator/users.py new file mode 100644 index 0000000..83c1eb8 --- /dev/null +++ b/SWSCloudAdministrator/Administrator/users.py @@ -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/.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)) diff --git a/SWSCloudAdministrator/application.py b/SWSCloudAdministrator/application.py index e5532ce..18c75c9 100644 --- a/SWSCloudAdministrator/application.py +++ b/SWSCloudAdministrator/application.py @@ -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) diff --git a/SWSCloudAdministrator/templates/administrator/_layout.auth.html b/SWSCloudAdministrator/templates/administrator/_layout.auth.html index 14f801b..a1a56f2 100644 --- a/SWSCloudAdministrator/templates/administrator/_layout.auth.html +++ b/SWSCloudAdministrator/templates/administrator/_layout.auth.html @@ -21,7 +21,7 @@
  • Dashboard
  • Billing diff --git a/SWSCloudAdministrator/templates/administrator/users/details.html b/SWSCloudAdministrator/templates/administrator/users/details.html index d2a20ee..fe5713c 100644 --- a/SWSCloudAdministrator/templates/administrator/users/details.html +++ b/SWSCloudAdministrator/templates/administrator/users/details.html @@ -6,66 +6,76 @@ {% block content %}

    Account

    - +
    - + - + - +
    ID{{ user_account['id'] }}
    Email{{ user_account['email'] }}
    Status{{ user_account['status'] }}

    Details

    Edit - +
    - + - + - + - + - + - + - - - -
    First name{{ user_details['fname'] }}
    Last name{{ user_details['lname'] }}
    Address{{ user_details['address'] }}
    City{{ user_details['city'] }}
    Country{{ user_details['country'] }}
    State{{ user_details['state'] }}
    ZIP code{{ user_details['zipcode'] }}
    -

    Balance

    -Add money - - - - - +
    Balance{{ user_balance['balance'] }}
    +
    +

    Balance

    + + + + + + + + + +
    Balance{{ user_balance['balance'] }}
    +

    Transactions history

    -... + + + + + + + +
    ......
    {% endblock %} diff --git a/SWSCloudAdministrator/templates/administrator/users/index.html b/SWSCloudAdministrator/templates/administrator/users/index.html index 48a06e8..7f10582 100644 --- a/SWSCloudAdministrator/templates/administrator/users/index.html +++ b/SWSCloudAdministrator/templates/administrator/users/index.html @@ -35,7 +35,7 @@ {% endif %} - Edit + Edit {% endfor %} diff --git a/SWSCloudCore/controllers/billing/__init__.py b/SWSCloudCore/controllers/billing/__init__.py index c2312fb..2f3187f 100644 --- a/SWSCloudCore/controllers/billing/__init__.py +++ b/SWSCloudCore/controllers/billing/__init__.py @@ -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): """ diff --git a/SWSCloudCore/models.py b/SWSCloudCore/models.py index 00e3eb8..f8d21e2 100644 --- a/SWSCloudCore/models.py +++ b/SWSCloudCore/models.py @@ -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()