from django.shortcuts import render, get_object_or_404, redirect from django.contrib.auth.decorators import login_required from django.contrib import messages from django.http import JsonResponse from django.views.decorators.http import require_POST from .models import Process, ProcessInstance, StepInstance from .forms import ProcessInstanceForm @login_required def process_list(request): """نمایش لیست فرآیندهای فعال""" processes = Process.objects.filter(is_active=True) return render(request, 'processes/process_list.html', { 'processes': processes }) @login_required def process_detail(request, process_id): """نمایش جزئیات فرآیند""" process = get_object_or_404(Process, id=process_id, is_active=True) return render(request, 'processes/process_detail.html', { 'process': process }) @login_required def start_process(request, process_id): """شروع فرآیند جدید""" process = get_object_or_404(Process, id=process_id, is_active=True) if request.method == 'POST': form = ProcessInstanceForm(request.POST) if form.is_valid(): instance = form.save(commit=False) instance.process = process instance.requester = request.user instance.save() # ایجاد نمونه‌های مرحله for step in process.steps.all(): StepInstance.objects.create( process_instance=instance, step=step ) # تنظیم مرحله اول به عنوان مرحله فعلی first_step = process.steps.first() if first_step: instance.current_step = first_step instance.status = 'in_progress' instance.save() messages.success(request, f'فرآیند {process.name} با موفقیت شروع شد.') return redirect('processes:instance_detail', instance_id=instance.id) else: form = ProcessInstanceForm() return render(request, 'processes/start_process.html', { 'process': process, 'form': form }) @login_required def instance_detail(request, instance_id): """نمایش جزئیات نمونه فرآیند""" instance = get_object_or_404(ProcessInstance, id=instance_id) return render(request, 'processes/instance_detail.html', { 'instance': instance }) @login_required def my_processes(request): """نمایش فرآیندهای کاربر""" my_instances = ProcessInstance.objects.filter(requester=request.user) assigned_steps = StepInstance.objects.filter(assigned_to=request.user, status='in_progress') return render(request, 'processes/my_processes.html', { 'my_instances': my_instances, 'assigned_steps': assigned_steps })