79 lines
No EOL
2.9 KiB
Python
79 lines
No EOL
2.9 KiB
Python
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
|
|
}) |