From 80067e68ad6658be3854d6a4febcfc0eaacfe2ac Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Tue, 6 Jan 2026 17:20:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20system=5Fsettin?= =?UTF-8?q?gs=20=D1=81=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B5=D0=B9=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D0=B2=D0=BA?= =?UTF-8?q?=D0=BB=D0=B0=D0=B4=D0=BA=D0=B8=20=D0=B8=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BC=D0=B0=D1=80?= =?UTF-8?q?=D1=88=D1=80=D1=83=D1=82=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?user=5Froles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- myproject/myproject/settings.py | 1 + myproject/myproject/urls.py | 2 +- myproject/system_settings/__init__.py | 0 myproject/system_settings/admin.py | 3 + myproject/system_settings/apps.py | 7 + .../system_settings/migrations/__init__.py | 0 myproject/system_settings/models.py | 3 + .../system_settings/base_settings.html | 29 ++ .../templates/system_settings/settings.html | 18 + myproject/system_settings/tests.py | 3 + myproject/system_settings/urls.py | 10 + myproject/system_settings/views.py | 8 + myproject/templates/navbar.html | 21 +- myproject/templates/profile.html | 5 + .../user_roles/user_role_create.html | 103 +++--- .../user_roles/user_role_created.html | 188 ++++++----- .../user_roles/user_role_delete.html | 84 +++-- .../templates/user_roles/user_role_edit.html | 309 +++++++++--------- .../templates/user_roles/user_role_list.html | 215 ++++++------ .../user_roles/user_role_reactivate.html | 82 +++-- 20 files changed, 585 insertions(+), 506 deletions(-) create mode 100644 myproject/system_settings/__init__.py create mode 100644 myproject/system_settings/admin.py create mode 100644 myproject/system_settings/apps.py create mode 100644 myproject/system_settings/migrations/__init__.py create mode 100644 myproject/system_settings/models.py create mode 100644 myproject/system_settings/templates/system_settings/base_settings.html create mode 100644 myproject/system_settings/templates/system_settings/settings.html create mode 100644 myproject/system_settings/tests.py create mode 100644 myproject/system_settings/urls.py create mode 100644 myproject/system_settings/views.py diff --git a/myproject/myproject/settings.py b/myproject/myproject/settings.py index 3f89787..4229902 100644 --- a/myproject/myproject/settings.py +++ b/myproject/myproject/settings.py @@ -87,6 +87,7 @@ TENANT_APPS = [ 'orders', # Заказы 'inventory', # Складской учет 'pos', # POS Terminal + 'system_settings', # Системные настройки компании (только для владельца) ] # Объединяем для INSTALLED_APPS diff --git a/myproject/myproject/urls.py b/myproject/myproject/urls.py index 5324223..1755dff 100644 --- a/myproject/myproject/urls.py +++ b/myproject/myproject/urls.py @@ -19,12 +19,12 @@ urlpatterns = [ # Web interface for shop owners path('', views.index, name='index'), # Главная страница path('accounts/', include('accounts.urls')), # Управление аккаунтом - path('roles/', include('user_roles.urls')), # Управление ролями пользователей path('products/', include('products.urls')), # Управление товарами path('customers/', include('customers.urls')), # Управление клиентами path('inventory/', include('inventory.urls')), # Управление складом path('orders/', include('orders.urls')), # Управление заказами path('pos/', include('pos.urls')), # POS Terminal + path('settings/', include('system_settings.urls')), # Системные настройки ] # Serve media files during development diff --git a/myproject/system_settings/__init__.py b/myproject/system_settings/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/myproject/system_settings/admin.py b/myproject/system_settings/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/myproject/system_settings/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/myproject/system_settings/apps.py b/myproject/system_settings/apps.py new file mode 100644 index 0000000..8cd557d --- /dev/null +++ b/myproject/system_settings/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class SystemSettingsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'system_settings' + verbose_name = 'Системные настройки' diff --git a/myproject/system_settings/migrations/__init__.py b/myproject/system_settings/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/myproject/system_settings/models.py b/myproject/system_settings/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/myproject/system_settings/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/myproject/system_settings/templates/system_settings/base_settings.html b/myproject/system_settings/templates/system_settings/base_settings.html new file mode 100644 index 0000000..76b526a --- /dev/null +++ b/myproject/system_settings/templates/system_settings/base_settings.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} + +{% block content %} +
+ +

⚙️ Настройки

+ + + + + + {% block settings_content %} + {% endblock %} +
+{% endblock %} diff --git a/myproject/system_settings/templates/system_settings/settings.html b/myproject/system_settings/templates/system_settings/settings.html new file mode 100644 index 0000000..595556d --- /dev/null +++ b/myproject/system_settings/templates/system_settings/settings.html @@ -0,0 +1,18 @@ +{% extends "system_settings/base_settings.html" %} + +{% block title %}Системные настройки{% endblock %} + +{% block settings_content %} +
+
+
+
+

+ Здесь в будущем вы сможете настраивать категории, статусы заказов, + часовой пояс, интеграции и другие параметры вашей компании. +

+
+
+
+
+{% endblock %} diff --git a/myproject/system_settings/tests.py b/myproject/system_settings/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/myproject/system_settings/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/myproject/system_settings/urls.py b/myproject/system_settings/urls.py new file mode 100644 index 0000000..777be4b --- /dev/null +++ b/myproject/system_settings/urls.py @@ -0,0 +1,10 @@ +from django.urls import path, include + +from .views import SystemSettingsView + +app_name = "system_settings" + +urlpatterns = [ + path("", SystemSettingsView.as_view(), name="settings"), + path("roles/", include('user_roles.urls', namespace='user_roles')), +] diff --git a/myproject/system_settings/views.py b/myproject/system_settings/views.py new file mode 100644 index 0000000..eba7648 --- /dev/null +++ b/myproject/system_settings/views.py @@ -0,0 +1,8 @@ +from django.views.generic import TemplateView + +from user_roles.mixins import OwnerRequiredMixin + + +class SystemSettingsView(OwnerRequiredMixin, TemplateView): + """Главная страница настроек (доступна только владельцу)""" + template_name = "system_settings/settings.html" diff --git a/myproject/templates/navbar.html b/myproject/templates/navbar.html index ab76389..f9573a6 100644 --- a/myproject/templates/navbar.html +++ b/myproject/templates/navbar.html @@ -79,17 +79,20 @@ {% if request.user.is_owner or request.user.is_superuser %} - + {% endif %} + + + {% if user.is_superuser %} + {% endif %} {% endif %} diff --git a/myproject/templates/profile.html b/myproject/templates/profile.html index 8406fe7..5d984c0 100644 --- a/myproject/templates/profile.html +++ b/myproject/templates/profile.html @@ -72,6 +72,11 @@ Повторить письмо {% endif %} + {% if user.is_owner or user.is_superuser %} + + Настройки + + {% endif %} Назад diff --git a/myproject/user_roles/templates/user_roles/user_role_create.html b/myproject/user_roles/templates/user_roles/user_role_create.html index fd0dc21..cfda304 100644 --- a/myproject/user_roles/templates/user_roles/user_role_create.html +++ b/myproject/user_roles/templates/user_roles/user_role_create.html @@ -1,64 +1,63 @@ -{% extends "base.html" %} +{% extends "system_settings/base_settings.html" %} {% block title %}Добавить пользователя{% endblock %} -{% block content %} -
-
-
-
-
-

Добавить пользователя

+{% block settings_content %} +
+
+
+
+

Добавить пользователя

+
+
+ {% if messages %} + {% for message in messages %} + -
- {% if messages %} - {% for message in messages %} - - {% endfor %} - {% endif %} + {% endfor %} + {% endif %} -
- {% csrf_token %} + + {% csrf_token %} -
- - -
Email пользователя для входа
+
+ + +
Email пользователя для входа
+
+ +
+ + +
Полное имя пользователя
+
+ +
+ + +
+ +
+ + +
Оставьте пустым для автогенерации. Пароль будет показан после создания.
+
-
- - -
Полное имя пользователя
-
- -
- - -
- -
- - -
Оставьте пустым для автогенерации. Пароль будет показан после создания.
-
- -
- Отмена - -
- -
+
+ Отмена + +
+
-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/myproject/user_roles/templates/user_roles/user_role_created.html b/myproject/user_roles/templates/user_roles/user_role_created.html index 2449524..bbdc94f 100644 --- a/myproject/user_roles/templates/user_roles/user_role_created.html +++ b/myproject/user_roles/templates/user_roles/user_role_created.html @@ -1,71 +1,69 @@ -{% extends 'base.html' %} +{% extends 'system_settings/base_settings.html' %} {% load static %} {% block title %}Пользователь создан{% endblock %} -{% block content %} -
-
-
-
-
-

- Пользователь успешно создан -

+{% block settings_content %} +
+
+
+
+

+ Пользователь успешно создан +

+
+
+
+ + Важно! Сохраните эти данные - пароль больше не будет показан.
-
-
- - Важно! Сохраните эти данные - пароль больше не будет показан. -
-
-
Данные для входа:
- - - - - - - - - - - - - - - -
Email (логин): - {{ created_user_email }} - -
Пароль: - {{ generated_password }} - -
Роль:{{ user_role }}
-
+
+
Данные для входа:
+ + + + + + + + + + + + + + + +
Email (логин): + {{ created_user_email }} + +
Пароль: + {{ generated_password }} + +
Роль:{{ user_role }}
+
-
- - - Формат: email / password - -
+
+ + + Формат: email / password + +
- +
@@ -73,45 +71,45 @@
-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/myproject/user_roles/templates/user_roles/user_role_delete.html b/myproject/user_roles/templates/user_roles/user_role_delete.html index ff646ab..6152ecd 100644 --- a/myproject/user_roles/templates/user_roles/user_role_delete.html +++ b/myproject/user_roles/templates/user_roles/user_role_delete.html @@ -1,62 +1,60 @@ -{% extends "base.html" %} +{% extends "system_settings/base_settings.html" %} {% block title %}Деактивировать пользователя{% endblock %} -{% block content %} -
-
-
-
-
-

Деактивировать пользователя

+{% block settings_content %} +
+
+
+
+

Деактивировать пользователя

+
+
+
+ + Внимание! Пользователь будет деактивирован, но его данные останутся в системе.
-
-
- - Внимание! Пользователь будет деактивирован, но его данные останутся в системе. -
-
-
Email:
-
{{ user_role.user.email }}
+
+
Email:
+
{{ user_role.user.email }}
-
Имя:
-
{{ user_role.user.name }}
+
Имя:
+
{{ user_role.user.name }}
-
Роль:
-
- Роль: +
+ - {{ user_role.role.name }} - -
+ {{ user_role.role.name }} + + -
Создан:
-
{{ user_role.created_at|date:"d.m.Y H:i" }}
-
+
Создан:
+
{{ user_role.created_at|date:"d.m.Y H:i" }}
+
-

- Пользователь больше не сможет войти в систему. - Все его данные (заказы, история действий) сохранятся. - При необходимости вы сможете реактивировать пользователя. -

+

+ Пользователь больше не сможет войти в систему. + Все его данные (заказы, история действий) сохранятся. + При необходимости вы сможете реактивировать пользователя. +

-
- {% csrf_token %} -
- Отмена - -
-
-
+
+ {% csrf_token %} +
+ Отмена + +
+
-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/myproject/user_roles/templates/user_roles/user_role_edit.html b/myproject/user_roles/templates/user_roles/user_role_edit.html index 5ffd098..e75915d 100644 --- a/myproject/user_roles/templates/user_roles/user_role_edit.html +++ b/myproject/user_roles/templates/user_roles/user_role_edit.html @@ -1,99 +1,99 @@ -{% extends "base.html" %} +{% extends "system_settings/base_settings.html" %} {% block title %}Изменить роль пользователя{% endblock %} -{% block content %} -
-
-
-
-
-

Изменить роль пользователя

+{% block settings_content %} +
+
+
+
+

Изменить роль пользователя

+
+
+ {% if messages %} + {% for message in messages %} + -
- {% if messages %} - {% for message in messages %} - - {% endfor %} - {% endif %} + {% endfor %} + {% endif %} + +
+ +

{{ user_role.user.email }}

+
+ +
+ {% csrf_token %} +
- -

{{ user_role.user.email }}

+ + +
Полное имя пользователя
- - {% csrf_token %} - +
+ + +
-
- - -
Полное имя пользователя
+
+
+ +
+
Снимите галочку, чтобы временно отключить доступ
+
-
- - +
+ Отмена +
+ +
- -
-
- - -
-
Снимите галочку, чтобы временно отключить доступ
-
- -
- Отмена -
- - -
-
- -
+
+
+
- -