Campione custom fields (Tested Component + parts), per-part ConsegnaRichiesta with validation

This commit is contained in:
2026-03-20 23:31:31 +03:00
parent 5e59ae2162
commit 755f6812d4
2 changed files with 98 additions and 18 deletions
+43 -1
View File
@@ -59,6 +59,35 @@ $validators[] = function (int $iddatadb, array $ctx): array {
return [];
};
// 2. ConsegnaRichiesta must be filled and >= today
$validators[] = function (int $iddatadb, array $ctx): array {
$record = $ctx['record'] ?? null;
if (!$record) {
return [];
}
$consegna = $record['consegna_richiesta'] ?? null;
if (empty($consegna)) {
return [[
'field' => 'ConsegnaRichiesta',
'message' => 'ConsegnaRichiesta è obbligatorio.',
]];
}
$consegnaDate = DateTime::createFromFormat('Y-m-d', $consegna) ?: DateTime::createFromFormat('Y-m-d H:i:s', $consegna);
$today = new DateTime('today');
if ($consegnaDate && $consegnaDate < $today) {
return [[
'field' => 'ConsegnaRichiesta',
'message' => 'ConsegnaRichiesta deve essere uguale o superiore alla data odierna (' . $today->format('Y-m-d') . ').',
]];
}
return [];
};
// ── Main ────────────────────────────────────────────────────────────────────
try {
@@ -75,6 +104,18 @@ try {
$iddatadbList = array_column($rows, 'iddatadb');
$placeholders = implode(',', array_fill(0, count($iddatadbList), '?'));
// Records (datadb) for fixed field validation
$stmt = $pdo->prepare("
SELECT iddatadb, consegna_richiesta
FROM datadb
WHERE iddatadb IN ($placeholders)
");
$stmt->execute($iddatadbList);
$recordsInfo = [];
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $r) {
$recordsInfo[(int)$r['iddatadb']] = $r;
}
// Parts (full rows, so validators can report which parts have issues)
$stmt = $pdo->prepare("
SELECT iddatadb, part_number, part_description, idmatrice
@@ -97,7 +138,8 @@ try {
// Build context for validators
$ctx = [
'parts' => $partsInfo[$iddatadb] ?? [],
'record' => $recordsInfo[$iddatadb] ?? null,
'parts' => $partsInfo[$iddatadb] ?? [],
];
$errors = [];