Добавил редактирование материалла на странице склада
All checks were successful
Deploy MES Core / deploy (push) Successful in 12s
All checks were successful
Deploy MES Core / deploy (push) Successful in 12s
This commit is contained in:
@@ -97,7 +97,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for it in items %}
|
||||
<tr>
|
||||
<tr{% if it.material_id %} class="js-stock-edit" role="button" tabindex="0" data-stock-item-id="{{ it.id }}" data-location="{{ it.location }}" data-location-id="{{ it.location_id }}" data-material-id="{{ it.material_id }}" data-name="{{ it.material.full_name|default:it.material.name }}" data-deal-id="{{ it.deal_id|default:'' }}" data-quantity="{{ it.quantity }}" data-current-length="{{ it.current_length|default:'' }}" data-current-width="{{ it.current_width|default:'' }}" data-unique-id="{{ it.unique_id|default:'' }}" data-is-remnant="{% if it.is_remnant %}1{% endif %}" data-is-customer-supplied="{% if it.is_customer_supplied %}1{% endif %}" data-ff="{{ it.material.category.form_factor|default:'' }}"{% endif %}>
|
||||
<td>{{ it.location }}</td>
|
||||
<td>{% if it.created_at %}{{ it.created_at|date:"d.m.Y H:i" }}{% endif %}</td>
|
||||
<td>
|
||||
@@ -327,6 +327,90 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="stockEditModal" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<form method="post" action="{% url 'warehouse_stockitem_update' %}" class="modal-content border-secondary">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="next" value="{{ request.get_full_path }}">
|
||||
<input type="hidden" name="stock_item_id" id="stockEditId">
|
||||
|
||||
<div class="modal-header border-secondary">
|
||||
<div>
|
||||
<h5 class="modal-title">Редактирование позиции</h5>
|
||||
<div class="small text-muted" id="stockEditInfo"></div>
|
||||
</div>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<div class="row g-2">
|
||||
<div class="col-md-7">
|
||||
<label class="form-label">Материал</label>
|
||||
<select class="form-select" name="material_id" id="stockEditMaterial" required>
|
||||
{% for m in materials %}
|
||||
<option value="{{ m.id }}" data-ff="{{ m.category.form_factor|default:'' }}">{{ m.full_name|default:m.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<label class="form-label">Склад</label>
|
||||
<select class="form-select" name="location_id" id="stockEditLocation" required>
|
||||
{% for loc in locations %}
|
||||
<option value="{{ loc.id }}">{{ loc }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label class="form-label">Сделка</label>
|
||||
<select class="form-select" name="deal_id" id="stockEditDeal">
|
||||
<option value="">— не указано —</option>
|
||||
{% for d in deals %}
|
||||
<option value="{{ d.id }}">{{ d.number }}{% if d.company_id %} — {{ d.company.name }}{% endif %}{% if d.description %} — {{ d.description }}{% endif %}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label">Маркировка (ID)</label>
|
||||
<input class="form-control" name="unique_id" id="stockEditUniqueId" placeholder="Напр. ШТ-001">
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">Кол-во</label>
|
||||
<input class="form-control" name="quantity" id="stockEditQty" inputmode="decimal" required>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">Длина (мм)</label>
|
||||
<input class="form-control" name="current_length" id="stockEditLen" inputmode="decimal">
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">Ширина (мм)</label>
|
||||
<input class="form-control" name="current_width" id="stockEditWid" inputmode="decimal">
|
||||
</div>
|
||||
|
||||
<div class="col-12 mt-1">
|
||||
<div class="d-flex flex-wrap gap-4">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="is_remnant" id="stockEditIsRemnant" value="1">
|
||||
<label class="form-check-label" for="stockEditIsRemnant">ДО</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="is_customer_supplied" id="stockEditIsCustomerSupplied" value="1">
|
||||
<label class="form-check-label" for="stockEditIsCustomerSupplied">Давальческий</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer border-secondary">
|
||||
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Отмена</button>
|
||||
<button type="submit" class="btn btn-outline-accent">Сохранить</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const modal = document.getElementById('transferModal');
|
||||
@@ -547,6 +631,69 @@
|
||||
receiptMaterial.addEventListener('change', applyReceiptDefaults);
|
||||
applyReceiptDefaults();
|
||||
}
|
||||
|
||||
const editModal = document.getElementById('stockEditModal');
|
||||
if (editModal) {
|
||||
const editId = document.getElementById('stockEditId');
|
||||
const editInfo = document.getElementById('stockEditInfo');
|
||||
const editMaterial = document.getElementById('stockEditMaterial');
|
||||
const editLocation = document.getElementById('stockEditLocation');
|
||||
const editDeal = document.getElementById('stockEditDeal');
|
||||
const editUniqueId = document.getElementById('stockEditUniqueId');
|
||||
const editQty = document.getElementById('stockEditQty');
|
||||
const editLen = document.getElementById('stockEditLen');
|
||||
const editWid = document.getElementById('stockEditWid');
|
||||
const editIsRemnant = document.getElementById('stockEditIsRemnant');
|
||||
const editIsCustomerSupplied = document.getElementById('stockEditIsCustomerSupplied');
|
||||
|
||||
function applyEditFF() {
|
||||
if (!editMaterial || !editWid) return;
|
||||
const opt = editMaterial.options[editMaterial.selectedIndex];
|
||||
const ff = (opt && opt.getAttribute('data-ff') || '').toLowerCase();
|
||||
if (ff === 'bar') {
|
||||
editWid.value = '';
|
||||
editWid.disabled = true;
|
||||
} else {
|
||||
editWid.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (editMaterial) {
|
||||
editMaterial.addEventListener('change', applyEditFF);
|
||||
}
|
||||
|
||||
document.querySelectorAll('tr.js-stock-edit').forEach((row) => {
|
||||
row.addEventListener('click', (e) => {
|
||||
if (e.target && e.target.closest('button, a, input, select, label')) return;
|
||||
|
||||
const ds = row.dataset || {};
|
||||
|
||||
if (editId) editId.value = ds.stockItemId || '';
|
||||
if (editInfo) editInfo.textContent = `Позиция #${ds.stockItemId || ''}`;
|
||||
|
||||
if (editMaterial) editMaterial.value = ds.materialId || '';
|
||||
if (editLocation) editLocation.value = ds.locationId || '';
|
||||
if (editDeal) editDeal.value = ds.dealId || '';
|
||||
if (editUniqueId) editUniqueId.value = ds.uniqueId || '';
|
||||
if (editQty) editQty.value = ds.quantity || '';
|
||||
if (editLen) editLen.value = ds.currentLength || '';
|
||||
if (editWid) editWid.value = ds.currentWidth || '';
|
||||
if (editIsRemnant) editIsRemnant.checked = (ds.isRemnant || '') === '1';
|
||||
if (editIsCustomerSupplied) editIsCustomerSupplied.checked = (ds.isCustomerSupplied || '') === '1';
|
||||
|
||||
applyEditFF();
|
||||
|
||||
const m = bootstrap.Modal.getOrCreateInstance(editModal);
|
||||
m.show();
|
||||
});
|
||||
|
||||
row.addEventListener('keydown', (e) => {
|
||||
if (e.key !== 'Enter' && e.key !== ' ') return;
|
||||
e.preventDefault();
|
||||
row.click();
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user