Доработали фильт в реестре заданий
All checks were successful
Deploy MES Core / deploy (push) Successful in 10s
All checks were successful
Deploy MES Core / deploy (push) Successful in 10s
This commit is contained in:
@@ -52,6 +52,21 @@
|
||||
<label class="small text-muted">Сколько сделано?</label>
|
||||
<input type="number" name="quantity_fact" id="id_quantity_fact" class="form-control form-control-lg text-center mx-auto" style="max-width: 200px;" value="{{ item.quantity_fact }}" max="{{ item.quantity_plan }}">
|
||||
</div>
|
||||
|
||||
<div class="row g-3 mt-3 text-start">
|
||||
<div class="col-md-4">
|
||||
<label class="small text-muted">Взятый материал</label>
|
||||
<input type="text" name="material_taken" class="form-control border-secondary" value="{{ item.material_taken }}" placeholder="Напр: 3 трубы по 12м">
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="small text-muted">Деловой отход</label>
|
||||
<input type="text" name="usable_waste" class="form-control border-secondary" value="{{ item.usable_waste }}" placeholder="Напр: кусок 1500мм">
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="small text-muted">Лом (кг)</label>
|
||||
<input type="number" step="0.01" name="scrap_weight" class="form-control border-secondary" value="{{ item.scrap_weight }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="alert alert-success">Статус: {{ item.get_status_display }}. Сделано: {{ item.quantity_fact }} шт.</div>
|
||||
@@ -120,7 +135,7 @@ function closeTask(status) {
|
||||
|
||||
function showPartial() {
|
||||
document.getElementById('partialInput').classList.remove('d-none');
|
||||
document.getElementById('id_status').value = 'part'; // Статус Частично
|
||||
document.getElementById('id_status').value = 'partial';
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -1,45 +1,81 @@
|
||||
<div class="card border-secondary mb-3 shadow-sm">
|
||||
<div class="card-body py-2">
|
||||
<form method="get" id="filter-form" class="row g-2 align-items-center">
|
||||
<input type="hidden" name="filtered" value="1"> <div class="col-md-4">
|
||||
<input type="hidden" name="filtered" value="1">
|
||||
|
||||
{% if user_role != 'operator' %}
|
||||
<div class="col-md-4">
|
||||
<div class="small text-muted mb-1 fw-bold">Станки:</div>
|
||||
<div class="d-flex flex-wrap gap-1">
|
||||
{% for m in machines %}
|
||||
<div>
|
||||
<input type="checkbox" class="btn-check" name="m_ids" id="m_{{ m.id }}" value="{{ m.id }}"
|
||||
{% if m.id in selected_machines %}checked{% endif %} onchange="this.form.submit()">
|
||||
{% if all_selected_machines or m.id in selected_machines %}checked{% endif %} onchange="this.form.submit()">
|
||||
<label class="btn btn-outline-accent btn-sm" for="m_{{ m.id }}">{{ m.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="small text-muted mb-1 fw-bold">Статус:</div>
|
||||
<div class="d-flex flex-wrap gap-1">
|
||||
<input type="checkbox" class="btn-check" name="statuses" id="s_work" value="work" {% if 'work' in selected_statuses %}checked{% endif %} onchange="this.form.submit()">
|
||||
<label class="btn btn-outline-primary btn-sm" for="s_work">В работе</label>
|
||||
|
||||
<input type="checkbox" class="btn-check" name="statuses" id="s_partial" value="partial" {% if 'partial' in selected_statuses %}checked{% endif %} onchange="this.form.submit()">
|
||||
<label class="btn btn-outline-danger btn-sm" for="s_partial">Недодел</label>
|
||||
{% if user_role == 'operator' %}
|
||||
<input type="hidden" name="statuses" value="work">
|
||||
<span class="badge bg-primary">В работе</span>
|
||||
{% else %}
|
||||
<input type="checkbox" class="btn-check" name="statuses" id="s_work" value="work" {% if 'work' in selected_statuses %}checked{% endif %} onchange="this.form.submit()">
|
||||
<label class="btn btn-outline-primary btn-sm" for="s_work">В работе</label>
|
||||
|
||||
<input type="checkbox" class="btn-check" name="statuses" id="s_leftover" value="leftover" {% if 'leftover' in selected_statuses %}checked{% endif %} onchange="this.form.submit()">
|
||||
<label class="btn btn-outline-danger btn-sm" for="s_leftover">Недодел</label>
|
||||
|
||||
<input type="checkbox" class="btn-check" name="statuses" id="s_done" value="done" {% if 'done' in selected_statuses %}checked{% endif %} onchange="this.form.submit()">
|
||||
<label class="btn btn-outline-success btn-sm" for="s_done">Завершено</label>
|
||||
<input type="checkbox" class="btn-check" name="statuses" id="s_closed" value="closed" {% if 'closed' in selected_statuses %}checked{% endif %} onchange="this.form.submit()">
|
||||
<label class="btn btn-outline-success btn-sm" for="s_closed">Завершено</label>
|
||||
|
||||
{% if user_role in 'admin,technologist' %}
|
||||
<input type="checkbox" class="btn-check" name="statuses" id="s_imported" value="imported" {% if 'imported' in selected_statuses %}checked{% endif %} onchange="this.form.submit()">
|
||||
<label class="btn btn-outline-accent btn-sm" for="s_imported">Импорт</label>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if user_role in 'admin,technologist,clerk' %}
|
||||
<div class="col-md-2">
|
||||
<label class="small text-muted mb-1 fw-bold">Учёт 1С:</label>
|
||||
<select name="is_synced" class="form-select form-select-sm bg-body text-body border-secondary" onchange="this.form.submit()">
|
||||
<option value="" {% if not is_synced %}selected{% endif %}>Все</option>
|
||||
<option value="1" {% if is_synced == '1' %}selected{% endif %}>Учтено</option>
|
||||
<option value="0" {% if is_synced == '0' %}selected{% endif %}>Ожидает</option>
|
||||
</select>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-md-2">
|
||||
<label class="small text-muted mb-1 fw-bold">С:</label>
|
||||
<input type="date" name="start_date" class="form-control form-control-sm" value="{{ start_date }}" onchange="this.form.submit()">
|
||||
<input type="date" name="start_date" class="form-control form-control-sm bg-body text-body border-secondary" value="{{ start_date }}" onchange="this.form.submit()">
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label class="small text-muted mb-1 fw-bold">По:</label>
|
||||
<input type="date" name="end_date" class="form-control form-control-sm" value="{{ end_date }}" onchange="this.form.submit()">
|
||||
<input type="date" name="end_date" class="form-control form-control-sm bg-body text-body border-secondary" value="{{ end_date }}" onchange="this.form.submit()">
|
||||
</div>
|
||||
|
||||
<div class="col-md-1 text-end mt-auto">
|
||||
<a href="{% url 'registry' %}" class="btn btn-outline-secondary btn-sm w-100" title="Сбросить по умолчанию"><i class="bi bi-x-circle"></i></a>
|
||||
<a href="{% url 'registry' %}" class="btn btn-outline-secondary btn-sm w-100" title="Сброс">
|
||||
<i class="bi bi-arrow-counterclockwise me-1"></i>Сброс
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function(){
|
||||
const s = document.querySelector('input[name="start_date"]');
|
||||
const e = document.querySelector('input[name="end_date"]');
|
||||
const today = new Date().toISOString().slice(0,10);
|
||||
if (s && !s.value) s.value = today;
|
||||
if (e && !e.value) e.value = today;
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,6 +1,8 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
{% include 'shiftflow/partials/_filter.html' %}
|
||||
|
||||
<div class="card shadow border-secondary">
|
||||
<div class="card-header border-secondary py-3">
|
||||
<h3 class="text-accent mb-0"><i class="bi bi-list-task me-2"></i>Реестр заданий</h3>
|
||||
@@ -27,23 +29,23 @@
|
||||
{% for item in items %}
|
||||
<tr class="clickable-row" data-href="{% url 'item_detail' item.pk %}">
|
||||
<td class="small">{{ item.date|date:"d.m.y" }}</td>
|
||||
<td><span class="text-accent fw-bold">{{ item.deal.number }}</span></td>
|
||||
<td><span class="text-accent fw-bold">{{ item.task.deal.number|default:"-" }}</span></td>
|
||||
<td><span class="badge bg-dark border border-secondary">{{ item.machine.name }}</span></td>
|
||||
<td class="fw-bold">{{ item.drawing_name }}</td>
|
||||
<td class="small">{{ item.size_value }}</td>
|
||||
<td class="fw-bold">{{ item.task.drawing_name|default:"Б/ч" }}</td>
|
||||
<td class="small">{{ item.task.size_value|default:"-" }}</td>
|
||||
<td>
|
||||
<span class="text-info fw-bold">{{ item.quantity_plan }}</span> /
|
||||
<span class="text-success">{{ item.quantity_fact }}</span>
|
||||
</td>
|
||||
<td class="small text-muted">{{ item.material.name }}</td>
|
||||
<td class="small text-muted">{{ item.task.material.full_name|default:item.task.material.name|default:"-" }}</td>
|
||||
<td class="text-center">
|
||||
{% if item.drawing_file %}
|
||||
<a href="{{ item.drawing_file.url }}" target="_blank" class="btn btn-sm btn-outline-info p-1 stop-prop" title="DXF/STEP">
|
||||
{% if item.task.drawing_file %}
|
||||
<a href="{{ item.task.drawing_file.url }}" target="_blank" class="btn btn-sm btn-outline-info p-1 stop-prop" title="DXF/STEP">
|
||||
<i class="bi bi-file-earmark-code"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if item.extra_drawing %}
|
||||
<a href="{{ item.extra_drawing.url }}" target="_blank" class="btn btn-sm btn-outline-danger p-1 stop-prop" title="Чертеж PDF">
|
||||
{% if item.task.extra_drawing %}
|
||||
<a href="{{ item.task.extra_drawing.url }}" target="_blank" class="btn btn-sm btn-outline-danger p-1 stop-prop" title="Чертеж PDF">
|
||||
<i class="bi bi-file-pdf"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
Reference in New Issue
Block a user