Kaynağa Gözat

Добавлена внешняя составляющая функционала загрузки документов для партнера

TonyKurts 4 ay önce
ebeveyn
işleme
5040f97df8

+ 0 - 1
SharixAdmin/forms/login.py

@@ -4,7 +4,6 @@ from django.contrib.auth import get_user_model
 
 
 class LoginUserForm(AuthenticationForm):
-
     password = forms.CharField(label="Пароль",
         widget=forms.PasswordInput(attrs={'class':'form-control'}))
 

+ 56 - 1
SharixAdmin/static/SharixAdmin/css/style.css

@@ -111,4 +111,59 @@
     position: absolute;
     top: 1em;
     right: 1em;
-}
+}
+
+.no-user-select {
+    user-select: none;
+}
+
+
+/* Drop files input */
+.drop-container {
+    display: flex;
+    gap: 1em;
+    text-align: center;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    height: 256px;
+    padding: 2em;
+    border-radius: 10px;
+    border: 2px dashed #55555597;
+    color: #444;
+    cursor: pointer;
+    transition: background .2s ease-in-out, border .2s ease-in-out;
+}
+
+.drop-container:hover {
+    background: #f1f1f1;
+    border-color: #111;
+}
+  
+.drop-container:hover span{
+    color: #222;
+}
+  
+.drop-container span {
+    color: #444;
+    font-size: 20px;
+    font-weight: bold;
+    text-align: center;
+    transition: color .2s ease-in-out;
+}
+
+.drop-container input[type=file]::file-selector-button {
+    margin-right: 20px;
+    border: none;
+    background: var(--btn-bg-color);
+    padding: 10px 20px;
+    border-radius: 10px;
+    color: #fff;
+    cursor: pointer;
+    transition: background .2s ease-in-out;
+}
+  
+.drop-container  input[type=file]::file-selector-button:hover {
+    background: var(--btn-hover-color);
+}
+  

+ 5 - 4
SharixAdmin/templates/SharixAdmin/partner.html

@@ -34,13 +34,14 @@
 
 <h6 class="mb-4">Документы</h6>
     <ul class="list-style-none">
-        {% for document in company_documents %}
+        {% for doc_code in doc_codes %}
             <li class="d-flex justify-content-between">
                 <div class="d-flex align-items-center">
-                    <img class="me-2" style="height: 32px;" src="{% static "SharixAdmin/img/file.svg" %}">
-                    {{ document }}
+                    <img class="me-2 no-user-select" style="height: 32px;" src="{% static "SharixAdmin/img/file.svg" %}">
+                    {{ doc_dict|get_item:doc_code }}
                 </div>
-                <button class="btn btn-sm btn-outline-primary">Загрузить</button>
+                  
+                <a class="btn btn-sm btn-outline-primary" href="{% url "partner_doc" doc_code %}">Загрузить</a>
             </li>
         {% endfor %}
     </ul>

+ 24 - 0
SharixAdmin/templates/SharixAdmin/partner_doc.html

@@ -0,0 +1,24 @@
+{% extends 'SharixAdmin/index.html' %}
+{% load i18n %}
+{% load static %}
+
+
+{% block contenthome %}
+<a class="display-block btn btn-sm btn-outline-secondary" href="{% url 'partner_detail' %}"><< Назад</a>
+
+<p class="description_service">
+    Это система управления государством, источником власти в которой является сам народ. Именно народ решает, какие законы и нормы необходимы для гармоничного существования и развития государства.
+</p>
+
+<form>
+    {% csrf_token %}
+    <label for="doc-expire-date" class="form-label">Дата окончания действия документа (при наличии)</label>
+    <input id="doc-expire-date" type="date" name="doc_expire_date" class="form-control">
+
+    <div class="drop-container mt-3">
+        <span class="drop-title">Перетащите файлы сюда</span>
+        или выберите их на своем устройстве
+        <input id="doc_file" type="file" multiple="multiple" name="doc_file" required>
+    </div>
+</form>
+{% endblock contenthome %}

+ 6 - 0
SharixAdmin/templatetags.py

@@ -0,0 +1,6 @@
+from django.template.defaulttags import register
+
+
+@register.filter
+def get_item(dictionary, key):
+    return dictionary.get(key)

+ 3 - 0
SharixAdmin/urls.py

@@ -15,11 +15,14 @@ urlpatterns = [
     path('', login_required(IndexView.as_view()), name='home'),
     path('transactions/', login_required(TransactionsView.as_view()), name='transactions'),
     path('payment/', login_required(PaymentView.as_view()), name='payment'),
+    
     # Страница "Сотрудничество" (запрос на подключение к сервису)
     path('cooperate/', login_required(CooperateView.as_view()), name='cooperate'),
+    
     # Страница "О партнере"
     path('partner/', login_required(PartnerDetailView.as_view()), name='partner_detail'),
     path('partner/edit/', login_required(PartnerEditView.as_view()), name='partner_edit'),
+    path('partner/doc/<str:doc_code>', login_required(PartnerDocDetailView.as_view()), name='partner_doc'),
 
 
     path('accounts/login/', LoginSharix.as_view(), name='authweb'),

+ 31 - 15
SharixAdmin/views/partner.py

@@ -14,41 +14,41 @@ from SharixAdmin.utils import create_ticket_partner_activation
 from .base import BaseView
 
 
-class PartnerDetailView(UserPassesTestMixin, BaseView, DetailView):
-    model = Company
-    template_name = 'SharixAdmin/partner.html'
-    context_object_name = 'company'
-
-    page_title = _('О партнере')
+class PartnerBaseView(UserPassesTestMixin, BaseView):
     page_name = 'partner'
 
     # Проверяем состояит ли текущий пользователь в группе PARTNER-ADMIN
     def test_func(self):
         return self.request.user.groups.filter(name='PARTNER-ADMIN').exists()
 
+
+class PartnerDetailView(PartnerBaseView, DetailView):
+    model = Company
+    template_name = 'SharixAdmin/partner.html'
+    context_object_name = 'company'
+    page_title = _('О партнере')
+    
+
     def get_object(self, queryset=None):
         return get_object_or_404(Company, repr_id=self.request.user)
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
+
         context.update({
-            "company_documents": Documents.parse_requirements(self.object.requirements)
+            "doc_codes": Documents.parse_requirements(self.object.requirements),
+            "doc_dict": Documents.DOC_TYPES_DICT
         }) 
+
         return context
-    
 
 
-class PartnerEditView(UserPassesTestMixin, BaseView, FormView):
+class PartnerEditView(PartnerBaseView, FormView):
     template_name = 'SharixAdmin/partner_edit.html'
     form_class = CompanyForm
     success_url = reverse_lazy('partner_detail')
-
     page_title = _('Изменение данных партнера')
-    page_name = 'partner'
 
-    # Проверяем состояит ли текущий пользователь в группе PARTNER-ADMIN
-    def test_func(self):
-        return self.request.user.groups.filter(name='PARTNER-ADMIN').exists()
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
@@ -70,4 +70,20 @@ class PartnerEditView(UserPassesTestMixin, BaseView, FormView):
 
         # Отправляем пользователю уведомление на страницу о успехе операции
         messages.success(self.request, 'Данные успешно изменены и теперь проходят проверку!')
-        return super().form_valid(form)
+        return super().form_valid(form)
+
+
+class PartnerDocDetailView(PartnerBaseView, DetailView):       
+    template_name = 'SharixAdmin/partner_doc.html'
+    
+    def get_object(self, queryset=None):
+        doc_code = self.kwargs.get("doc_code")
+        self.page_title = _("Изменение документа партнера: ") + Documents.DOC_TYPES_DICT[doc_code]
+
+        doc = Documents.objects.filter().first()
+        return doc
+
+    def get_context_data(self, **kwargs):
+        context = super().get_context_data(**kwargs)
+        
+        return context