Add confirmation and summary
This commit is contained in:
		
							parent
							
								
									9b3973805e
								
							
						
					
					
						commit
						35799b7754
					
				
					 25 changed files with 1419 additions and 265 deletions
				
			
		| 
						 | 
				
			
			@ -41,32 +41,36 @@
 | 
			
		|||
        <div class="bs-stepper-content">
 | 
			
		||||
          <div class="card border">
 | 
			
		||||
            <div class="card-body">
 | 
			
		||||
              {% if template.company.logo %}
 | 
			
		||||
                <div class="text-center mb-3">
 | 
			
		||||
                  <img src="{{ template.company.logo.url }}" alt="لوگوی شرکت" style="max-height:80px;">
 | 
			
		||||
                  <h4 class="text-muted">{{ contract.template.company.name }}</h4>
 | 
			
		||||
                  <h5 class="text-muted">{{ contract.template.name }}</h5>
 | 
			
		||||
                </div>
 | 
			
		||||
              {% endif %}
 | 
			
		||||
              {% if can_view_contract_body %}
 | 
			
		||||
                {% if template.company.logo %}
 | 
			
		||||
                  <div class="text-center mb-3">
 | 
			
		||||
                    <img src="{{ template.company.logo.url }}" alt="لوگوی شرکت" style="max-height:80px;">
 | 
			
		||||
                    <h4 class="text-muted">{{ contract.template.company.name }}</h4>
 | 
			
		||||
                    <h5 class="text-muted">{{ contract.template.name }}</h5>
 | 
			
		||||
                  </div>
 | 
			
		||||
                {% endif %}
 | 
			
		||||
 | 
			
		||||
              <div class="small text-muted mb-2">تاریخ: {{ contract.jcreated }}</div>
 | 
			
		||||
              <hr>
 | 
			
		||||
              <div class="contract-body" style="white-space: pre-line; line-height:1.9;">{{ contract.rendered_body|safe }}</div>
 | 
			
		||||
              <hr>
 | 
			
		||||
              <div class="row mt-4">
 | 
			
		||||
                <div class="col-6 text-center">
 | 
			
		||||
                  <div>امضای مشترک</div>
 | 
			
		||||
                  <div style="height:90px;border:1px dashed #ccc; margin-top:10px;"></div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-6 text-center">
 | 
			
		||||
                  <div>امضای شرکت</div>
 | 
			
		||||
                  <div style="height:90px;border:1px dashed #ccc; margin-top:10px;">
 | 
			
		||||
                    {% if template.company.signature %}
 | 
			
		||||
                      <img src="{{ template.company.signature.url }}" alt="امضای شرکت" style="max-height:80px;">
 | 
			
		||||
                    {% endif %}
 | 
			
		||||
                <div class="small text-muted mb-2">تاریخ: {{ contract.jcreated }}</div>
 | 
			
		||||
                <hr>
 | 
			
		||||
                <div class="contract-body" style="white-space: pre-line; line-height:1.9;">{{ contract.rendered_body|safe }}</div>
 | 
			
		||||
                <hr>
 | 
			
		||||
                <div class="row mt-4">
 | 
			
		||||
                  <div class="col-6 text-center">
 | 
			
		||||
                    <div>امضای مشترک</div>
 | 
			
		||||
                    <div style="height:90px;border:1px dashed #ccc; margin-top:10px;"></div>
 | 
			
		||||
                  </div>
 | 
			
		||||
                  <div class="col-6 text-center">
 | 
			
		||||
                    <div>امضای شرکت</div>
 | 
			
		||||
                    <div style="height:90px;border:1px dashed #ccc; margin-top:10px;">
 | 
			
		||||
                      {% if template.company.signature %}
 | 
			
		||||
                        <img src="{{ template.company.signature.url }}" alt="امضای شرکت" style="max-height:80px;">
 | 
			
		||||
                      {% endif %}
 | 
			
		||||
                    </div>
 | 
			
		||||
                  </div>
 | 
			
		||||
                </div>
 | 
			
		||||
              </div>
 | 
			
		||||
              {% else %}
 | 
			
		||||
                <div class="alert alert-warning mb-0">شما دسترسی به مشاهده متن قرارداد را ندارید.</div>
 | 
			
		||||
              {% endif %}
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <form method="post" class="d-flex justify-content-between mt-3">
 | 
			
		||||
| 
						 | 
				
			
			@ -77,9 +81,17 @@
 | 
			
		|||
              <span></span>
 | 
			
		||||
            {% endif %}
 | 
			
		||||
            {% if next_step %}
 | 
			
		||||
              <button type="submit" class="btn btn-primary">بعدی</button>
 | 
			
		||||
              {% if is_broker %}
 | 
			
		||||
                <button type="submit" class="btn btn-primary">تایید و بعدی</button>
 | 
			
		||||
              {% else %}
 | 
			
		||||
              <a href="{% url 'processes:step_detail' instance.id next_step.id %}" class="btn btn-primary">بعدی</a>
 | 
			
		||||
              {% endif %}
 | 
			
		||||
            {% else %}
 | 
			
		||||
              <button class="btn btn-success" type="button">اتمام</button>
 | 
			
		||||
              {% if is_broker %}
 | 
			
		||||
                <button class="btn btn-success" type="submit">اتمام</button>
 | 
			
		||||
              {% else %}
 | 
			
		||||
                <button class="btn btn-success" type="button" disabled>اتمام</button>
 | 
			
		||||
              {% endif %}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
          </form>
 | 
			
		||||
        </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ from django.urls import reverse
 | 
			
		|||
from django.utils import timezone
 | 
			
		||||
from django.template import Template, Context
 | 
			
		||||
from processes.models import ProcessInstance, StepInstance
 | 
			
		||||
from common.consts import UserRoles
 | 
			
		||||
from .models import ContractTemplate, ContractInstance
 | 
			
		||||
from _helpers.utils import jalali_converter2
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -34,6 +35,20 @@ def contract_step(request, instance_id, step_id):
 | 
			
		|||
    step = get_object_or_404(instance.process.steps, id=step_id)
 | 
			
		||||
    previous_step = instance.process.steps.filter(order__lt=step.order).last()
 | 
			
		||||
    next_step = instance.process.steps.filter(order__gt=step.order).first()
 | 
			
		||||
    # Access control:
 | 
			
		||||
    # - INSTALLER: can open step but cannot view contract body (show inline message)
 | 
			
		||||
    # - Others: can view
 | 
			
		||||
    # - Only BROKER can submit/complete this step
 | 
			
		||||
    profile = getattr(request.user, 'profile', None)
 | 
			
		||||
    is_broker = False
 | 
			
		||||
    can_view_contract_body = True
 | 
			
		||||
    try:
 | 
			
		||||
        is_broker = bool(profile and profile.has_role(UserRoles.BROKER))
 | 
			
		||||
        if profile and profile.has_role(UserRoles.INSTALLER):
 | 
			
		||||
            can_view_contract_body = False
 | 
			
		||||
    except Exception:
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    template_obj = ContractTemplate.objects.first()
 | 
			
		||||
    if not template_obj:
 | 
			
		||||
        return render(request, 'contracts/contract_missing.html', {'instance': instance})
 | 
			
		||||
| 
						 | 
				
			
			@ -54,8 +69,11 @@ def contract_step(request, instance_id, step_id):
 | 
			
		|||
    contract.rendered_body = rendered
 | 
			
		||||
    contract.save()
 | 
			
		||||
 | 
			
		||||
    # If user submits to go next, mark this step completed and go to next
 | 
			
		||||
    # If user submits to go next, only broker can complete and go to next
 | 
			
		||||
    if request.method == 'POST':
 | 
			
		||||
        if not is_broker:
 | 
			
		||||
            from django.http import JsonResponse
 | 
			
		||||
            return JsonResponse({'success': False, 'message': 'شما مجوز تایید این مرحله را ندارید'}, status=403)
 | 
			
		||||
        StepInstance.objects.update_or_create(
 | 
			
		||||
            process_instance=instance,
 | 
			
		||||
            step=step,
 | 
			
		||||
| 
						 | 
				
			
			@ -74,6 +92,8 @@ def contract_step(request, instance_id, step_id):
 | 
			
		|||
        'template': template_obj,
 | 
			
		||||
        'previous_step': previous_step,
 | 
			
		||||
        'next_step': next_step,
 | 
			
		||||
        'is_broker': is_broker,
 | 
			
		||||
        'can_view_contract_body': can_view_contract_body,
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue