fixed matrici with db cron

This commit is contained in:
Claudio 2025-10-07 09:41:29 +02:00
parent 12c6cc5f95
commit 15b6f38e8b
3 changed files with 177 additions and 31 deletions

View File

@ -0,0 +1,59 @@
<?php
require_once dirname(__DIR__, 2) . '/vendor/autoload.php'; // Risale a root/vendor/
use Dotenv\Dotenv;
// Set JSON header
header('Content-Type: application/json');
// Debug: Log the path where we expect the .env file
$envPath = dirname(__DIR__, 2);
file_put_contents(__DIR__ . '/debug_log.txt', date('Y-m-d H:i:s') . ' - Expected .env path: ' . $envPath . PHP_EOL, FILE_APPEND);
// Carica il file .env dalla root del progetto
try {
$dotenv = Dotenv::createImmutable($envPath);
$dotenv->load();
} catch (Exception $e) {
file_put_contents(__DIR__ . '/error_log.txt', date('Y-m-d H:i:s') . ' - Errore caricamento .env: ' . $e->getMessage() . PHP_EOL, FILE_APPEND);
echo json_encode(['success' => false, 'message' => 'Errore caricamento configurazione: ' . $e->getMessage()]);
exit(1);
}
// Recupera le variabili d'ambiente
$dbHost = $_ENV['DB_HOST'];
$dbName = $_ENV['DB_DATABASE'];
$dbUser = $_ENV['DB_USERNAME'];
$dbPass = $_ENV['DB_PASSWORD'];
$dbPrefix = $_ENV['DB_PREFIX'];
// Debug: Log database connection details (excluding password)
file_put_contents(__DIR__ . '/debug_log.txt', date('Y-m-d H:i:s') . " - DB Connection: host=$dbHost, dbname=$dbName, user=$dbUser, prefix=$dbPrefix" . PHP_EOL, FILE_APPEND);
// Connessione al database MySQL
try {
$pdo = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4", $dbUser, $dbPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
file_put_contents(__DIR__ . '/error_log.txt', date('Y-m-d H:i:s') . ' - Errore connessione DB: ' . $e->getMessage() . PHP_EOL, FILE_APPEND);
echo json_encode(['success' => false, 'message' => 'Errore connessione al database: ' . $e->getMessage()]);
exit(1);
}
try {
// Query to fetch matrices, excluding those starting with '*' and sorting by NomeMatrice
$query = "SELECT IdMatrice, NomeMatrice FROM {$dbPrefix}matrici WHERE NomeMatrice NOT LIKE '*%' ORDER BY NomeMatrice ASC";
$stmt = $pdo->prepare($query);
$stmt->execute();
$matrici = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Debug: Log the number of matrices retrieved
file_put_contents(__DIR__ . '/debug_log.txt', date('Y-m-d H:i:s') . ' - Retrieved ' . count($matrici) . ' matrices from database' . PHP_EOL, FILE_APPEND);
// Return JSON response
echo json_encode(['success' => true, 'value' => $matrici]);
} catch (PDOException $e) {
// Log error and return error response
file_put_contents(__DIR__ . '/error_log.txt', date('Y-m-d H:i:s') . ' - Errore nel recupero delle matrici: ' . $e->getMessage() . PHP_EOL, FILE_APPEND);
echo json_encode(['success' => false, 'message' => 'Errore nel recupero delle matrici: ' . $e->getMessage()]);
exit(1);
}

View File

@ -1183,9 +1183,13 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
</script>
<script>
document.addEventListener("DOMContentLoaded", function() {
// Lazy loading per il modal delle parti
$(document).on('click', '.parts-btn', function() {
const iddatadb = $(this).data('iddatadb');
const iddatadb = $(this).data('iddatadb') || null;
const idquotations = $(this).data('idquotations') || null;
const rowIndex = $(this).data('row');
const importRef = $("table tbody tr").eq(rowIndex).find("td").eq(1).text();
const description = $("table tbody tr").eq(rowIndex).find("td").eq(2).text() || "Sconosciuto";
$.ajax({
url: 'modal_parts.php',
method: 'GET',
@ -1193,25 +1197,65 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
iddatadb: iddatadb
},
success: function(response) {
// Inserisci il modale nel container
$('#partsModalContainer').html(response);
$('#partsModal').modal('show');
// Carica i dati delle parti, se necessario
if (typeof loadParts === 'function') {
loadParts(iddatadb);
// Verifica che il modale esista
const modalElement = document.getElementById('partsModal');
if (!modalElement) {
console.error('Elemento modale non trovato: #partsModal');
const errorMsg = $('<div class="alert alert-danger temp-alert" role="alert">Errore: Modale non trovato.</div>');
$("body").prepend(errorMsg);
setTimeout(() => errorMsg.fadeOut(500, function() {
$(this).remove();
}), 5000);
return;
}
// Imposta i dati del modale
$("#trfHeader").text(`${iddatadb || idquotations} - ${importRef} - ${description}`);
$("#partsModal").data("iddatadb", iddatadb).data("idquotations", idquotations);
// Inizializza il modale con l'API nativa di Bootstrap
let modal = bootstrap.Modal.getInstance(modalElement);
if (!modal) {
modal = new bootstrap.Modal(modalElement, {
backdrop: true,
keyboard: true,
focus: true
});
}
modal.show();
// Carica i dati delle parti e delle foto
if (typeof loadParts === 'function') {
loadParts(iddatadb, idquotations);
}
// Gestisci il backdrop
$('.modal-backdrop').remove(); // Rimuovi backdrop precedenti
$('body').addClass('modal-open').append('<div class="modal-backdrop fade show"></div>');
},
error: function() {
alert('Errore nel caricamento del modal delle parti.');
error: function(xhr, status, error) {
console.error('Errore nel caricamento del modale:', error);
const errorMsg = $('<div class="alert alert-danger temp-alert" role="alert">Errore nel caricamento del modale: ' + error + '</div>');
$("body").prepend(errorMsg);
setTimeout(() => errorMsg.fadeOut(500, function() {
$(this).remove();
}), 5000);
}
});
});
// Pulizia del DOM quando il modal delle parti viene chiuso
// Pulizia completa alla chiusura del modale
$(document).on('hidden.bs.modal', '#partsModal', function() {
const modalElement = document.getElementById('partsModal');
if (modalElement) {
const modal = bootstrap.Modal.getInstance(modalElement);
if (modal) {
modal.dispose();
}
}
$('#partsModalContainer').empty();
$('.modal-backdrop').remove();
$('body').removeClass('modal-open').css('padding-right', '');
$('.overlay.toggle-icon').css('display', 'none');
});
});
</script>

View File

@ -143,7 +143,7 @@ $(document).ready(function () {
if (iddatadb) {
if (matrici.length === 0) {
$.ajax({
url: "get_matrice.php",
url: "get_matrici_db.php",
method: "GET",
dataType: "json",
success: function (data) {
@ -157,6 +157,19 @@ $(document).ready(function () {
initializeGlobalSelect2();
loadPhoto(iddatadb, idquotations);
loadExistingParts(iddatadb, idquotations);
const errorMsg = $(
'<div class="alert alert-danger temp-alert" role="alert">Errore nel caricamento delle matrici: ' +
error +
" (" +
xhr.status +
")</div>",
);
$("#partsModal .modal-body").prepend(errorMsg);
setTimeout(function () {
errorMsg.fadeOut(500, function () {
$(this).remove();
});
}, 5000);
},
});
} else {
@ -169,19 +182,40 @@ $(document).ready(function () {
loadExistingParts(iddatadb, idquotations);
}
const modal = new bootstrap.Modal(
document.getElementById("partsModal"),
);
const modalElement = document.getElementById("partsModal");
if (modalElement) {
// Verifica se il modale è già stato inizializzato
let modal = bootstrap.Modal.getInstance(modalElement);
if (!modal) {
modal = new bootstrap.Modal(modalElement, {
backdrop: true,
keyboard: true,
focus: true,
});
}
modal.show();
} else {
console.error("Elemento modale non trovato: #partsModal");
const errorMsg = $(
'<div class="alert alert-danger temp-alert" role="alert">Errore: Modale non trovato.</div>',
);
$("body").prepend(errorMsg);
setTimeout(function () {
errorMsg.fadeOut(500, function () {
$(this).remove();
});
}, 5000);
}
});
$("#partsModal .close-btn, #partsModal").on("click", function (event) {
if (event.target === this) {
const modal = bootstrap.Modal.getInstance(
document.getElementById("partsModal"),
);
if (event.target === this || $(event.target).hasClass("close-btn")) {
const modalElement = document.getElementById("partsModal");
const modal = bootstrap.Modal.getInstance(modalElement);
if (modal) {
modal.hide();
}
}
});
$("#partsModal").on("hide.bs.modal", function (e) {
@ -194,7 +228,7 @@ $(document).ready(function () {
});
$("#partsModal").on("hidden.bs.modal", function () {
// Reset global state to initial values
// Resetta lo stato
photoData = {
naturalWidth: 0,
naturalHeight: 0,
@ -208,20 +242,29 @@ $(document).ready(function () {
selectedPartNumber = null;
unsavedChanges = false;
if (fabricCanvas) {
fabricCanvas.off(); // Rimuove tutti gli eventi
fabricCanvas.off();
fabricCanvas.dispose();
fabricCanvas = null;
}
descriptionTextbox = null;
markerObjects = {};
matrici = [];
// Clear UI elements
$("#photoSelectorContainer").empty().hide();
$("#samplePhoto").attr("src", "");
$("#partsTableBody").empty();
$("#global-matrice").empty(); // Pulisci select globale se presente
// Remove any temporary messages
$("#global-matrice").empty();
$(".temp-alert").remove();
// Rimuovi manualmente il backdrop e ripristina il body
const modalElement = document.getElementById("partsModal");
const modal = bootstrap.Modal.getInstance(modalElement);
if (modal) {
modal.dispose(); // Distrugge l'istanza del modale
}
$(".modal-backdrop").remove();
$("body").removeClass("modal-open");
$("body").css("padding-right", "");
$(":focus").blur();
});
// ===================
@ -792,7 +835,7 @@ $(document).ready(function () {
const options = matrici.map(function (matrice) {
return {
id: matrice.IdMatrice,
text: matrice.NomeMatriceTraduzione,
text: matrice.NomeMatrice, // Updated to use NomeMatrice
};
});
@ -817,7 +860,7 @@ $(document).ready(function () {
const matrice = matrici.find((m) => m.IdMatrice == idmatrice);
if (matrice) {
const option = new Option(
matrice.NomeMatriceTraduzione,
matrice.NomeMatrice, // Updated to use NomeMatrice
matrice.IdMatrice,
true,
true,
@ -843,7 +886,7 @@ $(document).ready(function () {
const idquotations = $("#partsModal").data("idquotations");
const endpoint = idquotations
? "save_matrice_quotation.php"
: "save_matrice.php"; // Assumendo esista per quotations, altrimenti adatta
: "save_matrice.php";
const data = idquotations
? { idquotations: idquotations }
: { iddatadb: iddatadb };
@ -915,7 +958,7 @@ $(document).ready(function () {
const options = matrici.map(function (matrice) {
return {
id: matrice.IdMatrice,
text: matrice.NomeMatriceTraduzione,
text: matrice.NomeMatrice, // Updated to use NomeMatrice
};
});