Browse Source

add resource_list

Ivan 2 days ago
parent
commit
b315e8e4fb

+ 1 - 0
sharix_admin/forms/__init__.py

@@ -4,3 +4,4 @@ from .company import *
 from .job_request import *
 from .document import *
 from .service import *
+from .resource import *

+ 17 - 0
sharix_admin/forms/resource.py

@@ -0,0 +1,17 @@
+from dbsynce.models import Resource
+from django import forms
+
+
+class ResourceForm(forms.ModelForm):
+    def __init__(self, *args, **kwargs):
+        super(ResourceForm, self).__init__(*args, **kwargs)
+        # Добавляем класс .form-control для всех полей формы
+        for field in iter(self.fields):
+            if 'class' not in self.fields[field].widget.attrs:
+                self.fields[field].widget.attrs.update({'class': 'form-control'})
+
+    class Meta:
+        model = Resource
+        fields = [
+            'resource_type'
+        ]

+ 2 - 2
sharix_admin/tables.py

@@ -154,7 +154,7 @@ class ResourcesTable(tables.Table):
     )
     # В user ссылка LinkColumn на страницу Аси "Информация о партнере" страница partner_information_form
     user = tables.Column(
-        accessor='user.full_name',
+        accessor='user.get_full_name',
         order_by=('user.first_name', 'user.last_name'),
         verbose_name=_('Responsible'),
         attrs={
@@ -184,7 +184,7 @@ class ResourcesTable(tables.Table):
         }
         exclude = (
             'id_metaservice',
-            'resoure_type',
+            'resource_type',
             'requirements',
             'is_global',
             'is_visible',

+ 1 - 15
sharix_admin/templates/sharix_admin/base_admin.html

@@ -250,21 +250,7 @@
         </a>
       </li>
 
-      <li class="nav-item">
-        <a href="{% url 'sharix_admin:provider/add/' %}" class="nav-link {% if current_page == "provider/add/" %}active rounded{% endif %}">
-          <div class="link d-flex align-items-center">
-            <img
-              class="nav-img"
-              src="
-                {% if current_page == "provider/add/" %}
-                  {% static 'sharix_admin/img/menu/briefcase_w.svg' %}
-                {% else %}
-                  {% static 'sharix_admin/img/menu/briefcase.svg' %}
-                {% endif %}">
-            <span class="menu-bar-label">Добавить Исполнителя</span>
-          </div>
-        </a>
-      </li>
+      
       {% endif %}
 
 

+ 38 - 0
sharix_admin/templates/sharix_admin/resource_list.html

@@ -0,0 +1,38 @@
+{% extends 'sharix_admin/base_admin.html' %}
+{% load render_table from django_tables2 %}
+
+{% block contenthome %}
+    <h1 >{{ title }}</h1>
+
+    <div class="container text-center mt-2">
+      {% render_table table %}
+    </div>
+    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
+    <script>
+      // Запрос на изменения статуса ресурса
+      $('.status-toggle').change(function() {
+        var resource = $(this).data('resource-id');
+        var new_status = $(this).prop('checked') ? 'active' : 'deactivated';
+        $.ajax({
+          url: '{% url "sharix_admin:change_resource_status" %}',
+          type: 'POST',
+          data: {
+            'resource': resource,
+            'new_status': new_status,
+            'csrfmiddlewaretoken': '{{ csrf_token }}'
+          },
+          success: function(response) {
+            var scrollTop = window.pageYOffset;
+            location.reload();
+            window.scrollTo(0, scrollTop);
+          },
+          error: function(xhr, status, error) {
+            console.log(xhr.responseText);
+          }
+        });
+      });
+    </script> 
+    
+
+    
+{% endblock contenthome %}

+ 6 - 37
sharix_admin/templates/sharix_admin/resources.html

@@ -1,40 +1,9 @@
 {% extends 'sharix_admin/base_admin.html' %}
-{% load render_table from django_tables2 %}
 
 {% block view %}
-{% block contenthome %}
-    <h1 >{{ title }}</h1>
-
-    <div class="container text-center mt-2">
-      {% render_table table %}
-    </div>
-    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
-    <script>
-      // Запрос на изменения статуса ресурса
-      $('.status-toggle').change(function() {
-        var resource = $(this).data('resource-id');
-        var new_status = $(this).prop('checked') ? 'active' : 'deactivated';
-        $.ajax({
-          url: '{% url "sharix_admin:resource/change_status" %}',
-          type: 'POST',
-          data: {
-            'resource': resource,
-            'new_status': new_status,
-            'csrfmiddlewaretoken': '{{ csrf_token }}'
-          },
-          success: function(response) {
-            var scrollTop = window.pageYOffset;
-            location.reload();
-            window.scrollTo(0, scrollTop);
-          },
-          error: function(xhr, status, error) {
-            console.log(xhr.responseText);
-          }
-        });
-      });
-    </script> 
-    
-
-    
-{% endblock contenthome %}
-{% endblock view %}
+<form method="post" class="d-flex flex-column align-items-end">
+    {% csrf_token %}
+    {% include 'sharix_admin/include/form.html' %}
+    <button class="btn btn-primary" type="submit">Отправить</button>
+</form>
+{% endblock %}

+ 4 - 1
sharix_admin/urls.py

@@ -46,13 +46,16 @@ urlpatterns = [
     #Набор страниц по модели Ресурс
     path('resources/', login_required(ResourcesListView.as_view()), name='resources'),
     #path('resource/<str:pk>', login_required(ResourceDetailView.as_view()), name='resource_detail'),
-#    path('resource/add/', login_required(ResourceCreate.as_view()), name='resource/add/'),
+    path('resource/add/', login_required(ResourceCreate.as_view()), name='resource/add/'),
 #    path('resource/edit/<int:pk>', login_required(ResourceEditView.as_view()), name='resource/edit'),
 #    path('resource/doc/<str:doc_code>/upload', login_required(ResourceDocUploadView.as_view()),
 #         name='partner_doc_upload'),
 #    path('resource/doc/<str:doc_code>', login_required(ResourceDocView.as_view()), name='resource_doc'),
     path('resource/change_status/', change_resource_status, name='resource/change_status'),
 
+    #path('resource_list/', login_required(ResourceListView.as_view()), name='resource_list'),
+    #path('resource_edit/', login_required(ResourceEditView.as_view()), name='resource_edit'),
+
     #Набор страниц по модели Исполнитель
     path('providers/', login_required(ProvidersListView.as_view()), name='providers'),
     #path('provider/<str:pk>', login_required(ProviderDetailView.as_view()), name='provider_detail'),

+ 122 - 5
sharix_admin/views/resource.py

@@ -9,10 +9,24 @@ from sharix_admin.tables import ResourcesTable
 from sharix_admin.utils import group_required
 
 
+from datetime import datetime, timedelta
+from dbsynce.lib.core import parse_requirements, get_admin_url
+from dbsynce.models import Documents
+from django.contrib import messages
+from django.db import transaction
+from django.urls import reverse_lazy
+from django.views.generic.edit import FormView
+from tickets.models import Ticket, TicketList
+
+from sharix_admin.forms import ResourceForm
+from sharix_admin.utils import *
+from dbsynce.lib.data import *
+from .base import BaseView
+
 class ResourcesListView(UserPassesTestMixin, SingleTableView):
     table_class = ResourcesTable
     queryset = Resource.objects.all()
-    template_name = 'sharix_admin/resources.html'
+    template_name = 'sharix_admin/resource_list.html'
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
@@ -23,10 +37,11 @@ class ResourcesListView(UserPassesTestMixin, SingleTableView):
         return context
 
     def test_func(self) -> bool or None:
-        group_names = ('PARTNER-ADMIN')
-        if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser:
-            return True
-        return False
+        #group_names = ('PARTNER-ADMIN')
+        #if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser:
+        #    return True
+        #return False
+        return True
 
 
 @login_required
@@ -42,3 +57,105 @@ def change_resource_status(request):
         return JsonResponse({'status': 'success'})
     else:
         return JsonResponse({'status': 'error'})
+
+class ResourceEditView(BaseView, FormView):
+    form_class = ResourceForm
+    template_name = "sharix_admin/resource.html"
+    success_url = reverse_lazy("sharix_admin:resource_list")
+    page_title = 'Изменить ресурс'
+    page_name = 'resource_edit'
+
+    # Проверяем состояит ли текущий пользователь в группе PARTNER-ADMIN
+    def test_func(self):
+        return "PARTNER-ADMIN" in self.user_groups
+
+    def form_valid(self, form):
+        with transaction.atomic():
+            # Сохраняем форму, чтобы получить объект ресурса
+            instance = form.save(commit=False)
+
+            # Присваиваем полю repr идентификатор текущего пользователя
+            instance.repr = self.request.user
+
+            # Создаем новую запись в БД, чтобы иметь доступ к ID
+            instance.save()
+
+            # Создание тикета на активацию ресурса.
+            # Создаем объект тикета и присваиваем его полю ticket_status
+            instance.ticket_status = create_ticket_resource_activation_by_metaservice_supervisor(self.request.user, instance)
+
+            # Создание тикета на утверждение прав пользователя
+            # create_ticket_role_activation_partner_admin(self.request.user, instance)
+
+            # Сохраняем новые изменения
+            instance.save()
+
+            # Создаем необходимые объекты документов по requirements указанных в созданной company
+            # Используем bulk_create для создания всех объектов одновременно
+            doc_codes = parse_requirements(instance.requirements)
+            Documents.objects.bulk_create([
+                Documents(
+                    company=instance,
+                    user=self.request.user,
+                    doc_type=doc_code
+                ) for doc_code in doc_codes
+            ])
+
+        # Отправляем пользователю уведомление на страницу о успехе операции
+        messages.success(
+            self.request,
+            'Ваша заявка на становление партнером успешно отправлена и теперь проходит проверку!'
+        )
+
+        return super().form_valid(form)  # Возвращаем успешный ответ
+
+class ResourceCreate(BaseView, FormView):
+    form_class = ResourceForm
+    template_name = "sharix_admin/resource.html"
+    success_url = reverse_lazy("sharix_admin:main")
+    page_title = 'Добавить ресурс'
+    page_name = 'resource/add/'
+
+    # Проверяем не состояит ли текущий пользователь в группе PARTNER-ADMIN
+    def test_func(self):
+        return not "PARTNER-ADMIN" in self.user_groups
+
+    def form_valid(self, form):
+        with transaction.atomic():
+            # Сохраняем форму, чтобы получить объект компании
+            instance = form.save(commit=False)
+
+            # Присваиваем полю repr идентификатор текущего пользователя
+            instance.repr = self.request.user
+
+            # Создаем новую запись в БД, чтобы иметь доступ к ID
+            instance.save()
+
+            # Создание тикета на активацию партнера.
+            # Создаем объект тикета и присваиваем его полю ticket_status
+            instance.ticket_status = create_ticket_company_activation(self.request.user, instance)
+
+            # Создание тикета на утверждение прав пользователя
+            create_ticket_role_activation_partner_admin(self.request.user, instance)
+
+            # Сохраняем новые изменения
+            instance.save()
+
+            # Создаем необходимые объекты документов по requirements указанных в созданной company
+            # Используем bulk_create для создания всех объектов одновременно
+            doc_codes = parse_requirements(instance.requirements)
+            Documents.objects.bulk_create([
+                Documents(
+                    company=instance,
+                    user=self.request.user,
+                    doc_type=doc_code
+                ) for doc_code in doc_codes
+            ])
+
+        # Отправляем пользователю уведомление на страницу о успехе операции
+        messages.success(
+            self.request,
+            'Ваша заявка на становление партнером успешно отправлена и теперь проходит проверку!'
+        )
+
+        return super().form_valid(form)  # Возвращаем успешный ответ