191 lines
10 KiB
PHP
191 lines
10 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Create/edit modal for a registry item.
|
|
* Expects $formData (mnt_form_data) in scope. Defines mntOpenEquipmentModal(data).
|
|
*/
|
|
|
|
$statuses = $statuses ?? mnt_equipment_statuses();
|
|
?>
|
|
<div class="modal fade" id="equipmentModal" tabindex="-1" aria-hidden="true">
|
|
<div class="modal-dialog modal-lg modal-dialog-centered modal-fullscreen-sm-down">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="equipmentModalTitle">Nuova attrezzatura</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Chiudi"></button>
|
|
</div>
|
|
<form id="equipmentForm">
|
|
<div class="modal-body">
|
|
<input type="hidden" name="id" id="eqId" value="">
|
|
|
|
<div class="row g-3">
|
|
<div class="col-12">
|
|
<label class="form-label fw-semibold">Nome <span class="text-danger">*</span></label>
|
|
<input type="text" class="form-control" name="name" id="eqName" maxlength="100" required>
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6">
|
|
<label class="form-label fw-semibold">Categoria <span class="text-danger">*</span></label>
|
|
<select class="form-select" name="category_id" id="eqCategory" required>
|
|
<option value="">— seleziona —</option>
|
|
<?php foreach ($formData['categories'] as $category): ?>
|
|
<option value="<?= (int)$category['id'] ?>" data-requires-line="<?= (int)$category['requires_line'] ?>">
|
|
<?= mnt_h($category['name']) ?>
|
|
</option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6" id="eqLineWrap" style="display:none">
|
|
<label class="form-label fw-semibold">Linea di produzione <span class="text-danger">*</span></label>
|
|
<select class="form-select" name="line_id" id="eqLine">
|
|
<option value="">— seleziona —</option>
|
|
<?php foreach ($formData['lines'] as $line): ?>
|
|
<option value="<?= (int)$line['id'] ?>">
|
|
Linea <?= (int)$line['line_number'] ?> — <?= mnt_h($line['name']) ?>
|
|
</option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6">
|
|
<label class="form-label fw-semibold">Matricola</label>
|
|
<input type="text" class="form-control" name="registration_number" id="eqRegistration" maxlength="100">
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6">
|
|
<label class="form-label fw-semibold">Numero di serie</label>
|
|
<input type="text" class="form-control" name="serial_number" id="eqSerial" maxlength="100">
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6">
|
|
<label class="form-label fw-semibold">Lotto / partita</label>
|
|
<input type="text" class="form-control" name="batch_lot" id="eqBatch" maxlength="100">
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6">
|
|
<label class="form-label fw-semibold">Costruttore</label>
|
|
<input type="text" class="form-control" name="manufacturer" id="eqManufacturer" maxlength="150">
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6">
|
|
<label class="form-label fw-semibold">Data di acquisto</label>
|
|
<input type="date" class="form-control" name="purchase_date" id="eqPurchase">
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6">
|
|
<label class="form-label fw-semibold">Data di messa in servizio</label>
|
|
<input type="date" class="form-control" name="commissioning_date" id="eqCommissioning">
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6">
|
|
<label class="form-label fw-semibold">Tipo</label>
|
|
<input type="text" class="form-control" name="tool_type" id="eqType" maxlength="50">
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6">
|
|
<label class="form-label fw-semibold">Stato</label>
|
|
<select class="form-select" name="status" id="eqStatus">
|
|
<?php foreach ($statuses as $value => $label): ?>
|
|
<option value="<?= mnt_h($value) ?>"><?= mnt_h($label) ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6">
|
|
<label class="form-label fw-semibold">Reparto</label>
|
|
<select class="form-select" name="department_id" id="eqDepartment">
|
|
<option value="">—</option>
|
|
<?php foreach ($formData['departments'] as $department): ?>
|
|
<option value="<?= (int)$department['id'] ?>"><?= mnt_h($department['name']) ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6">
|
|
<label class="form-label fw-semibold">Ubicazione</label>
|
|
<input type="text" class="form-control" name="location" id="eqLocation" maxlength="255">
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<label class="form-label fw-semibold">Descrizione</label>
|
|
<textarea class="form-control" name="description" id="eqDescription" rows="2"></textarea>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<label class="form-label fw-semibold">Note</label>
|
|
<textarea class="form-control" name="notes" id="eqNotes" rows="2"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Annulla</button>
|
|
<button type="submit" class="btn btn-mnt-primary">Salva</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
// Shows the line picker only for categories flagged requires_line
|
|
function mntSyncLineVisibility() {
|
|
const requiresLine = $('#eqCategory option:selected').data('requires-line') == 1;
|
|
$('#eqLineWrap').toggle(requiresLine);
|
|
$('#eqLine').prop('required', requiresLine);
|
|
if (!requiresLine) { $('#eqLine').val(''); }
|
|
}
|
|
|
|
function mntOpenEquipmentModal(data) {
|
|
const isEdit = !!data;
|
|
$('#equipmentModalTitle').text(isEdit ? 'Modifica attrezzatura' : 'Nuova attrezzatura');
|
|
|
|
$('#eqId').val(isEdit ? data.id : '');
|
|
$('#eqName').val(isEdit ? (data.name || '') : '');
|
|
$('#eqCategory').val(isEdit && data.category_id ? String(data.category_id) : '');
|
|
$('#eqLine').val(isEdit && data.line_id ? String(data.line_id) : '');
|
|
$('#eqRegistration').val(isEdit ? (data.registration_number || '') : '');
|
|
$('#eqSerial').val(isEdit ? (data.serial_number || '') : '');
|
|
$('#eqBatch').val(isEdit ? (data.batch_lot || '') : '');
|
|
$('#eqManufacturer').val(isEdit ? (data.manufacturer || '') : '');
|
|
$('#eqPurchase').val(isEdit ? (data.purchase_date || '') : '');
|
|
$('#eqCommissioning').val(isEdit ? (data.commissioning_date || '') : '');
|
|
$('#eqType').val(isEdit ? (data.tool_type || '') : '');
|
|
$('#eqStatus').val(isEdit ? (data.status || 'active') : 'active');
|
|
$('#eqDepartment').val(isEdit && data.department_id ? String(data.department_id) : '');
|
|
$('#eqLocation').val(isEdit ? (data.location || '') : '');
|
|
$('#eqDescription').val(isEdit ? (data.description || '') : '');
|
|
$('#eqNotes').val(isEdit ? (data.notes || '') : '');
|
|
|
|
mntSyncLineVisibility();
|
|
new bootstrap.Modal('#equipmentModal').show();
|
|
}
|
|
|
|
$(function () {
|
|
$('#eqCategory').on('change', mntSyncLineVisibility);
|
|
|
|
$('#equipmentForm').on('submit', function (e) {
|
|
e.preventDefault();
|
|
|
|
const name = $('#eqName').val().trim();
|
|
if (!name) { Swal.fire({ icon: 'warning', title: 'Il nome è obbligatorio' }); return; }
|
|
if (!$('#eqCategory').val()) { Swal.fire({ icon: 'warning', title: 'Seleziona una categoria' }); return; }
|
|
if ($('#eqLineWrap').is(':visible') && !$('#eqLine').val()) {
|
|
Swal.fire({ icon: 'warning', title: 'Seleziona la linea di produzione' });
|
|
return;
|
|
}
|
|
|
|
$.post('manutenzioni/ajax/save_equipment.php', $(this).serialize())
|
|
.done(res => {
|
|
if (res.success) {
|
|
if (window.mntAfterEquipmentSave) { window.mntAfterEquipmentSave(res); }
|
|
else { location.reload(); }
|
|
} else {
|
|
Swal.fire({ icon: 'error', title: 'Errore', text: res.message });
|
|
}
|
|
})
|
|
.fail(() => Swal.fire({ icon: 'error', title: 'Errore di rete' }));
|
|
});
|
|
});
|
|
</script>
|