185 lines
7.5 KiB
HTML
185 lines
7.5 KiB
HTML
{% extends '_base.html' %}
|
|
{% load static %}
|
|
{% load processes_tags %}
|
|
{% load common_tags %}
|
|
{% load humanize %}
|
|
|
|
{% block sidebar %}
|
|
{% include 'sidebars/admin.html' %}
|
|
{% endblock sidebar %}
|
|
|
|
{% block navbar %}
|
|
{% include 'navbars/admin.html' %}
|
|
{% endblock navbar %}
|
|
|
|
{% block title %}{{ step.name }} - درخواست {{ instance.code }}{% endblock %}
|
|
|
|
{% block style %}
|
|
<link rel="stylesheet" href="{% static 'assets/vendor/libs/bs-stepper/bs-stepper.css' %}">
|
|
|
|
<!-- Persian Date Picker CSS -->
|
|
<link rel="stylesheet" href="https://unpkg.com/persian-datepicker@latest/dist/css/persian-datepicker.min.css">
|
|
{% endblock %}
|
|
|
|
{% block content %}
|
|
{% include '_toasts.html' %}
|
|
<div class="container-xxl flex-grow-1 container-p-y">
|
|
<div class="row">
|
|
<div class="col-12 mb-4">
|
|
<div class="d-flex align-items-center justify-content-between mb-3">
|
|
<div>
|
|
<h4 class="mb-1">{{ step.name }}: {{ instance.process.name }}</h4>
|
|
<small class="text-muted d-block">
|
|
اشتراک آب: {{ instance.well.water_subscription_number|default:"-" }}
|
|
| نماینده: {{ instance.representative.profile.national_code|default:"-" }}
|
|
</small>
|
|
</div>
|
|
<a href="{% url 'processes:request_list' %}" class="btn btn-outline-secondary">بازگشت</a>
|
|
</div>
|
|
|
|
<div class="bs-stepper wizard-vertical vertical mt-2">
|
|
{% stepper_header instance step %}
|
|
|
|
<div class="bs-stepper-content">
|
|
|
|
{% if show_denied_msg %}
|
|
<div class="alert alert-warning mb-3">شما اجازه تعیین نصاب را ندارید.</div>
|
|
{% endif %}
|
|
<form method="post">
|
|
{% csrf_token %}
|
|
<div class="row g-3">
|
|
<div class="col-md-6">
|
|
<label class="form-label">نصاب</label>
|
|
<select name="installer_id" class="form-select" {% if read_only %}disabled{% endif %} required>
|
|
<option value="">انتخاب کنید...</option>
|
|
{% for p in installers %}
|
|
<option value="{{ p.user.id }}" {% if assignment.installer and p.user.id == assignment.installer.id %}selected{% endif %}>{{ p.user.get_full_name }} ({{ p.user.username }})</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label">تاریخ مراجعه نصاب</label>
|
|
<input type="text" id="id_scheduled_date_display" class="form-control" placeholder="انتخاب تاریخ" {% if read_only %}disabled{% endif %} readonly required value="{% if assignment.scheduled_date %}{{ assignment.scheduled_date|date:'Y/m/d' }}{% endif %}">
|
|
<input type="hidden" id="id_scheduled_date" name="scheduled_date" value="{% if assignment.scheduled_date %}{{ assignment.scheduled_date|date:'Y-m-d' }}{% endif %}">
|
|
</div>
|
|
</div>
|
|
{% if assignment.assigned_by or assignment.installer %}
|
|
<div class="mt-3 border rounded p-3 bg-light">
|
|
<div class="row g-2">
|
|
{% if assignment.assigned_by %}
|
|
<div class="col-12 col-md-6">
|
|
<div class="small text-muted">تعیینکننده نصاب</div>
|
|
<div>{{ assignment.assigned_by.get_full_name|default:assignment.assigned_by.username }} <span class="text-muted">({{ assignment.assigned_by.username }})</span></div>
|
|
</div>
|
|
{% endif %}
|
|
{% if assignment.updated %}
|
|
<div class="col-12 col-md-6">
|
|
<div class="small text-muted">تاریخ ثبت/ویرایش</div>
|
|
<div>{{ assignment.updated|to_jalali }}</div>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
<div class="d-flex justify-content-between mt-4">
|
|
{% if previous_step %}
|
|
<a href="{% url 'processes:step_detail' instance.id previous_step.id %}" class="btn btn-label-secondary">قبلی</a>
|
|
{% else %}
|
|
<span></span>
|
|
{% endif %}
|
|
{% if is_manager %}
|
|
<button class="btn btn-primary" type="submit">ثبت و ادامه</button>
|
|
{% else %}
|
|
<a href="{% url 'processes:step_detail' instance.id next_step.id %}" class="btn btn-primary">بعدی</a>
|
|
{% endif %}
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block script %}
|
|
|
|
<!-- Persian Date Picker JS -->
|
|
<script src="https://unpkg.com/persian-date@latest/dist/persian-date.min.js"></script>
|
|
<script src="https://unpkg.com/persian-datepicker@latest/dist/js/persian-datepicker.min.js"></script>
|
|
<script>
|
|
(function(){
|
|
function convertPersianToEnglishNumbers(str) {
|
|
const persianNumbers = '۰۱۲۳۴۵۶۷۸۹';
|
|
const englishNumbers = '0123456789';
|
|
return String(str || '').split('').map(function(char){
|
|
const index = persianNumbers.indexOf(char);
|
|
return index !== -1 ? englishNumbers[index] : char;
|
|
}).join('');
|
|
}
|
|
|
|
function initPersianDatePicker() {
|
|
if ($.fn.persianDatepicker && $('#id_scheduled_date_display').length) {
|
|
try {
|
|
var $display = $('#id_scheduled_date_display');
|
|
var $hidden = $('#id_scheduled_date');
|
|
|
|
// Prefill from hidden Gregorian to visible Jalali
|
|
var initialGregorian = $hidden.val();
|
|
if (initialGregorian) {
|
|
try {
|
|
var initialJalali = new window.persianDate(new Date(initialGregorian)).format('YYYY/MM/DD');
|
|
$display.val(initialJalali);
|
|
} catch (e) {}
|
|
}
|
|
|
|
$display.persianDatepicker({
|
|
calendarType: 'persian',
|
|
altField: '#id_scheduled_date',
|
|
format: 'YYYY/MM/DD',
|
|
altFormat: 'YYYY-MM-DD',
|
|
observer: true,
|
|
autoClose: true,
|
|
initialValue: false,
|
|
calendar:{ persian: { leapYearMode: 'astronomical' } },
|
|
onSelect: function (unixDate) {
|
|
var g = new window.persianDate(unixDate).toCalendar('gregorian').format('YYYY-MM-DD');
|
|
g = convertPersianToEnglishNumbers(g);
|
|
$hidden.val(g);
|
|
}
|
|
});
|
|
} catch (e) {
|
|
console.error('Error initializing Persian Date Picker:', e);
|
|
}
|
|
}
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', initPersianDatePicker);
|
|
})();
|
|
|
|
// Require date and show success toast on submit
|
|
(function(){
|
|
const form = document.querySelector('form');
|
|
if (!form) return;
|
|
form.addEventListener('submit', function(ev){
|
|
const display = document.getElementById('id_scheduled_date_display');
|
|
const hidden = document.getElementById('id_scheduled_date');
|
|
if (!display.value || !hidden.value) {
|
|
ev.preventDefault(); ev.stopPropagation();
|
|
if (typeof showToast === 'function') showToast('تاریخ مراجعه نصاب را انتخاب کنید', 'danger');
|
|
display.scrollIntoView({behavior:'smooth', block:'center'});
|
|
return false;
|
|
}
|
|
try { sessionStorage.setItem('assign_saved', '1'); } catch(_) {}
|
|
}, false);
|
|
|
|
try {
|
|
if (sessionStorage.getItem('assign_saved') === '1') {
|
|
sessionStorage.removeItem('assign_saved');
|
|
if (typeof showToast === 'function') showToast('با موفقیت ثبت شد', 'success');
|
|
}
|
|
} catch(_) {}
|
|
})();
|
|
</script>
|
|
{% endblock %}
|
|
|
|
|