add scope to filter data
This commit is contained in:
		
							parent
							
								
									394546dc67
								
							
						
					
					
						commit
						e9dec3292c
					
				
					 13 changed files with 386 additions and 36 deletions
				
			
		| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
{% extends '_base.html' %}
 | 
			
		||||
{% load static %}
 | 
			
		||||
{% load accounts_tags %}
 | 
			
		||||
 | 
			
		||||
{% block sidebar %}
 | 
			
		||||
    {% include 'sidebars/admin.html' %}
 | 
			
		||||
| 
						 | 
				
			
			@ -43,10 +44,12 @@
 | 
			
		|||
              </span>
 | 
			
		||||
            </span>
 | 
			
		||||
          </button>
 | 
			
		||||
          {% if request.user|is_broker %}
 | 
			
		||||
          <button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#requestModal">
 | 
			
		||||
            <i class="bx bx-plus me-1"></i>
 | 
			
		||||
            درخواست جدید
 | 
			
		||||
          </button>
 | 
			
		||||
          {% endif %}
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -132,6 +135,91 @@
 | 
			
		|||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
  {% if access_denied %}
 | 
			
		||||
  <div class="alert alert-warning d-flex align-items-center mb-3" role="alert">
 | 
			
		||||
    <i class="bx bx-info-circle me-2"></i>
 | 
			
		||||
    <div>شما به این بخش دسترسی ندارید.</div>
 | 
			
		||||
  </div>
 | 
			
		||||
  {% endif %}
 | 
			
		||||
 | 
			
		||||
  <div class="card mb-3">
 | 
			
		||||
    <div class="card-body">
 | 
			
		||||
      <form method="get" class="row g-2 align-items-end">
 | 
			
		||||
        <div class="col-sm-6 col-md-3">
 | 
			
		||||
          <label class="form-label">وضعیت درخواست</label>
 | 
			
		||||
          <select class="form-select" name="status">
 | 
			
		||||
            <option value="">همه</option>
 | 
			
		||||
            {% for val, label in status_choices %}
 | 
			
		||||
              <option value="{{ val }}" {% if filter_status == val %}selected{% endif %}>{{ label }}</option>
 | 
			
		||||
            {% endfor %}@require_POST
 | 
			
		||||
            @login_required
 | 
			
		||||
            def delete_request(request, instance_id):
 | 
			
		||||
                """حذف درخواست"""
 | 
			
		||||
                instance = get_object_or_404(ProcessInstance, id=instance_id)
 | 
			
		||||
                # Only BROKER can delete requests and only within their scope
 | 
			
		||||
                try:
 | 
			
		||||
                    profile = getattr(request.user, 'profile', None)
 | 
			
		||||
                    if not (profile and profile.has_role(UserRoles.BROKER)):
 | 
			
		||||
                        return JsonResponse({'success': False, 'message': 'فقط کارگزار مجاز به حذف درخواست است'}, status=403)
 | 
			
		||||
                    # Enforce ownership by broker (prevent deleting others' requests)
 | 
			
		||||
                    if instance.broker_id and profile.broker and instance.broker_id != profile.broker.id:
 | 
			
		||||
                        return JsonResponse({'success': False, 'message': 'شما مجاز به حذف این درخواست نیستید'}, status=403)
 | 
			
		||||
                except Exception:
 | 
			
		||||
                    return JsonResponse({'success': False, 'message': 'فقط کارگزار مجاز به حذف درخواست است'}, status=403)
 | 
			
		||||
                code = instance.code
 | 
			
		||||
                if instance.status == 'completed':
 | 
			
		||||
                    return JsonResponse({
 | 
			
		||||
                        'success': False,
 | 
			
		||||
                        'message': 'درخواست تکمیل شده نمیتواند حذف شود'
 | 
			
		||||
                    })
 | 
			
		||||
                instance.delete()
 | 
			
		||||
                return JsonResponse({
 | 
			
		||||
                    'success': True,
 | 
			
		||||
                    'message': f'درخواست {code} با موفقیت حذف شد'
 | 
			
		||||
                })
 | 
			
		||||
            
 | 
			
		||||
          </select>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-sm-6 col-md-3">
 | 
			
		||||
          <label class="form-label">امور</label>
 | 
			
		||||
          <select class="form-select" name="affairs">
 | 
			
		||||
            <option value="">همه</option>
 | 
			
		||||
            {% for a in affairs_list %}
 | 
			
		||||
              <option value="{{ a.id }}" {% if filter_affairs|default:''|stringformat:'s' == a.id|stringformat:'s' %}selected{% endif %}>{{ a.name }}</option>
 | 
			
		||||
            {% endfor %}
 | 
			
		||||
          </select>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-sm-6 col-md-3">
 | 
			
		||||
          <label class="form-label">کارگزار</label>
 | 
			
		||||
          <select class="form-select" name="broker">
 | 
			
		||||
            <option value="">همه</option>
 | 
			
		||||
            {% for b in brokers_list %}
 | 
			
		||||
              <option value="{{ b.id }}" {% if filter_broker|default:''|stringformat:'s' == b.id|stringformat:'s' %}selected{% endif %}>{{ b.name }}</option>
 | 
			
		||||
            {% endfor %}
 | 
			
		||||
          </select>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-sm-6 col-md-3">
 | 
			
		||||
          <label class="form-label">مرحله فعلی</label>
 | 
			
		||||
          <select class="form-select" name="step">
 | 
			
		||||
            <option value="">همه</option>
 | 
			
		||||
            {% for s in steps_list %}
 | 
			
		||||
              <option value="{{ s.id }}" {% if filter_step|default:''|stringformat:'s' == s.id|stringformat:'s' %}selected{% endif %}>{{ s.process.name }} - {{ s.name }}</option>
 | 
			
		||||
            {% endfor %}
 | 
			
		||||
          </select>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-12 d-flex gap-2 justify-content-end mt-3">
 | 
			
		||||
          <button type="submit" class="btn btn-primary">
 | 
			
		||||
            <i class="bx bx-filter-alt me-1"></i>
 | 
			
		||||
            اعمال فیلتر
 | 
			
		||||
          </button>
 | 
			
		||||
          <a href="?" class="btn btn-outline-secondary">
 | 
			
		||||
            <i class="bx bx-x me-1"></i>
 | 
			
		||||
            حذف فیلتر
 | 
			
		||||
          </a>
 | 
			
		||||
        </div>
 | 
			
		||||
      </form>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="card">
 | 
			
		||||
    <div class="card-datatable table-responsive">
 | 
			
		||||
      <table id="requests-table" class="datatables-basic table border-top">
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +266,7 @@
 | 
			
		|||
              </div>
 | 
			
		||||
            </td>
 | 
			
		||||
            <td>{{ item.instance.get_status_display_with_color|safe }}</td>
 | 
			
		||||
            <td>{{ item.instance.jcreated }}</td>
 | 
			
		||||
            <td>{{ item.instance.jcreated_date }}</td>
 | 
			
		||||
            <td>
 | 
			
		||||
              <div class="d-inline-block">
 | 
			
		||||
                <a href="javascript:;" class="btn btn-icon dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
 | 
			
		||||
| 
						 | 
				
			
			@ -196,19 +284,31 @@
 | 
			
		|||
                      </a>
 | 
			
		||||
                    {% endif %}
 | 
			
		||||
                  </li>
 | 
			
		||||
                  {% if request.user|is_broker %}
 | 
			
		||||
                  <div class="dropdown-divider"></div>
 | 
			
		||||
                  <li>
 | 
			
		||||
                    <a href="#" class="dropdown-item text-danger" data-instance-id="{{ item.instance.id }}" data-instance-code="{{ item.instance.code }}" onclick="deleteRequest(this.getAttribute('data-instance-id'), this.getAttribute('data-instance-code'))">
 | 
			
		||||
                      <i class="bx bx-trash me-1"></i>حذف
 | 
			
		||||
                    </a>
 | 
			
		||||
                  </li>
 | 
			
		||||
                  {% endif %}
 | 
			
		||||
                </ul>
 | 
			
		||||
              </div>
 | 
			
		||||
            </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
          {% empty %}
 | 
			
		||||
          <tr>
 | 
			
		||||
            <td colspan="11" class="text-center text-muted">موردی ثبت نشده است</td>
 | 
			
		||||
            <td class="text-center text-muted">موردی ثبت نشده است</td>
 | 
			
		||||
            <td></td>
 | 
			
		||||
            <td></td>
 | 
			
		||||
            <td></td>
 | 
			
		||||
            <td></td>
 | 
			
		||||
            <td></td>
 | 
			
		||||
            <td></td>
 | 
			
		||||
            <td></td>
 | 
			
		||||
            <td></td>
 | 
			
		||||
            <td></td>
 | 
			
		||||
            <td></td>
 | 
			
		||||
          </tr>
 | 
			
		||||
          {% endfor %}
 | 
			
		||||
        </tbody>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue