fixed imballaggi worksheet
This commit is contained in:
parent
f477f393ba
commit
53b990ff40
@ -12,13 +12,12 @@ $worksheet_id = isset($_GET['id']) && is_numeric($_GET['id']) ? (int)$_GET['id']
|
||||
|
||||
// AJAX HANDLERS
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['ajax'] == '1') {
|
||||
// Ensure clean JSON output (remove any echoed HTML/notices)
|
||||
// Ensure clean JSON output
|
||||
while (ob_get_level()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
header('Content-Type: application/json');
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
$action = $_POST['action'] ?? '';
|
||||
|
||||
@ -45,6 +44,12 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['aj
|
||||
$freq_jig = trim($_POST['control_frequency_jig'] ?? '');
|
||||
$mode_jig = trim($_POST['control_mode_jig'] ?? '');
|
||||
|
||||
// Package data moved to worksheet header
|
||||
$requested_package_code = trim($_POST['requested_package_code'] ?? '');
|
||||
$meters_per_package = $_POST['meters_per_package'] !== '' ? (int)$_POST['meters_per_package'] : null;
|
||||
$meters_per_package_tolerance = trim($_POST['meters_per_package_tolerance'] ?? '');
|
||||
$meters_per_package_notes = trim($_POST['meters_per_package_notes'] ?? '');
|
||||
|
||||
$box_type = trim($_POST['box_type'] ?? '');
|
||||
$pkg_box = $_POST['packages_or_pieces_per_box'] !== '' ? (int)$_POST['packages_or_pieces_per_box'] : null;
|
||||
$m_box = $_POST['meters_per_box'] !== '' ? (int)$_POST['meters_per_box'] : null;
|
||||
@ -73,6 +78,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['aj
|
||||
control_frequency_drawing = ?,
|
||||
control_frequency_jig = ?,
|
||||
control_mode_jig = ?,
|
||||
requested_package_code = ?,
|
||||
meters_per_package = ?,
|
||||
meters_per_package_tolerance = ?,
|
||||
meters_per_package_notes = ?,
|
||||
box_type = ?,
|
||||
packages_or_pieces_per_box = ?,
|
||||
meters_per_box = ?,
|
||||
@ -97,6 +106,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['aj
|
||||
$freq_draw !== '' ? $freq_draw : null,
|
||||
$freq_jig !== '' ? $freq_jig : null,
|
||||
$mode_jig !== '' ? $mode_jig : null,
|
||||
$requested_package_code !== '' ? $requested_package_code : null,
|
||||
$meters_per_package,
|
||||
$meters_per_package_tolerance !== '' ? $meters_per_package_tolerance : null,
|
||||
$meters_per_package_notes !== '' ? $meters_per_package_notes : null,
|
||||
$box_type !== '' ? $box_type : null,
|
||||
$pkg_box,
|
||||
$m_box,
|
||||
@ -117,19 +130,26 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['aj
|
||||
|
||||
$stmt = $pdo->prepare("
|
||||
INSERT INTO work_sheets
|
||||
(idmatrice, worksheet_date, customer_name, profile_type_code, marking,
|
||||
prod_control_measure_settings, control_frequency_cut, control_frequency_drawing, control_frequency_jig, control_mode_jig,
|
||||
box_type, packages_or_pieces_per_box, meters_per_box,
|
||||
pallet_type, boxes_or_packages_per_pallet,
|
||||
speed_expected_kg_h, speed_actual_kg_h, speed_expected_m_h, speed_actual_m_h,
|
||||
approved_by, notes)
|
||||
(
|
||||
idmatrice, worksheet_date, customer_name, profile_type_code, marking,
|
||||
prod_control_measure_settings, control_frequency_cut, control_frequency_drawing,
|
||||
control_frequency_jig, control_mode_jig,
|
||||
requested_package_code, meters_per_package, meters_per_package_tolerance, meters_per_package_notes,
|
||||
box_type, packages_or_pieces_per_box, meters_per_box,
|
||||
pallet_type, boxes_or_packages_per_pallet,
|
||||
speed_expected_kg_h, speed_actual_kg_h, speed_expected_m_h, speed_actual_m_h,
|
||||
approved_by, notes
|
||||
)
|
||||
VALUES
|
||||
(?, ?, ?, ?, ?,
|
||||
?, ?, ?, ?, ?,
|
||||
?, ?, ?,
|
||||
?, ?,
|
||||
?, ?, ?, ?,
|
||||
?, ?)
|
||||
(
|
||||
?, ?, ?, ?, ?,
|
||||
?, ?, ?, ?, ?,
|
||||
?, ?, ?, ?,
|
||||
?, ?, ?,
|
||||
?, ?,
|
||||
?, ?, ?, ?,
|
||||
?, ?
|
||||
)
|
||||
");
|
||||
$stmt->execute([
|
||||
$idmatrice,
|
||||
@ -142,6 +162,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['aj
|
||||
$freq_draw !== '' ? $freq_draw : null,
|
||||
$freq_jig !== '' ? $freq_jig : null,
|
||||
$mode_jig !== '' ? $mode_jig : null,
|
||||
$requested_package_code !== '' ? $requested_package_code : null,
|
||||
$meters_per_package,
|
||||
$meters_per_package_tolerance !== '' ? $meters_per_package_tolerance : null,
|
||||
$meters_per_package_notes !== '' ? $meters_per_package_notes : null,
|
||||
$box_type !== '' ? $box_type : null,
|
||||
$pkg_box,
|
||||
$m_box,
|
||||
@ -168,10 +192,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['aj
|
||||
exit;
|
||||
}
|
||||
|
||||
$row_id = (int)($_POST['row_id'] ?? 0);
|
||||
$idmescola = (int)($_POST['idmescola'] ?? 0);
|
||||
$pos = 0; // auto-assign
|
||||
|
||||
$row_id = (int)($_POST['row_id'] ?? 0);
|
||||
$idmescola = (int)($_POST['idmescola'] ?? 0);
|
||||
$pos = 0; // auto-assign
|
||||
|
||||
if ($idmescola <= 0) {
|
||||
echo json_encode(['success' => false, 'message' => 'Seleziona una mescola']);
|
||||
@ -186,43 +209,19 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['aj
|
||||
$lub_type = ($_POST['lubrication_type'] ?? '') !== '' ? $_POST['lubrication_type'] : null;
|
||||
$lub_note = trim($_POST['lubrication_notes'] ?? '');
|
||||
|
||||
$pkg_code = trim($_POST['requested_package_code'] ?? '');
|
||||
$m_pkg = $_POST['meters_per_package'] !== '' ? (int)$_POST['meters_per_package'] : null;
|
||||
$m_pkg_note = trim($_POST['meters_per_package_notes'] ?? '');
|
||||
$m_pkg_tol = trim($_POST['meters_per_package_tolerance'] ?? '');
|
||||
|
||||
// Use transaction to keep constraints consistent
|
||||
$pdo->beginTransaction();
|
||||
|
||||
if ($row_id > 0) {
|
||||
|
||||
// Auto-assign mix_position = max + 1 for this worksheet
|
||||
$stmtPos = $pdo->prepare("
|
||||
SELECT IFNULL(MAX(mix_position), 0) + 1
|
||||
FROM work_sheet_mescole
|
||||
WHERE worksheet_id = ?
|
||||
FOR UPDATE
|
||||
");
|
||||
$stmtPos->execute([$worksheet_id]);
|
||||
$pos = (int)$stmtPos->fetchColumn();
|
||||
if ($pos <= 0) $pos = 1;
|
||||
|
||||
|
||||
$stmt = $pdo->prepare("
|
||||
UPDATE work_sheet_mescole SET
|
||||
idmescola = ?,
|
||||
mix_weight_g_m = ?,
|
||||
required_density = ?,
|
||||
required_hardness_shore_a = ?,
|
||||
lubrication_type = ?,
|
||||
lubrication_notes = ?,
|
||||
requested_package_code = ?,
|
||||
meters_per_package = ?,
|
||||
meters_per_package_notes = ?,
|
||||
meters_per_package_tolerance = ?
|
||||
WHERE id = ? AND worksheet_id = ?
|
||||
");
|
||||
|
||||
UPDATE work_sheet_mescole SET
|
||||
idmescola = ?,
|
||||
mix_weight_g_m = ?,
|
||||
required_density = ?,
|
||||
required_hardness_shore_a = ?,
|
||||
lubrication_type = ?,
|
||||
lubrication_notes = ?
|
||||
WHERE id = ? AND worksheet_id = ?
|
||||
");
|
||||
$stmt->execute([
|
||||
$idmescola,
|
||||
$mix_weight,
|
||||
@ -230,37 +229,33 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['aj
|
||||
$hardness !== '' ? $hardness : null,
|
||||
$lub_type,
|
||||
$lub_note !== '' ? $lub_note : null,
|
||||
$pkg_code !== '' ? $pkg_code : null,
|
||||
$m_pkg,
|
||||
$m_pkg_note !== '' ? $m_pkg_note : null,
|
||||
$m_pkg_tol !== '' ? $m_pkg_tol : null,
|
||||
$row_id,
|
||||
$worksheet_id
|
||||
]);
|
||||
|
||||
|
||||
$pdo->commit();
|
||||
echo json_encode(['success' => true]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// If position already used, auto-assign next (max+1)
|
||||
$chk = $pdo->prepare("SELECT COUNT(*) FROM work_sheet_mescole WHERE worksheet_id = ? AND mix_position = ?");
|
||||
$chk->execute([$worksheet_id, $pos]);
|
||||
if ((int)$chk->fetchColumn() > 0) {
|
||||
$mx = $pdo->prepare("SELECT IFNULL(MAX(mix_position),0) + 1 FROM work_sheet_mescole WHERE worksheet_id = ?");
|
||||
$mx->execute([$worksheet_id]);
|
||||
$pos = (int)$mx->fetchColumn();
|
||||
}
|
||||
|
||||
|
||||
$stmtPos = $pdo->prepare("
|
||||
SELECT IFNULL(MAX(mix_position), 0) + 1
|
||||
FROM work_sheet_mescole
|
||||
WHERE worksheet_id = ?
|
||||
FOR UPDATE
|
||||
");
|
||||
$stmtPos->execute([$worksheet_id]);
|
||||
$pos = (int)$stmtPos->fetchColumn();
|
||||
if ($pos <= 0) $pos = 1;
|
||||
|
||||
$stmt = $pdo->prepare("
|
||||
INSERT INTO work_sheet_mescole
|
||||
(worksheet_id, idmescola, mix_position, mix_weight_g_m, required_density, required_hardness_shore_a,
|
||||
lubrication_type, lubrication_notes,
|
||||
requested_package_code, meters_per_package, meters_per_package_notes, meters_per_package_tolerance)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
(
|
||||
worksheet_id, idmescola, mix_position, mix_weight_g_m,
|
||||
required_density, required_hardness_shore_a,
|
||||
lubrication_type, lubrication_notes
|
||||
)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
||||
");
|
||||
$stmt->execute([
|
||||
$worksheet_id,
|
||||
@ -270,11 +265,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['aj
|
||||
$density !== '' ? $density : null,
|
||||
$hardness !== '' ? $hardness : null,
|
||||
$lub_type,
|
||||
$lub_note !== '' ? $lub_note : null,
|
||||
$pkg_code !== '' ? $pkg_code : null,
|
||||
$m_pkg,
|
||||
$m_pkg_note !== '' ? $m_pkg_note : null,
|
||||
$m_pkg_tol !== '' ? $m_pkg_tol : null
|
||||
$lub_note !== '' ? $lub_note : null
|
||||
]);
|
||||
|
||||
$pdo->commit();
|
||||
@ -300,7 +291,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['aj
|
||||
echo json_encode(['success' => false, 'message' => 'Azione sconosciuta']);
|
||||
exit;
|
||||
} catch (Exception $e) {
|
||||
if ($pdo->inTransaction()) $pdo->rollBack();
|
||||
if ($pdo->inTransaction()) {
|
||||
$pdo->rollBack();
|
||||
}
|
||||
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
|
||||
exit;
|
||||
}
|
||||
@ -313,7 +306,7 @@ $matrici = $pdo->query("
|
||||
ORDER BY nome ASC
|
||||
")->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
// Load worksheet lookup options
|
||||
// Load generic worksheet lookup options
|
||||
$lookup = [];
|
||||
$lookupDefault = [];
|
||||
|
||||
@ -333,6 +326,33 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $r) {
|
||||
}
|
||||
}
|
||||
|
||||
// Load packaging items from dedicated table
|
||||
$packagingLookup = [
|
||||
'PACKAGING_TYPE' => [],
|
||||
'BOX' => [],
|
||||
'PALLET' => []
|
||||
];
|
||||
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT category, item_name, item_code
|
||||
FROM packaging_items
|
||||
WHERE is_active = 1
|
||||
AND category IN ('PACKAGING_TYPE', 'BOX', 'PALLET')
|
||||
ORDER BY category ASC, item_name ASC
|
||||
");
|
||||
$stmt->execute();
|
||||
|
||||
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $r) {
|
||||
$label = $r['item_name'];
|
||||
if (!empty($r['item_code'])) {
|
||||
$label .= ' — ' . $r['item_code'];
|
||||
}
|
||||
|
||||
$packagingLookup[$r['category']][] = [
|
||||
'value' => $r['item_code'],
|
||||
'label' => $label
|
||||
];
|
||||
}
|
||||
|
||||
// Load mescole dropdown for modal
|
||||
$mescole = $pdo->query("
|
||||
@ -398,9 +418,25 @@ function ws_options($rows, $selectedValue, $defaultValue = '')
|
||||
return $html;
|
||||
}
|
||||
|
||||
function packaging_options($rows, $selectedValue = '')
|
||||
{
|
||||
$selectedValue = (string)$selectedValue;
|
||||
|
||||
$html = '<option value="">--</option>';
|
||||
if (!$rows) return $html;
|
||||
|
||||
foreach ($rows as $r) {
|
||||
$val = h($r['value']);
|
||||
$lab = h($r['label']);
|
||||
$sel = ((string)$r['value'] === $selectedValue) ? ' selected' : '';
|
||||
$html .= "<option value=\"{$val}\"{$sel}>{$lab}</option>";
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
$isEdit = ($worksheet_id > 0);
|
||||
?>
|
||||
|
||||
<!doctype html>
|
||||
<html lang="it">
|
||||
|
||||
@ -411,7 +447,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
<title><?= $isEdit ? 'Modifica Foglio di Lavoro' : 'Nuovo Foglio di Lavoro' ?></title>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/dataTables.bootstrap5.min.css">
|
||||
@ -422,7 +457,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
<link href="https://cdn.jsdelivr.net/npm/@ttskch/select2-bootstrap4-theme@1.5.2/dist/select2-bootstrap4.min.css" rel="stylesheet" />
|
||||
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
font-size: 0.95rem;
|
||||
@ -492,7 +526,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<!-- HEADER FORM -->
|
||||
<form id="worksheetHeaderForm">
|
||||
<input type="hidden" name="id" id="wsId" value="<?= (int)$worksheet_id ?>">
|
||||
|
||||
@ -533,7 +566,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
<select class="form-select" name="marking" id="marking">
|
||||
<?= ws_options($lookup['marking'] ?? [], $worksheet['marking'] ?? '', $lookupDefault['marking'] ?? '') ?>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
@ -552,53 +584,79 @@ $isEdit = ($worksheet_id > 0);
|
||||
<select class="form-select" name="control_frequency_cut" id="control_frequency_cut">
|
||||
<?= ws_options($lookup['control_frequency_cut'] ?? [], $worksheet['control_frequency_cut'] ?? '', $lookupDefault['control_frequency_cut'] ?? '') ?>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-semibold">Controlli - Disegno</label>
|
||||
<select class="form-select" name="control_frequency_drawing" id="control_frequency_drawing">
|
||||
<?= ws_options($lookup['control_frequency_drawing'] ?? [], $worksheet['control_frequency_drawing'] ?? '', $lookupDefault['control_frequency_drawing'] ?? '') ?>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-semibold">Controlli - Dima</label>
|
||||
<select class="form-select" name="control_frequency_jig" id="control_frequency_jig">
|
||||
<?= ws_options($lookup['control_frequency_jig'] ?? [], $worksheet['control_frequency_jig'] ?? '', $lookupDefault['control_frequency_jig'] ?? '') ?>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-semibold">Modalità dima</label>
|
||||
<select class="form-select" name="control_mode_jig" id="control_mode_jig">
|
||||
<?= ws_options($lookup['control_mode_jig'] ?? [], $worksheet['control_mode_jig'] ?? '', $lookupDefault['control_mode_jig'] ?? '') ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-semibold">Codice confezione</label>
|
||||
<select class="form-select" name="requested_package_code" id="requested_package_code">
|
||||
<?= packaging_options($packagingLookup['PACKAGING_TYPE'] ?? [], $worksheet['requested_package_code'] ?? '') ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-semibold">Metri per confezione</label>
|
||||
<input type="number" class="form-control" name="meters_per_package"
|
||||
value="<?= $worksheet ? h($worksheet['meters_per_package']) : '' ?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-semibold">Tolleranza metri/confezione</label>
|
||||
<input type="text" class="form-control" name="meters_per_package_tolerance"
|
||||
value="<?= $worksheet ? h($worksheet['meters_per_package_tolerance']) : '' ?>"
|
||||
placeholder="es. +/- 4m">
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<label class="form-label fw-semibold">Note metri/confezione</label>
|
||||
<input type="text" class="form-control" name="meters_per_package_notes"
|
||||
value="<?= $worksheet ? h($worksheet['meters_per_package_notes']) : '' ?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-semibold">Scatola (tipo)</label>
|
||||
<select class="form-select" name="box_type" id="box_type">
|
||||
<?= ws_options($lookup['box_type'] ?? [], $worksheet['box_type'] ?? '', $lookupDefault['box_type'] ?? '') ?>
|
||||
<?= packaging_options($packagingLookup['BOX'] ?? [], $worksheet['box_type'] ?? '') ?>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-semibold">N° conf./pezzi per scatola</label>
|
||||
<input type="number" class="form-control" name="packages_or_pieces_per_box"
|
||||
value="<?= $worksheet ? h($worksheet['packages_or_pieces_per_box']) : '' ?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-semibold">Metri per scatola</label>
|
||||
<input type="number" class="form-control" name="meters_per_box"
|
||||
value="<?= $worksheet ? h($worksheet['meters_per_box']) : '' ?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-semibold">Bancale (tipo)</label>
|
||||
<select class="form-select" name="pallet_type" id="pallet_type">
|
||||
<?= ws_options($lookup['pallet_type'] ?? [], $worksheet['pallet_type'] ?? '', $lookupDefault['pallet_type'] ?? '') ?>
|
||||
<?= packaging_options($packagingLookup['PALLET'] ?? [], $worksheet['pallet_type'] ?? '') ?>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
@ -612,16 +670,19 @@ $isEdit = ($worksheet_id > 0);
|
||||
<input type="number" step="0.01" class="form-control" name="speed_expected_kg_h"
|
||||
value="<?= $worksheet ? h($worksheet['speed_expected_kg_h']) : '' ?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-semibold">Vel. effettiva (kg/h)</label>
|
||||
<input type="number" step="0.01" class="form-control" name="speed_actual_kg_h"
|
||||
value="<?= $worksheet ? h($worksheet['speed_actual_kg_h']) : '' ?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-semibold">Vel. prevista (m/h)</label>
|
||||
<input type="number" step="0.01" class="form-control" name="speed_expected_m_h"
|
||||
value="<?= $worksheet ? h($worksheet['speed_expected_m_h']) : '' ?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-semibold">Vel. effettiva (m/h)</label>
|
||||
<input type="number" step="0.01" class="form-control" name="speed_actual_m_h"
|
||||
@ -645,7 +706,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
|
||||
<hr class="my-4">
|
||||
|
||||
<!-- MIX ROWS TABLE -->
|
||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
||||
<div class="section-title">Mescole associate al foglio</div>
|
||||
<div class="small-hint">Usa “Aggiungi Mescola” per inserire una o più righe</div>
|
||||
@ -661,8 +721,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
<th>Densità</th>
|
||||
<th>Durezza</th>
|
||||
<th>Lubr.</th>
|
||||
<th>Confez.</th>
|
||||
<th>m/conf.</th>
|
||||
<th>Azioni</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -680,8 +738,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
<td><?= h($r['required_density'] ?? '-') ?></td>
|
||||
<td><?= h($r['required_hardness_shore_a'] ?? '-') ?></td>
|
||||
<td><?= h($r['lubrication_type'] ?? '-') ?></td>
|
||||
<td><?= h($r['requested_package_code'] ?? '-') ?></td>
|
||||
<td><?= h($r['meters_per_package'] ?? '-') ?></td>
|
||||
<td class="text-nowrap">
|
||||
<button class="btn btn-sm btn-outline-primary edit-mix"
|
||||
data-row='<?= h(json_encode($r, JSON_UNESCAPED_UNICODE)) ?>'>
|
||||
@ -735,7 +791,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
|
||||
<input type="hidden" name="mix_position" id="mix_position" value="">
|
||||
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-semibold">Peso metro mescola (g/m)</label>
|
||||
<input type="number" step="0.01" class="form-control" name="mix_weight_g_m" id="mix_weight_g_m">
|
||||
@ -756,7 +811,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
<select class="form-select" name="lubrication_type" id="lubrication_type">
|
||||
<?= ws_options($lookup['lubrication_type'] ?? [], '', $lookupDefault['lubrication_type'] ?? '') ?>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-8">
|
||||
@ -764,29 +818,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
<input type="text" class="form-control" name="lubrication_notes" id="lubrication_notes">
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-semibold">Codice confezione</label>
|
||||
<select class="form-select" name="requested_package_code" id="requested_package_code">
|
||||
<?= ws_options($lookup['requested_package_code'] ?? [], '', $lookupDefault['requested_package_code'] ?? '') ?>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-semibold">Metri per confezione</label>
|
||||
<input type="number" class="form-control" name="meters_per_package" id="meters_per_package">
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-semibold">Tolleranza metri/confezione</label>
|
||||
<input type="text" class="form-control" name="meters_per_package_tolerance" id="meters_per_package_tolerance" placeholder="es. +/- 4m">
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<label class="form-label fw-semibold">Note metri/confezione</label>
|
||||
<input type="text" class="form-control" name="meters_per_package_notes" id="meters_per_package_notes">
|
||||
</div>
|
||||
|
||||
<div class="col-12 text-center mt-2">
|
||||
<button type="submit" class="btn btn-add">💾 Salva Mescola</button>
|
||||
</div>
|
||||
@ -801,7 +832,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
const wsIdInput = $('#wsId');
|
||||
const btnAddMix = $('#btnAddMix');
|
||||
|
||||
@ -826,7 +856,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function enableMixButtonIfSaved() {
|
||||
const id = parseInt(wsIdInput.val() || '0', 10);
|
||||
if (id > 0) {
|
||||
@ -864,8 +893,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
})
|
||||
.then(async (r) => {
|
||||
const text = await r.text();
|
||||
|
||||
// Debug: if server returns warnings/HTML, you'll see it in console
|
||||
try {
|
||||
return JSON.parse(text);
|
||||
} catch (err) {
|
||||
@ -886,13 +913,11 @@ $isEdit = ($worksheet_id > 0);
|
||||
wsIdInput.val(data.id);
|
||||
enableMixButtonIfSaved();
|
||||
|
||||
// If new, update URL to edit mode
|
||||
if (!window.location.search.includes('id=')) {
|
||||
const newUrl = 'manage-worksheet.php?id=' + data.id;
|
||||
window.history.replaceState({}, '', newUrl);
|
||||
}
|
||||
|
||||
// ✅ What you want: confirm + stay on page + open modal if user wants
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Testata salvata',
|
||||
@ -916,7 +941,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// Prepare modal for add
|
||||
$('#mixModal').on('show.bs.modal', function() {
|
||||
const wsId = parseInt(wsIdInput.val() || '0', 10);
|
||||
@ -929,12 +953,12 @@ $isEdit = ($worksheet_id > 0);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Reset for add by default
|
||||
$('#mixModalTitle').text('Aggiungi Mescola');
|
||||
$('#mixForm')[0].reset();
|
||||
$('#mixRowId').val('0');
|
||||
$('#mixWorksheetId').val(wsId);
|
||||
$('#idmescola').prop('disabled', false);
|
||||
$('#idmescola').prop('disabled', false).val('').trigger('change');
|
||||
$('#lubrication_type').val('');
|
||||
});
|
||||
|
||||
// Edit mix row
|
||||
@ -942,32 +966,21 @@ $isEdit = ($worksheet_id > 0);
|
||||
let row = $(this).attr('data-row');
|
||||
row = JSON.parse(row);
|
||||
|
||||
// Titolo modale
|
||||
$('#mixModalTitle').text('Modifica Mescola');
|
||||
|
||||
// NON resettare in "add"
|
||||
$('#mixForm')[0].reset();
|
||||
|
||||
// Set id riga e worksheet
|
||||
$('#mixRowId').val(row.id);
|
||||
$('#mixWorksheetId').val(row.worksheet_id);
|
||||
|
||||
// Mescola (se usi select2 devi triggerare change)
|
||||
$('#idmescola').prop('disabled', false);
|
||||
$('#idmescola').val(row.idmescola).trigger('change');
|
||||
|
||||
// Campi
|
||||
$('#mix_weight_g_m').val(row.mix_weight_g_m ?? '');
|
||||
$('#required_density').val(row.required_density ?? '');
|
||||
$('#required_hardness_shore_a').val(row.required_hardness_shore_a ?? '');
|
||||
$('#lubrication_type').val(row.lubrication_type ?? '');
|
||||
$('#lubrication_notes').val(row.lubrication_notes ?? '');
|
||||
$('#requested_package_code').val(row.requested_package_code ?? '');
|
||||
$('#meters_per_package').val(row.meters_per_package ?? '');
|
||||
$('#meters_per_package_tolerance').val(row.meters_per_package_tolerance ?? '');
|
||||
$('#meters_per_package_notes').val(row.meters_per_package_notes ?? '');
|
||||
|
||||
// Apri modale
|
||||
const modal = new bootstrap.Modal(document.getElementById('mixModal'));
|
||||
modal.show();
|
||||
});
|
||||
@ -988,11 +1001,10 @@ $isEdit = ($worksheet_id > 0);
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Salvata!',
|
||||
timer: 800
|
||||
})
|
||||
.then(() => location.reload());
|
||||
icon: 'success',
|
||||
title: 'Salvata!',
|
||||
timer: 800
|
||||
}).then(() => location.reload());
|
||||
} else {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
@ -1029,11 +1041,10 @@ $isEdit = ($worksheet_id > 0);
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Eliminata!',
|
||||
timer: 800
|
||||
})
|
||||
.then(() => location.reload());
|
||||
icon: 'success',
|
||||
title: 'Eliminata!',
|
||||
timer: 800
|
||||
}).then(() => location.reload());
|
||||
} else {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
@ -1044,7 +1055,6 @@ $isEdit = ($worksheet_id > 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user