From b51936f7845b0bc25e07c7a96cfd551fd9b6e0c5 Mon Sep 17 00:00:00 2001 From: Claudio Date: Tue, 7 Oct 2025 20:56:57 +0200 Subject: [PATCH] various fixing modal --- public/userarea/annotationsModal.js | 1473 +++++++++++++++++ .../userarea/customfield_values_response.json | 2 +- public/userarea/import_edit2.php | 33 +- public/userarea/modal_annotations.php | 219 +++ public/userarea/modal_partsTable.php | 155 ++ public/userarea/partsTable.js | 1017 ++++++++++++ public/userarea/save_matrice.php | 39 + public/userarea/save_parts.php | 22 +- 8 files changed, 2939 insertions(+), 21 deletions(-) create mode 100644 public/userarea/annotationsModal.js create mode 100644 public/userarea/modal_annotations.php create mode 100644 public/userarea/modal_partsTable.php create mode 100644 public/userarea/partsTable.js create mode 100644 public/userarea/save_matrice.php diff --git a/public/userarea/annotationsModal.js b/public/userarea/annotationsModal.js new file mode 100644 index 0000000..05e4dc3 --- /dev/null +++ b/public/userarea/annotationsModal.js @@ -0,0 +1,1473 @@ +$(document).ready(function () { + // =================== + // GLOBAL STATE + // =================== + let photoData = { + naturalWidth: 0, + naturalHeight: 0, + displayWidth: 0, + displayHeight: 0, + scale: 1, + }; + + let photoAnnotations = {}; + let partColors = {}; + let selectedPartNumber = null; + let unsavedChanges = false; + let fabricCanvas = null; + let descriptionTextbox = null; + let markerObjects = {}; + let partsListData = []; + + // =================== + // MODAL INITIALIZATION + // =================== + window.initAnnotationsModal = function (iddatadb, idquotations, trfHeader) { + console.log("initAnnotationsModal chiamato con:", { + iddatadb, + idquotations, + trfHeader, + }); + + if (!iddatadb && !idquotations) { + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + $("#trfHeaderAnnotations").text(trfHeader || "N/D"); + $("#annotationsModal") + .data("iddatadb", iddatadb || null) + .data("idquotations", idquotations || null); + + loadPhoto(iddatadb, idquotations); + loadExistingParts(iddatadb, idquotations); + + const modalElement = document.getElementById("annotationsModal"); + if (!modalElement) { + console.error("Elemento #annotationsModal non trovato nel DOM."); + alert( + "Errore: Il modale delle annotazioni non è presente nel DOM.", + ); + return; + } + let modal = bootstrap.Modal.getInstance(modalElement); + if (!modal) { + modal = new bootstrap.Modal(modalElement, { + backdrop: true, + keyboard: true, + focus: true, + }); + } + modal.show(); + + // Debug: Verifica presenza elementi DOM + console.log( + "Presenza #partsListAnnotations:", + $("#partsListAnnotations").length, + ); + console.log( + "Presenza #showMixPartsAnnotations:", + $("#showMixPartsAnnotations").length, + ); + console.log( + "Presenza #addDescriptionsBtnAnnotations:", + $("#addDescriptionsBtnAnnotations").length, + ); + console.log( + "Presenza #removeAnnotationsBtnAnnotations:", + $("#removeAnnotationsBtnAnnotations").length, + ); + console.log( + "Presenza #downloadPhotoBtnAnnotations:", + $("#downloadPhotoBtnAnnotations").length, + ); + console.log( + "Presenza #backToPartsBtnAnnotations:", + $("#backToPartsBtnAnnotations").length, + ); + console.log( + "Presenza #overlayCanvasAnnotations:", + $("#overlayCanvasAnnotations").length, + ); + }; + + $("#annotationsModal").on("hide.bs.modal", function (e) { + if ( + unsavedChanges && + !confirm("Hai modifiche non salvate. Vuoi davvero uscire?") + ) { + e.preventDefault(); + } + }); + + $("#annotationsModal").on("hidden.bs.modal", function () { + photoData = { + naturalWidth: 0, + naturalHeight: 0, + displayWidth: 0, + displayHeight: 0, + scale: 1, + }; + photoAnnotations = {}; + partColors = {}; + selectedPartNumber = null; + unsavedChanges = false; + partsListData = []; + if (fabricCanvas) { + fabricCanvas.off(); + fabricCanvas.dispose(); + fabricCanvas = null; + } + descriptionTextbox = null; + markerObjects = {}; + $("#photoSelectorContainerAnnotations").empty().hide(); + $("#samplePhotoAnnotations").attr("src", ""); + $("#partsListAnnotations").empty(); + $(".temp-alert").remove(); + + const modalElement = document.getElementById("annotationsModal"); + const modal = bootstrap.Modal.getInstance(modalElement); + if (modal) { + modal.dispose(); + } + $(".modal-backdrop").remove(); + $("body").removeClass("modal-open"); + $("body").css("padding-right", ""); + $(":focus").blur(); + }); + + // =================== + // PHOTO LOADERS + // =================== + function loadPhoto(iddatadb, idquotations) { + const currentPhoto = $("#samplePhotoAnnotations").attr("src"); + const endpoint = idquotations + ? "load_photo_quotation.php" + : "load_photo.php"; + const data = idquotations + ? { idquotations: idquotations } + : { iddatadb: iddatadb }; + $.ajax({ + url: endpoint, + method: "GET", + data: data, + success: function (response) { + console.log("Risposta da load_photo:", response); + if (response.success) { + if (response.photos && response.photos.length > 1) { + showPhotoSelector(response.photos, currentPhoto); + } else if ( + response.photos && + response.photos.length === 1 + ) { + loadSinglePhoto(response.photos[0]); + } else { + $("#samplePhotoAnnotations").attr("src", ""); + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + } + } else { + const errorMsg = $( + '", + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + } + }, + error: function (xhr, status, error) { + console.error("Errore AJAX in loadPhoto:", { + status, + error, + responseText: xhr.responseText, + }); + const errorMsg = $( + '", + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + }, + }); + } + + function showPhotoSelector(photos, selected = null) { + const selectorContainer = $("#photoSelectorContainerAnnotations"); + selectorContainer.empty().show(); + const selector = $( + '', + ); + photos.forEach((photo, index) => { + const photoName = photo.split("/").pop(); + const option = $("") + .val(photo) + .text(`Photo ${index + 1} - ${photoName}`); + selector.append(option); + }); + selector.on("change", function () { + loadSinglePhoto($(this).val()); + }); + selectorContainer.append(selector); + const photoToSelect = + selected && photos.includes(selected) ? selected : photos[0]; + if (photoToSelect) { + selector.val(photoToSelect); + loadSinglePhoto(photoToSelect); + } + } + + function loadSinglePhoto(photoPath) { + const img = $("#samplePhotoAnnotations"); + img.off("load").attr("src", photoPath); + img.on("load", function () { + console.log("Foto caricata:", photoPath); + const canvas = document.getElementById("photoCanvasAnnotations"); + const ctx = canvas.getContext("2d"); + const naturalWidth = img[0].naturalWidth; + const naturalHeight = img[0].naturalHeight; + const parent = $(canvas).parent(); + const maxW = parent.width(); + const maxH = parent.height(); + const scale = Math.min(maxW / naturalWidth, maxH / naturalHeight); + + photoData = { + naturalWidth, + naturalHeight, + displayWidth: Math.max(1, Math.round(naturalWidth * scale)), + displayHeight: Math.max(1, Math.round(naturalHeight * scale)), + scale, + }; + + canvas.width = naturalWidth; + canvas.height = naturalHeight; + canvas.style.width = `${photoData.displayWidth}px`; + canvas.style.height = `${photoData.displayHeight}px`; + + ctx.clearRect(0, 0, naturalWidth, naturalHeight); + ctx.drawImage(img[0], 0, 0, naturalWidth, naturalHeight); + + if (fabricCanvas) { + fabricCanvas.off(); + fabricCanvas.dispose(); + fabricCanvas = null; + } + + const overlayCanvas = document.getElementById( + "overlayCanvasAnnotations", + ); + const canvasContainer = overlayCanvas.parentElement; + const newOverlayCanvas = document.createElement("canvas"); + newOverlayCanvas.id = "overlayCanvasAnnotations"; + newOverlayCanvas.width = photoData.displayWidth; + newOverlayCanvas.height = photoData.displayHeight; + newOverlayCanvas.style.width = `${photoData.displayWidth}px`; + newOverlayCanvas.style.height = `${photoData.displayHeight}px`; + newOverlayCanvas.style.position = "absolute"; + newOverlayCanvas.style.top = "0"; + newOverlayCanvas.style.left = "0"; + newOverlayCanvas.style.zIndex = "1000"; + + canvasContainer.removeChild(overlayCanvas); + canvasContainer.appendChild(newOverlayCanvas); + + setTimeout(() => { + fabricCanvas = new fabric.Canvas("overlayCanvasAnnotations", { + selection: true, + preserveObjectStacking: true, + width: photoData.displayWidth, + height: photoData.displayHeight, + }); + + fabricCanvas.setDimensions({ + width: photoData.displayWidth, + height: photoData.displayHeight, + }); + + fabricCanvas.on("mouse:down", function (options) { + console.log( + "Evento mouse:down su canvas, selectedPartNumber:", + selectedPartNumber, + ); + if (selectedPartNumber === null) { + console.log( + "Nessuna parte selezionata, ignoro il click.", + ); + return; + } + if (options.target) { + console.log("Click su un oggetto esistente, ignoro."); + return; + } + const pointer = fabricCanvas.getPointer(options.e); + const x = pointer.x / photoData.scale; + const y = pointer.y / photoData.scale; + const currentPhoto = $("#samplePhotoAnnotations").attr( + "src", + ); + + if (!photoAnnotations[currentPhoto]) { + photoAnnotations[currentPhoto] = { + markers: [], + hasDescriptions: false, + descriptionPosition: { x: 10, y: 10 }, + descriptionSize: { + width: photoData.displayWidth * 0.3, + height: photoData.displayHeight * 0.3, + }, + }; + } + + const partColor = + partColors[selectedPartNumber] || "#ff0000"; + const existingMarker = photoAnnotations[ + currentPhoto + ].markers.find((m) => m.partNumber == selectedPartNumber); + + if (existingMarker) { + existingMarker.x = x; + existingMarker.y = y; + existingMarker.color = partColor; + } else { + photoAnnotations[currentPhoto].markers.push({ + partNumber: selectedPartNumber, + x, + y, + color: partColor, + }); + } + + console.log("Marker aggiunto/spostato:", { + partNumber: selectedPartNumber, + x, + y, + color: partColor, + }); + updateMarkers(); + markUnsaved(); + selectedPartNumber = null; + $("#partsListAnnotations li").removeClass("active"); + }); + + fabricCanvas.upperCanvasEl.focus(); + fabricCanvas.renderAll(); + + updateMarkers(); + updateDescriptions(); + }, 10); + }); + } + + // =================== + // DOWNLOAD PHOTO + // =================== + $(document) + .off("click.downloadPhoto", "#downloadPhotoBtnAnnotations") + .on( + "click.downloadPhoto", + "#downloadPhotoBtnAnnotations", + function (e) { + e.preventDefault(); + e.stopPropagation(); + console.log( + "Evento click su #downloadPhotoBtnAnnotations, ID elemento:", + $(this).attr("id"), + ); + if (!$("#downloadPhotoBtnAnnotations").length) { + console.error( + "Pulsante #downloadPhotoBtnAnnotations non trovato nel DOM.", + ); + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + const photoSrc = $("#samplePhotoAnnotations").attr("src"); + console.log("URL immagine per il download:", photoSrc); + if (!photoSrc) { + console.error("Nessuna foto caricata da scaricare."); + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + // Verifica se l'URL è valido + const img = new Image(); + img.src = photoSrc; + img.onload = function () { + const photoName = + photoSrc.split("/").pop() || "downloaded_photo.png"; + console.log("Nome file per il download:", photoName); + const link = document.createElement("a"); + link.href = photoSrc; + link.download = photoName; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + console.log("Download avviato per:", photoName); + }; + img.onerror = function () { + console.error( + "Errore: Impossibile caricare l'immagine per il download:", + photoSrc, + ); + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + }; + }, + ); + + // =================== + // BACK TO PARTS MODAL + // =================== + $(document) + .off("click.backToParts", "#backToPartsBtnAnnotations") + .on("click.backToParts", "#backToPartsBtnAnnotations", function (e) { + e.preventDefault(); + e.stopPropagation(); + console.log( + "Evento click su #backToPartsBtnAnnotations, ID elemento:", + $(this).attr("id"), + ); + if (!$("#backToPartsBtnAnnotations").length) { + console.error( + "Pulsante #backToPartsBtnAnnotations non trovato nel DOM.", + ); + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + // Controlla modifiche non salvate + if ( + unsavedChanges && + !confirm( + "Hai modifiche non salvate. Vuoi davvero tornare al modale delle parti?", + ) + ) { + console.log( + "Tornare al modale delle parti annullato a causa di modifiche non salvate.", + ); + return; + } + + // Chiudi annotationsModal + const annotationsModalElement = + document.getElementById("annotationsModal"); + const annotationsModal = bootstrap.Modal.getInstance( + annotationsModalElement, + ); + if (annotationsModal) { + annotationsModal.hide(); + } else { + console.error( + "Impossibile trovare l'istanza del modale #annotationsModal.", + ); + } + + // Apri partsModal + const iddatadb = $("#annotationsModal").data("iddatadb"); + const idquotations = $("#annotationsModal").data("idquotations"); + const trfHeader = $("#trfHeaderAnnotations").text(); + console.log("Apertura partsModal con:", { + iddatadb, + idquotations, + trfHeader, + }); + + const partsModalElement = document.getElementById("partsModal"); + if (!partsModalElement) { + console.error("Elemento #partsModal non trovato nel DOM."); + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + let partsModal = bootstrap.Modal.getInstance(partsModalElement); + if (!partsModal) { + partsModal = new bootstrap.Modal(partsModalElement, { + backdrop: true, + keyboard: true, + focus: true, + }); + } + + // Inizializza il modale delle parti + if (typeof window.initPartsModal === "function") { + window.initPartsModal(iddatadb, idquotations, trfHeader); + partsModal.show(); + console.log("partsModal aperto con successo."); + } else { + console.error("Funzione initPartsModal non definita."); + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + } + }); + + // =================== + // PARTS LIST + // =================== + function updatePartsList() { + console.log( + "updatePartsList chiamato con partsListData:", + partsListData, + ); + const showMixParts = $("#showMixPartsAnnotations").is(":checked"); + console.log("Stato showMixPartsAnnotations:", showMixParts); + const partsListElement = $("#partsListAnnotations"); + + if (!partsListElement.length) { + console.error( + "Elemento #partsListAnnotations non trovato nel DOM.", + ); + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + partsListElement.empty(); + const predefinedColors = [ + "#ff0000", // Rosso + "#0000ff", // Blu + "#00ff00", // Verde + "#ffff00", // Giallo + "#ff00ff", // Magenta + "#00ffff", // Ciano + "#800080", // Viola + "#ffa500", // Arancione + ]; + + partsListData.forEach((part) => { + const partNumber = part.part_number; + const partDescription = part.part_description; + const partColor = + partColors[partNumber] || + (partDescription.toLowerCase().startsWith("mix") + ? "#0000ff" + : "#ff0000"); + if ( + partNumber && + partDescription && + (showMixParts || + !partDescription.toLowerCase().startsWith("mix")) + ) { + const colorOptions = predefinedColors + .map( + (color) => + `
`, + ) + .join(""); + const listItem = ` +
  • + ${partNumber} - ${partDescription} +
    +
    + +
    +
  • `; + partsListElement.append(listItem); + } + }); + + console.log( + "Elementi aggiunti a #partsListAnnotations:", + partsListElement.find("li").length, + ); + console.log("HTML di #partsListAnnotations:", partsListElement.html()); + + // Associa evento di selezione all'intera riga + partsListElement + .off("click.partsList") + .on("click.partsList", ".list-group-item", function (e) { + e.stopPropagation(); + e.preventDefault(); + // Ignora il click se è sulla paletta dei colori + if ($(e.target).closest(".color-picker-container").length) { + console.log( + "Click sulla paletta dei colori, ignoro selezione parte.", + ); + return; + } + const $listItem = $(this); + selectedPartNumber = $listItem.data("part-number"); + $listItem.addClass("active").siblings().removeClass("active"); + console.log( + "Parte selezionata tramite riga:", + selectedPartNumber, + ); + }); + + // Associa eventi alla paletta dei colori + partsListElement + .off("click.selectedColor") + .on("click.selectedColor", ".selected-color", function (e) { + e.stopPropagation(); + e.preventDefault(); + const $picker = $(this).siblings(".color-picker"); + console.log( + "Cliccato .selected-color, mostro/nascondo paletta:", + $picker.is(":visible"), + ); + $(".color-picker").not($picker).hide(); + $picker.toggle(); + }); + + partsListElement + .off("click.colorOption") + .on("click.colorOption", ".color-option", function (e) { + e.stopPropagation(); + e.preventDefault(); + const $this = $(this); + const color = $this.data("color"); + const $listItem = $this.closest("li"); + const partNumber = $listItem.data("part-number"); + console.log( + "Cliccato .color-option, colore:", + color, + "per parte:", + partNumber, + ); + partColors[partNumber] = color; + $listItem + .find(".selected-color") + .css("background-color", color); + $this.closest(".color-picker").hide(); + updateMarkers(); + markUnsaved(); + }); + + $(document) + .off("click.colorPicker") + .on("click.colorPicker", function (e) { + if (!$(e.target).closest(".color-picker-container").length) { + console.log("Cliccato fuori, nascondo tutte le palette."); + $(".color-picker").hide(); + } + }); + } + + // Delegazione evento per il checkbox + $(document) + .off("change.showMix", "#showMixPartsAnnotations") + .on("change.showMix", "#showMixPartsAnnotations", function (e) { + e.preventDefault(); + e.stopPropagation(); + console.log( + "Evento change su #showMixPartsAnnotations, ID elemento:", + $(this).attr("id"), + ); + const isChecked = $(this).is(":checked"); + console.log( + "Checkbox #showMixPartsAnnotations cambiato:", + isChecked, + ); + if (!$("#showMixPartsAnnotations").length) { + console.error( + "Checkbox #showMixPartsAnnotations non trovato nel DOM.", + ); + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + updatePartsList(); + updateMarkers(); + if ( + photoAnnotations[$("#samplePhotoAnnotations").attr("src")] + ?.hasDescriptions + ) { + updateDescriptions(); + } + }); + + // =================== + // LOAD EXISTING PARTS + // =================== + function loadExistingParts(iddatadb, idquotations) { + console.log("loadExistingParts chiamato con:", { + iddatadb, + idquotations, + }); + if (!iddatadb && !idquotations) { + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + const endpoint = idquotations + ? "load_parts_quotation.php" + : "load_parts.php"; + const data = idquotations + ? { idquotations: idquotations } + : { iddatadb: iddatadb }; + $.ajax({ + url: endpoint, + method: "GET", + data: data, + success: function (response) { + console.log("Risposta da load_parts:", response); + partsListData = []; + if ( + response.success && + response.parts && + response.parts.length > 0 + ) { + partsListData = response.parts; + response.parts.forEach((part) => { + const defaultColor = part.part_description + .toLowerCase() + .startsWith("mix") + ? "#0000ff" + : "#ff0000"; + partColors[part.part_number] = defaultColor; + }); + updatePartsList(); + // Forza aggiornamento iniziale del checkbox + setTimeout(() => { + $("#showMixPartsAnnotations").trigger("change.showMix"); + }, 100); + } else { + const errorMsg = $( + '", + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + } + }, + error: function (xhr, status, error) { + console.error("Errore AJAX in loadExistingParts:", { + status, + error, + responseText: xhr.responseText, + }); + const errorMsg = $( + '", + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + }, + }); + } + + // =================== + // MARKERS & DESCRIPTIONS + // =================== + function updateMarkers() { + console.log( + "updateMarkers chiamato, markerObjects:", + Object.keys(markerObjects), + ); + for (let partNumber in markerObjects) { + fabricCanvas.remove(markerObjects[partNumber]); + delete markerObjects[partNumber]; + } + markerObjects = {}; + + const currentPhoto = $("#samplePhotoAnnotations").attr("src"); + const annotations = photoAnnotations[currentPhoto] || { + markers: [], + hasDescriptions: false, + descriptionPosition: { x: 10, y: 10 }, + descriptionSize: { + width: photoData.displayWidth * 0.3, + height: photoData.displayHeight * 0.3, + }, + }; + const showMixParts = $("#showMixPartsAnnotations").is(":checked"); + + annotations.markers.forEach((marker) => { + const part = partsListData.find( + (p) => p.part_number == marker.partNumber, + ); + const partDescription = part ? part.part_description : ""; + if ( + !showMixParts && + partDescription && + partDescription.toLowerCase().startsWith("mix") + ) { + console.log("Ignoro marker per parte Mix:", marker.partNumber); + return; + } + + const radius = 12; + const fontSize = 16; + const markerColor = + marker.color || partColors[marker.partNumber] || "#ff0000"; + + const circle = new fabric.Circle({ + radius: radius, + fill: markerColor, + stroke: markerColor, + strokeWidth: 1, + left: marker.x * photoData.scale, + top: marker.y * photoData.scale, + originX: "center", + originY: "center", + selectable: true, + hasControls: false, + lockScalingX: true, + lockScalingY: true, + lockRotation: true, + }); + + const text = new fabric.Text(marker.partNumber.toString(), { + fontFamily: "Arial", + fontSize: fontSize, + fontWeight: "bold", + fill: "#ffffff", + left: marker.x * photoData.scale, + top: marker.y * photoData.scale, + originX: "center", + originY: "middle", + selectable: true, + hasControls: false, + lockScalingX: true, + lockScalingY: true, + lockRotation: true, + }); + + const group = new fabric.Group([circle, text], { + left: marker.x * photoData.scale, + top: marker.y * photoData.scale, + originX: "center", + originY: "center", + selectable: true, + hasControls: false, + lockScalingX: true, + lockScalingY: true, + lockRotation: true, + }); + + group.on("moving", function () { + marker.x = this.left / photoData.scale; + marker.y = this.top / photoData.scale; + console.log("Marker spostato:", { + partNumber: marker.partNumber, + x: marker.x, + y: marker.y, + }); + markUnsaved(); + }); + + fabricCanvas.add(group); + markerObjects[marker.partNumber] = group; + }); + + fabricCanvas.renderAll(); + console.log( + "Canvas aggiornato, numero di marker:", + Object.keys(markerObjects).length, + ); + } + + function updateDescriptions() { + console.log("updateDescriptions chiamato"); + const currentPhoto = $("#samplePhotoAnnotations").attr("src"); + const annotations = photoAnnotations[currentPhoto] || { + markers: [], + hasDescriptions: false, + descriptionPosition: { x: 10, y: 10 }, + descriptionSize: { + width: photoData.displayWidth * 0.3, + height: photoData.displayHeight * 0.3, + }, + }; + const showMixParts = $("#showMixPartsAnnotations").is(":checked"); + + if (!annotations.hasDescriptions) { + if (descriptionTextbox) { + fabricCanvas.remove(descriptionTextbox); + descriptionTextbox = null; + fabricCanvas.renderAll(); + } + console.log( + "Nessuna descrizione attiva, rimuovo textbox se presente.", + ); + return; + } + + const partsList = partsListData + .filter( + (part) => + showMixParts || + !part.part_description.toLowerCase().startsWith("mix"), + ) + .map((part) => `${part.part_number} ${part.part_description}`); + + const text = partsList.join("\n"); + console.log("Testo descrizione generato:", text); + + if (descriptionTextbox) { + fabricCanvas.remove(descriptionTextbox); + descriptionTextbox = null; + } + + descriptionTextbox = new fabric.Textbox(text, { + left: annotations.descriptionPosition.x * photoData.scale, + top: annotations.descriptionPosition.y * photoData.scale, + width: annotations.descriptionSize.width, + scaleX: 1, + scaleY: 1, + backgroundColor: "transparent", + fontFamily: "Arial", + fontSize: 24, + fill: "#000000", + padding: 10, + editable: false, + selectable: true, + hasControls: true, + borderColor: "#ccc", + cornerColor: "#888", + cornerSize: 10, + transparentCorners: false, + lockRotation: true, + lockScalingFlip: true, + minScaleLimit: 0.1, + }); + + descriptionTextbox.on("scaling", function () { + fitFontToBox(this); + annotations.descriptionSize.width = this.width * this.scaleX; + annotations.descriptionSize.height = this.height * this.scaleY; + console.log( + "Descrizione ridimensionata:", + annotations.descriptionSize, + ); + markUnsaved(); + }); + + descriptionTextbox.on("moving", function () { + annotations.descriptionPosition.x = this.left / photoData.scale; + annotations.descriptionPosition.y = this.top / photoData.scale; + console.log( + "Descrizione spostata:", + annotations.descriptionPosition, + ); + markUnsaved(); + }); + + fabricCanvas.add(descriptionTextbox); + fitFontToBox(descriptionTextbox); + fabricCanvas.renderAll(); + console.log("Descrizione aggiunta al canvas:", text); + } + + function fitFontToBox(textbox) { + let fontSize = 24; + textbox.set("fontSize", fontSize); + textbox.setCoords(); + + while ( + (textbox.textLines.length * textbox.fontSize * 1.2 > + textbox.height * textbox.scaleY || + textbox._getTransformedDimensions().x > + textbox.width * textbox.scaleX) && + fontSize > 8 + ) { + fontSize -= 1; + textbox.set("fontSize", fontSize); + textbox.setCoords(); + } + + while ( + textbox.textLines.length * textbox.fontSize * 1.2 < + textbox.height * textbox.scaleY && + textbox._getTransformedDimensions().x < + textbox.width * textbox.scaleX && + fontSize < 32 + ) { + fontSize += 1; + textbox.set("fontSize", fontSize); + textbox.setCoords(); + } + } + + function clearCanvasMarkers(clearDescriptions = true) { + console.log( + "clearCanvasMarkers chiamato, clearDescriptions:", + clearDescriptions, + ); + const currentPhoto = $("#samplePhotoAnnotations").attr("src"); + if (clearDescriptions && photoAnnotations[currentPhoto]) { + photoAnnotations[currentPhoto].hasDescriptions = false; + photoAnnotations[currentPhoto].descriptionPosition = { + x: 10, + y: 10, + }; + photoAnnotations[currentPhoto].descriptionSize = { + width: photoData.displayWidth * 0.3, + height: photoData.displayHeight * 0.3, + }; + if (descriptionTextbox) { + fabricCanvas.remove(descriptionTextbox); + descriptionTextbox = null; + } + } + + for (let partNumber in markerObjects) { + fabricCanvas.remove(markerObjects[partNumber]); + delete markerObjects[partNumber]; + } + markerObjects = {}; + + const canvas = document.getElementById("photoCanvasAnnotations"); + const ctx = canvas.getContext("2d"); + canvas.width = photoData.naturalWidth; + canvas.height = photoData.naturalHeight; + canvas.style.width = `${photoData.displayWidth}px`; + canvas.style.height = `${photoData.displayHeight}px`; + ctx.clearRect(0, 0, canvas.width, canvas.height); + if ($("#samplePhotoAnnotations")[0].naturalWidth) { + ctx.drawImage( + $("#samplePhotoAnnotations")[0], + 0, + 0, + canvas.width, + canvas.height, + ); + } + updateMarkers(); + if (photoAnnotations[currentPhoto]?.hasDescriptions) { + updateDescriptions(); + } + markUnsaved(); + } + + function undoLastMarker() { + console.log("undoLastMarker chiamato"); + const currentPhoto = $("#samplePhotoAnnotations").attr("src"); + if ( + photoAnnotations[currentPhoto] && + photoAnnotations[currentPhoto].markers.length > 0 + ) { + const lastMarker = photoAnnotations[currentPhoto].markers.pop(); + if (markerObjects[lastMarker.partNumber]) { + fabricCanvas.remove(markerObjects[lastMarker.partNumber]); + delete markerObjects[lastMarker.partNumber]; + fabricCanvas.renderAll(); + } + console.log("Ultimo marker rimosso:", lastMarker); + markUnsaved(); + } + } + + // Delegazione evento per il pulsante "Descrizioni" + $(document) + .off("click.addDescriptions", "#addDescriptionsBtnAnnotations") + .on( + "click.addDescriptions", + "#addDescriptionsBtnAnnotations", + function (e) { + e.preventDefault(); + e.stopPropagation(); + console.log( + "Evento click su #addDescriptionsBtnAnnotations, ID elemento:", + $(this).attr("id"), + ); + if (!$("#addDescriptionsBtnAnnotations").length) { + console.error( + "Pulsante #addDescriptionsBtnAnnotations non trovato nel DOM.", + ); + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + const currentPhoto = $("#samplePhotoAnnotations").attr("src"); + if (!photoAnnotations[currentPhoto]) { + photoAnnotations[currentPhoto] = { + markers: [], + hasDescriptions: false, + descriptionPosition: { x: 10, y: 10 }, + descriptionSize: { + width: photoData.displayWidth * 0.3, + height: photoData.displayHeight * 0.3, + }, + }; + } + photoAnnotations[currentPhoto].hasDescriptions = true; + updateDescriptions(); + markUnsaved(); + }, + ); + + // Delegazione evento per il pulsante "Rimuovi" + $(document) + .off("click.removeAnnotations", "#removeAnnotationsBtnAnnotations") + .on( + "click.removeAnnotations", + "#removeAnnotationsBtnAnnotations", + function (e) { + e.preventDefault(); + e.stopPropagation(); + console.log( + "Evento click su #removeAnnotationsBtnAnnotations, ID elemento:", + $(this).attr("id"), + ); + if (!$("#removeAnnotationsBtnAnnotations").length) { + console.error( + "Pulsante #removeAnnotationsBtnAnnotations non trovato nel DOM.", + ); + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + clearCanvasMarkers(true); + }, + ); + + // Delegazione evento per il pulsante "Undo" + $(document) + .off("click.undoMarker", "#undoMarkerBtnAnnotations") + .on("click.undoMarker", "#undoMarkerBtnAnnotations", function (e) { + e.preventDefault(); + e.stopPropagation(); + console.log( + "Evento click su #undoMarkerBtnAnnotations, ID elemento:", + $(this).attr("id"), + ); + undoLastMarker(); + }); + + // =================== + // SAVE PHOTO + // =================== + $(document) + .off("click.savePhoto", "#savePhotoBtnAnnotations") + .on("click.savePhoto", "#savePhotoBtnAnnotations", function (e) { + e.preventDefault(); + e.stopPropagation(); + console.log( + "Evento click su #savePhotoBtnAnnotations, ID elemento:", + $(this).attr("id"), + ); + if (!$("#samplePhotoAnnotations").attr("src")) { + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + if (!fabricCanvas) { + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + const canvas = document.getElementById("photoCanvasAnnotations"); + const ctx = canvas.getContext("2d"); + const img = $("#samplePhotoAnnotations")[0]; + + if (!img.complete || img.naturalWidth === 0) { + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + canvas.width = photoData.naturalWidth; + canvas.height = photoData.naturalHeight; + ctx.drawImage(img, 0, 0, canvas.width, canvas.height); + + try { + const fabricDataURL = fabricCanvas.toDataURL({ + format: "png", + multiplier: 1 / photoData.scale, + }); + + const tempImg = new Image(); + tempImg.src = fabricDataURL; + tempImg.onload = function () { + ctx.drawImage(tempImg, 0, 0, canvas.width, canvas.height); + + fetch(fabricDataURL) + .then((res) => res.blob()) + .then((blob) => { + canvas.toBlob(function (blob) { + if (!blob) { + const errorMsg = $( + '', + ); + $("#annotationsModal .modal-body").prepend( + errorMsg, + ); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + const timestamp = new Date() + .toISOString() + .replace(/[:.]/g, "-"); + const iddatadb = + $("#annotationsModal").data("iddatadb"); + const idquotations = + $("#annotationsModal").data("idquotations"); + const id = iddatadb || idquotations; + const endpoint = idquotations + ? "save_annotated_photo_quotation.php" + : "save_annotated_photo.php"; + const finalName = `photo_${id}_${timestamp}.png`; + + const formData = new FormData(); + formData.append("file", blob, finalName); + formData.append("filename", finalName); + formData.append( + idquotations ? "idquotations" : "iddatadb", + id, + ); + + $.ajax({ + url: endpoint, + method: "POST", + data: formData, + processData: false, + contentType: false, + success: function (response) { + if (response.success) { + const successMsg = $( + '", + ); + $( + "#annotationsModal .modal-body", + ).prepend(successMsg); + setTimeout(function () { + successMsg.fadeOut( + 500, + function () { + $(this).remove(); + }, + ); + }, 5000); + + const photoSelector = $( + "#photoSelectorAnnotations", + ); + if (photoSelector.length > 0) { + const newPhotoPath = + response.file_path; + const newPhotoName = + newPhotoPath + .split("/") + .pop(); + const optionCount = + photoSelector.find( + "option", + ).length; + + const newOption = $( + "", + ) + .val(newPhotoPath) + .text( + `Photo ${optionCount + 1} - ${newPhotoName}`, + ); + photoSelector.append(newOption); + photoSelector + .val(newPhotoPath) + .trigger("change"); + } + + unsavedChanges = false; + } else { + const errorMsg = $( + '", + ); + $( + "#annotationsModal .modal-body", + ).prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut( + 500, + function () { + $(this).remove(); + }, + ); + }, 5000); + } + }, + error: function (xhr, status, error) { + const errorMsg = $( + '", + ); + $( + "#annotationsModal .modal-body", + ).prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + }, + }); + }, "image/png"); + }); + }; + } catch (e) { + const errorMsg = $( + '", + ); + $("#annotationsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + } + }); + + function markUnsaved() { + if (!unsavedChanges) { + unsavedChanges = true; + console.log("Modifiche non salvate rilevate."); + } + } +}); diff --git a/public/userarea/customfield_values_response.json b/public/userarea/customfield_values_response.json index 9819eb5..670d529 100644 --- a/public/userarea/customfield_values_response.json +++ b/public/userarea/customfield_values_response.json @@ -1 +1 @@ -{"146":[{"IdCustomFieldsValue":235,"Valore":"Pigmentato"},{"IdCustomFieldsValue":236,"Valore":"Anilina"},{"IdCustomFieldsValue":237,"Valore":"Verniciato"},{"IdCustomFieldsValue":238,"Valore":"Laminato"},{"IdCustomFieldsValue":259,"Valore":"Semi-Anilina"},{"IdCustomFieldsValue":274,"Valore":"Scamosciato"},{"IdCustomFieldsValue":305,"Valore":"Pigmented"},{"IdCustomFieldsValue":306,"Valore":"Aniline"},{"IdCustomFieldsValue":307,"Valore":"Patent"},{"IdCustomFieldsValue":308,"Valore":"Metallic"},{"IdCustomFieldsValue":309,"Valore":"Semi-Aniline"},{"IdCustomFieldsValue":310,"Valore":"Suede"},{"IdCustomFieldsValue":311,"Valore":"Nubuck"},{"IdCustomFieldsValue":336,"Valore":"Cavallino"},{"IdCustomFieldsValue":344,"Valore":"Abrasivato"},{"IdCustomFieldsValue":500,"Valore":"Gommato"},{"IdCustomFieldsValue":528,"Valore":"Paillettes"},{"IdCustomFieldsValue":538,"Valore":"PU"},{"IdCustomFieldsValue":559,"Valore":"Tintura di Botte"},{"IdCustomFieldsValue":570,"Valore":"Crosta"},{"IdCustomFieldsValue":572,"Valore":"Semianilina\/Stampato"},{"IdCustomFieldsValue":644,"Valore":"Accoppiato"},{"IdCustomFieldsValue":657,"Valore":"Serigrafato"},{"IdCustomFieldsValue":661,"Valore":"Stampato"},{"IdCustomFieldsValue":691,"Valore":"Brush-Off"},{"IdCustomFieldsValue":697,"Valore":"Crust"},{"IdCustomFieldsValue":707,"Valore":"Lucido Lissato"},{"IdCustomFieldsValue":729,"Valore":"Shearling"},{"IdCustomFieldsValue":733,"Valore":"Printed"},{"IdCustomFieldsValue":750,"Valore":"Ink-Jet"},{"IdCustomFieldsValue":804,"Valore":"Fur"},{"IdCustomFieldsValue":874,"Valore":"Esotico"},{"IdCustomFieldsValue":896,"Valore":"Shearling con lato carne scamosciato"},{"IdCustomFieldsValue":959,"Valore":"Ink-jet\/ Con film PU \"By-Cast\""},{"IdCustomFieldsValue":970,"Valore":"Anilina\/Ink-jet"},{"IdCustomFieldsValue":1020,"Valore":"Coated"},{"IdCustomFieldsValue":1021,"Valore":"By-Cast"},{"IdCustomFieldsValue":1024,"Valore":"Perlato"},{"IdCustomFieldsValue":1025,"Valore":"Pearled"},{"IdCustomFieldsValue":1030,"Valore":"Pelo"},{"IdCustomFieldsValue":1035,"Valore":"Glitterato"},{"IdCustomFieldsValue":1099,"Valore":"Transfer"},{"IdCustomFieldsValue":1111,"Valore":"Coupled"},{"IdCustomFieldsValue":1153,"Valore":"Saffiano"},{"IdCustomFieldsValue":1186,"Valore":"Pigmentato\/Accoppiato"},{"IdCustomFieldsValue":1238,"Valore":"Aniline\/Fixed"},{"IdCustomFieldsValue":1240,"Valore":"Laminated Foil Finish"},{"IdCustomFieldsValue":1348,"Valore":"Con applicazioni"},{"IdCustomFieldsValue":1349,"Valore":"Pony calf"},{"IdCustomFieldsValue":1415,"Valore":"Glittered"},{"IdCustomFieldsValue":1437,"Valore":"Scraped"},{"IdCustomFieldsValue":1445,"Valore":"Resinato"},{"IdCustomFieldsValue":1620,"Valore":"Stampa digitale"},{"IdCustomFieldsValue":1661,"Valore":"Laminato parziale"},{"IdCustomFieldsValue":1734,"Valore":"Hair"},{"IdCustomFieldsValue":1787,"Valore":"Smerigliato Rifinito"},{"IdCustomFieldsValue":1827,"Valore":"Uncoated"},{"IdCustomFieldsValue":1828,"Valore":"Nappa"},{"IdCustomFieldsValue":1942,"Valore":"M\u00e9tallique "},{"IdCustomFieldsValue":1943,"Valore":"Camoscina"},{"IdCustomFieldsValue":1974,"Valore":"Pigment\u00e9"},{"IdCustomFieldsValue":2002,"Valore":"Partial metallic finish"},{"IdCustomFieldsValue":2551,"Valore":"Coated con glitter"},{"IdCustomFieldsValue":3107,"Valore":"Metallic Suede"},{"IdCustomFieldsValue":3208,"Valore":"Plotter"},{"IdCustomFieldsValue":3216,"Valore":"Serigrafia con fissativo"},{"IdCustomFieldsValue":3236,"Valore":"Super Natural"},{"IdCustomFieldsValue":3239,"Valore":"Velour"},{"IdCustomFieldsValue":3251,"Valore":"Canvas"},{"IdCustomFieldsValue":3328,"Valore":"Resina stirata"},{"IdCustomFieldsValue":3335,"Valore":"Lucido"},{"IdCustomFieldsValue":3364,"Valore":"Palmellato"},{"IdCustomFieldsValue":3365,"Valore":"Volanato naturale"},{"IdCustomFieldsValue":3366,"Valore":"Trattamento Scotchgard"},{"IdCustomFieldsValue":3367,"Valore":"Passante in botte"},{"IdCustomFieldsValue":3370,"Valore":"Embroidery"},{"IdCustomFieldsValue":3371,"Valore":"Patchwork lettering"},{"IdCustomFieldsValue":3409,"Valore":"Tinto Pezza"},{"IdCustomFieldsValue":3410,"Valore":"Pronto per Tinta"},{"IdCustomFieldsValue":3411,"Valore":"Tinto Filo"},{"IdCustomFieldsValue":3412,"Valore":"Greggio"},{"IdCustomFieldsValue":3413,"Valore":"Vacchetta"},{"IdCustomFieldsValue":3424,"Valore":"Naturale"},{"IdCustomFieldsValue":3442,"Valore":"Barrel dyeing"},{"IdCustomFieldsValue":3454,"Valore":"Split leather with film"},{"IdCustomFieldsValue":3455,"Valore":"Printed Suede"},{"IdCustomFieldsValue":3460,"Valore":"Pigmented\/Patent"},{"IdCustomFieldsValue":3468,"Valore":"Non rifinito"},{"IdCustomFieldsValue":3482,"Valore":"Cruck"},{"IdCustomFieldsValue":3491,"Valore":"Stampa serigrafica"},{"IdCustomFieldsValue":3494,"Valore":"Fissativo all'acqua"},{"IdCustomFieldsValue":3498,"Valore":"Tintura"},{"IdCustomFieldsValue":3506,"Valore":"Rovesciato"},{"IdCustomFieldsValue":3511,"Valore":"Spalmato"},{"IdCustomFieldsValue":3514,"Valore":"Serigraphy"},{"IdCustomFieldsValue":3867,"Valore":"None"},{"IdCustomFieldsValue":4052,"Valore":"Pigmentato Abrasivato"},{"IdCustomFieldsValue":4082,"Valore":"Full Grain"},{"IdCustomFieldsValue":4109,"Valore":"Opaco"},{"IdCustomFieldsValue":4124,"Valore":"Embossed"},{"IdCustomFieldsValue":4135,"Valore":"Mat"},{"IdCustomFieldsValue":4136,"Valore":"Lisse"},{"IdCustomFieldsValue":4137,"Valore":"Coton"},{"IdCustomFieldsValue":4143,"Valore":"Alo\u00e9"},{"IdCustomFieldsValue":4144,"Valore":"Torino"},{"IdCustomFieldsValue":4145,"Valore":"Microsuede"},{"IdCustomFieldsValue":4151,"Valore":"Miroir"},{"IdCustomFieldsValue":4166,"Valore":"Stampa UV"},{"IdCustomFieldsValue":4185,"Valore":"Lavable"},{"IdCustomFieldsValue":4219,"Valore":"Radika"},{"IdCustomFieldsValue":4220,"Valore":"Natural"},{"IdCustomFieldsValue":4222,"Valore":"Abilo N\u00e9on"},{"IdCustomFieldsValue":4250,"Valore":"Canyon"},{"IdCustomFieldsValue":4257,"Valore":"Alo\u00e9 Shiny"},{"IdCustomFieldsValue":4258,"Valore":"Lisse\/Recoupe"},{"IdCustomFieldsValue":4280,"Valore":"Water-repellent"},{"IdCustomFieldsValue":4283,"Valore":"Lisse\/Entrepeaux"},{"IdCustomFieldsValue":4286,"Valore":"Metallo liquido spray + Stampa"},{"IdCustomFieldsValue":4288,"Valore":"Tinto"},{"IdCustomFieldsValue":4388,"Valore":"Cerato"},{"IdCustomFieldsValue":4389,"Valore":"Mat\/Recoupe"},{"IdCustomFieldsValue":4392,"Valore":"Pigmentato\/Poliuretanico finale"},{"IdCustomFieldsValue":4393,"Valore":"Semianilina Laminato"},{"IdCustomFieldsValue":4394,"Valore":"Semianilina Pigmentato"},{"IdCustomFieldsValue":4399,"Valore":"Primitivo"},{"IdCustomFieldsValue":4400,"Valore":"Ombre"},{"IdCustomFieldsValue":4401,"Valore":"Anilina Pigmentato"},{"IdCustomFieldsValue":4405,"Valore":"Caresse"},{"IdCustomFieldsValue":4429,"Valore":"Ultras\/Recoupe"},{"IdCustomFieldsValue":4552,"Valore":"Semi-Anilina + Stampa ink jet"},{"IdCustomFieldsValue":4563,"Valore":"Torino Ultra Brillante"},{"IdCustomFieldsValue":4573,"Valore":"Supernatural\/aniline"},{"IdCustomFieldsValue":5054,"Valore":"Peau d'ange"},{"IdCustomFieldsValue":5128,"Valore":"Mirage"},{"IdCustomFieldsValue":5129,"Valore":"Mirage\/Relance"},{"IdCustomFieldsValue":5130,"Valore":"Croute Chrome"},{"IdCustomFieldsValue":5309,"Valore":"PU Coated"},{"IdCustomFieldsValue":5315,"Valore":"Pigmentato stampato"},{"IdCustomFieldsValue":5498,"Valore":"Rubberized"},{"IdCustomFieldsValue":5610,"Valore":"By-Cast PU"},{"IdCustomFieldsValue":5615,"Valore":"Lamina liquida"},{"IdCustomFieldsValue":6193,"Valore":"Nubuck\/Rubber coated"},{"IdCustomFieldsValue":8523,"Valore":"Total print"},{"IdCustomFieldsValue":12774,"Valore":"Etoffe"},{"IdCustomFieldsValue":12775,"Valore":"Croute"},{"IdCustomFieldsValue":12776,"Valore":"Miroir Light"},{"IdCustomFieldsValue":12777,"Valore":"Etriviere"},{"IdCustomFieldsValue":12949,"Valore":"Vernice (Vernice\/Semianilina)"},{"IdCustomFieldsValue":13501,"Valore":"Seta Lux"},{"IdCustomFieldsValue":13733,"Valore":"Aniline Pigmented"},{"IdCustomFieldsValue":13807,"Valore":"Naturale\/Semilucido"},{"IdCustomFieldsValue":14047,"Valore":"Fissativo"},{"IdCustomFieldsValue":14140,"Valore":"Nubuk"},{"IdCustomFieldsValue":14141,"Valore":"Satin Soft"},{"IdCustomFieldsValue":14142,"Valore":"Priene\/ Millenium "},{"IdCustomFieldsValue":14887,"Valore":"Pigmented\/Metal"}],"147":[{"IdCustomFieldsValue":239,"Valore":"Cromo"},{"IdCustomFieldsValue":240,"Valore":"Vegetale"},{"IdCustomFieldsValue":272,"Valore":"\/"},{"IdCustomFieldsValue":273,"Valore":"Mista"},{"IdCustomFieldsValue":301,"Valore":"Chrome"},{"IdCustomFieldsValue":302,"Valore":"Vegetal"},{"IdCustomFieldsValue":303,"Valore":"Mixed"},{"IdCustomFieldsValue":519,"Valore":"White"},{"IdCustomFieldsValue":520,"Valore":"Bianca"},{"IdCustomFieldsValue":566,"Valore":"Chrome \/ Synthetic"},{"IdCustomFieldsValue":682,"Valore":"Sintetica"},{"IdCustomFieldsValue":1001,"Valore":"Vegetallizzato"},{"IdCustomFieldsValue":1054,"Valore":"Synthetic"},{"IdCustomFieldsValue":1208,"Valore":"Allume"},{"IdCustomFieldsValue":1264,"Valore":"Minerale"},{"IdCustomFieldsValue":1535,"Valore":"Blanche"},{"IdCustomFieldsValue":2447,"Valore":"Mineral"},{"IdCustomFieldsValue":2590,"Valore":"Semi-Vegetal"},{"IdCustomFieldsValue":2712,"Valore":"Metal free"},{"IdCustomFieldsValue":2737,"Valore":"Semi-Chrome"},{"IdCustomFieldsValue":2777,"Valore":"Wet Blue"},{"IdCustomFieldsValue":3090,"Valore":"Non conciata"},{"IdCustomFieldsValue":3199,"Valore":"Chrome free"},{"IdCustomFieldsValue":3469,"Valore":"Slow vegetal"},{"IdCustomFieldsValue":3527,"Valore":"Wet White"},{"IdCustomFieldsValue":3821,"Valore":"Sintetica + Cromo"},{"IdCustomFieldsValue":3888,"Valore":"Non metallica"},{"IdCustomFieldsValue":4568,"Valore":"Mineral"},{"IdCustomFieldsValue":5390,"Valore":"Cromo \/ Sintetico"},{"IdCustomFieldsValue":5398,"Valore":"Synthetique"},{"IdCustomFieldsValue":5647,"Valore":"Pickel"},{"IdCustomFieldsValue":6192,"Valore":"Chrome\/Mixed"},{"IdCustomFieldsValue":8709,"Valore":"Mixte"},{"IdCustomFieldsValue":11356,"Valore":"Mista Cromo"},{"IdCustomFieldsValue":13713,"Valore":"Bio"},{"IdCustomFieldsValue":13714,"Valore":"Bio\/Metal free"}],"150":[{"IdCustomFieldsValue":261,"Valore":"Pelletteria"},{"IdCustomFieldsValue":262,"Valore":"Calzatura (Tomaio)"},{"IdCustomFieldsValue":263,"Valore":"Calzatura (Fodera)"},{"IdCustomFieldsValue":264,"Valore":"Abbigliamento"},{"IdCustomFieldsValue":265,"Valore":"Arredamento"},{"IdCustomFieldsValue":266,"Valore":"Calzatura\/Pelletteria"},{"IdCustomFieldsValue":267,"Valore":"Cinture"},{"IdCustomFieldsValue":269,"Valore":"Piccola Pelletteria (Portafogli)"},{"IdCustomFieldsValue":270,"Valore":"Valigeria"},{"IdCustomFieldsValue":271,"Valore":"\/"},{"IdCustomFieldsValue":285,"Valore":"Leathergoods"},{"IdCustomFieldsValue":286,"Valore":"Footwear (Upper)"},{"IdCustomFieldsValue":287,"Valore":"Footwear (Lining)"},{"IdCustomFieldsValue":288,"Valore":"Apparel"},{"IdCustomFieldsValue":289,"Valore":"Furnishing"},{"IdCustomFieldsValue":290,"Valore":"Footwear\/Leathergoods"},{"IdCustomFieldsValue":291,"Valore":"Belts"},{"IdCustomFieldsValue":292,"Valore":"Watchstrap"},{"IdCustomFieldsValue":293,"Valore":"Small Leathergood"},{"IdCustomFieldsValue":338,"Valore":"Calzatura"},{"IdCustomFieldsValue":440,"Valore":"Footwear"},{"IdCustomFieldsValue":474,"Valore":"Apparel Trim"},{"IdCustomFieldsValue":495,"Valore":"Pelletteria (Fodera)"},{"IdCustomFieldsValue":582,"Valore":"Leathergoods (Bag)"},{"IdCustomFieldsValue":598,"Valore":"Pelletteria (Borsa)"},{"IdCustomFieldsValue":637,"Valore":"Shoes - Leathergoods"},{"IdCustomFieldsValue":676,"Valore":"Footwear (Insole)"},{"IdCustomFieldsValue":687,"Valore":"Piccola Pelletteria (Cinture)"},{"IdCustomFieldsValue":688,"Valore":"Cinturini da orologio"},{"IdCustomFieldsValue":692,"Valore":"Apparel (Outer)"},{"IdCustomFieldsValue":693,"Valore":"Apparel (Inner)"},{"IdCustomFieldsValue":695,"Valore":"Calzatura (Sottopiedi)"},{"IdCustomFieldsValue":742,"Valore":"Packaging"},{"IdCustomFieldsValue":756,"Valore":"Maroquinerie"},{"IdCustomFieldsValue":757,"Valore":"Maroquinerie (Sac a main)"},{"IdCustomFieldsValue":758,"Valore":"Maroquinerie (Petite maroquinerie)"},{"IdCustomFieldsValue":759,"Valore":"Maroquinerie (Ceintures)"},{"IdCustomFieldsValue":760,"Valore":"Maroquinerie (Bracelets de montres)"},{"IdCustomFieldsValue":761,"Valore":"Maroquinerie (Doublure)"},{"IdCustomFieldsValue":767,"Valore":"Bracelets de montres"},{"IdCustomFieldsValue":775,"Valore":"Pelletteria (Borsa) \/ Piccola Pelletteria (Portafogli)"},{"IdCustomFieldsValue":779,"Valore":"Leathergoods \/Finishedgoods"},{"IdCustomFieldsValue":807,"Valore":"Leathergoods (Lining)"},{"IdCustomFieldsValue":821,"Valore":"Accessori da Abbigliamento"},{"IdCustomFieldsValue":823,"Valore":"Gioielleria"},{"IdCustomFieldsValue":840,"Valore":"Jewellery"},{"IdCustomFieldsValue":855,"Valore":"Piccola Pelletteria"},{"IdCustomFieldsValue":889,"Valore":"Small Leathergood (Belt)"},{"IdCustomFieldsValue":898,"Valore":"Pelletteria (Borsa) \/ Gioielleria"},{"IdCustomFieldsValue":902,"Valore":"V\u00eatements"},{"IdCustomFieldsValue":912,"Valore":"Abbigliamento (Guanti)"},{"IdCustomFieldsValue":986,"Valore":"Leathergoods (Wallet)"},{"IdCustomFieldsValue":1009,"Valore":"Gioielleria \/ Bigiotteria"},{"IdCustomFieldsValue":1010,"Valore":"Bigiotteria"},{"IdCustomFieldsValue":1027,"Valore":"Abbigliamento esterno"},{"IdCustomFieldsValue":1028,"Valore":"Abbigliamento interno"},{"IdCustomFieldsValue":1032,"Valore":"Calzatura sfoderata"},{"IdCustomFieldsValue":1055,"Valore":"Leathergoods (Body of the bag)"},{"IdCustomFieldsValue":1082,"Valore":"Leathergoods (Belt)"},{"IdCustomFieldsValue":1104,"Valore":"Calzatura (Soletto)"},{"IdCustomFieldsValue":1204,"Valore":"Calzatura (fodera\/soletto)"},{"IdCustomFieldsValue":1205,"Valore":"Shoes"},{"IdCustomFieldsValue":1207,"Valore":"Pelletteria \/ Abbigliamento"},{"IdCustomFieldsValue":1236,"Valore":"Ombrelli"},{"IdCustomFieldsValue":1383,"Valore":"Abbigliamento\/Calzatura"},{"IdCustomFieldsValue":1421,"Valore":"Calzatura (Tacco)"},{"IdCustomFieldsValue":1467,"Valore":"Furniture"},{"IdCustomFieldsValue":1514,"Valore":"Footwear (Upper\/Lining)"},{"IdCustomFieldsValue":1662,"Valore":"Leathergoods (Exterior)"},{"IdCustomFieldsValue":1670,"Valore":"Chaussures"},{"IdCustomFieldsValue":1780,"Valore":"Abbigliamento\/Calzatura\/Pelletteria"},{"IdCustomFieldsValue":1970,"Valore":"Accessories"},{"IdCustomFieldsValue":1971,"Valore":"Carta da parati"},{"IdCustomFieldsValue":2087,"Valore":"Glasses case"},{"IdCustomFieldsValue":2190,"Valore":"Calzatura (Tomaio\/Fodera)"},{"IdCustomFieldsValue":2240,"Valore":"Pelletteria \/ Calzatura"},{"IdCustomFieldsValue":2530,"Valore":"Calzatura (Suola)"},{"IdCustomFieldsValue":2570,"Valore":"Occhiali"},{"IdCustomFieldsValue":2635,"Valore":"Footwear (Sandal)"},{"IdCustomFieldsValue":2639,"Valore":"Lining"},{"IdCustomFieldsValue":2671,"Valore":"Portachiavi"},{"IdCustomFieldsValue":3098,"Valore":"Pellicceria"},{"IdCustomFieldsValue":3200,"Valore":"Car seat upholstery"},{"IdCustomFieldsValue":3209,"Valore":"Fodera"},{"IdCustomFieldsValue":3243,"Valore":"Accessoristica"},{"IdCustomFieldsValue":3253,"Valore":"Cuscini da Viaggio"},{"IdCustomFieldsValue":3357,"Valore":"Coulisse"},{"IdCustomFieldsValue":3361,"Valore":"Leathergoods (Handbag)"},{"IdCustomFieldsValue":3369,"Valore":"Leathergoods (Knapsack)"},{"IdCustomFieldsValue":3445,"Valore":"Footwear (Lake shoe)"},{"IdCustomFieldsValue":3453,"Valore":"Apparel (Hat)"},{"IdCustomFieldsValue":3470,"Valore":"Bike saddle"},{"IdCustomFieldsValue":3476,"Valore":"Apparel (Shirts)"},{"IdCustomFieldsValue":3477,"Valore":"Apparel (Jackets)"},{"IdCustomFieldsValue":3478,"Valore":"Leathergoods (Flap)"},{"IdCustomFieldsValue":3484,"Valore":"Upholstery"},{"IdCustomFieldsValue":3485,"Valore":"Saddlery"},{"IdCustomFieldsValue":3519,"Valore":"Apparel (Lining)"},{"IdCustomFieldsValue":3837,"Valore":"Swimwear"},{"IdCustomFieldsValue":3847,"Valore":"Accoppiatura tessuti"},{"IdCustomFieldsValue":3876,"Valore":"Luggage"},{"IdCustomFieldsValue":3891,"Valore":"Pelletteria (Rinforzo)"},{"IdCustomFieldsValue":4041,"Valore":"Bijoux (Lining)"},{"IdCustomFieldsValue":4081,"Valore":"Label"},{"IdCustomFieldsValue":4189,"Valore":"Case"},{"IdCustomFieldsValue":4268,"Valore":"Abbigliamento (Camicia)"},{"IdCustomFieldsValue":4390,"Valore":"Bijoux"},{"IdCustomFieldsValue":4421,"Valore":"Apparel (tights)"},{"IdCustomFieldsValue":4424,"Valore":"Maglieria"},{"IdCustomFieldsValue":4425,"Valore":"Abbigliamento (Sciarpe)"},{"IdCustomFieldsValue":4588,"Valore":"Forniture"},{"IdCustomFieldsValue":4642,"Valore":"Calzatura (Tomaio\/Soletto)"},{"IdCustomFieldsValue":4746,"Valore":"Leathergoods\/Footwear"},{"IdCustomFieldsValue":4749,"Valore":"Orthopedic \/ comfort Shoes"},{"IdCustomFieldsValue":5308,"Valore":"Swimsuit"},{"IdCustomFieldsValue":5394,"Valore":"Pelletteria \/ Accessori"},{"IdCustomFieldsValue":5435,"Valore":"Accessoire"},{"IdCustomFieldsValue":6265,"Valore":"V\u00eatements\/Maroquinerie"},{"IdCustomFieldsValue":12514,"Valore":"\u00c9quitation"},{"IdCustomFieldsValue":12714,"Valore":"Montre"},{"IdCustomFieldsValue":13149,"Valore":"Calzatura (Tomaio\/Sottopiede)"},{"IdCustomFieldsValue":13486,"Valore":"Glasses"},{"IdCustomFieldsValue":13487,"Valore":"Sunglasses"},{"IdCustomFieldsValue":13897,"Valore":"Bagage"},{"IdCustomFieldsValue":13977,"Valore":"Apparel\/Leathergoods\/Footwear"},{"IdCustomFieldsValue":14000,"Valore":"Garment"},{"IdCustomFieldsValue":14023,"Valore":"Leathergoods (Waist bag)"},{"IdCustomFieldsValue":14681,"Valore":"Chaussures\/Maroquinerie"},{"IdCustomFieldsValue":14698,"Valore":"Small Leathergood (Key ring)"},{"IdCustomFieldsValue":14836,"Valore":"Abbigliamento (Costume da bagno)"},{"IdCustomFieldsValue":14991,"Valore":"Footwear\/Leathergoods\/Apparel"}],"156":[{"IdCustomFieldsValue":243,"Valore":"Bottone"},{"IdCustomFieldsValue":244,"Valore":"Cerniera"},{"IdCustomFieldsValue":245,"Valore":"Accessorio Metallico"},{"IdCustomFieldsValue":246,"Valore":"Accessorio Plastico"},{"IdCustomFieldsValue":247,"Valore":"Sottotacco"},{"IdCustomFieldsValue":304,"Valore":"Suola"},{"IdCustomFieldsValue":313,"Valore":"Tacco"},{"IdCustomFieldsValue":314,"Valore":"Composite"},{"IdCustomFieldsValue":315,"Valore":"Cuoio\/Pelle (1\/2 Vitello)"},{"IdCustomFieldsValue":316,"Valore":"Cuoio\/Pelle (Bovino)"},{"IdCustomFieldsValue":317,"Valore":"Cuoio\/Pelle (Capra)"},{"IdCustomFieldsValue":318,"Valore":"Cuoio\/Pelle (Coccodrillo)"},{"IdCustomFieldsValue":319,"Valore":"Cuoio\/Pelle (Crosta)"},{"IdCustomFieldsValue":320,"Valore":"Cuoio\/Pelle (Nabuck)"},{"IdCustomFieldsValue":321,"Valore":"Cuoio\/Pelle (Ovocaprino)"},{"IdCustomFieldsValue":322,"Valore":"Cuoio\/Pelle (Rettile)"},{"IdCustomFieldsValue":323,"Valore":"Cuoio\/Pelle (Vitello)"},{"IdCustomFieldsValue":324,"Valore":"Borsa"},{"IdCustomFieldsValue":325,"Valore":"Calzatura"},{"IdCustomFieldsValue":326,"Valore":"Cintura"},{"IdCustomFieldsValue":327,"Valore":"Portafoglio"},{"IdCustomFieldsValue":328,"Valore":"Tessile (Sintetico)"},{"IdCustomFieldsValue":329,"Valore":"Tessile (Ortogonale\/A maglia)"},{"IdCustomFieldsValue":330,"Valore":"Tessile (PVC)"},{"IdCustomFieldsValue":331,"Valore":"Tessile (Spalmato)"},{"IdCustomFieldsValue":332,"Valore":"Tessile (Stampato)"},{"IdCustomFieldsValue":333,"Valore":"Tessile (Accoppiato)"},{"IdCustomFieldsValue":335,"Valore":"Cuoio\/Pelle (Cavallino)"},{"IdCustomFieldsValue":342,"Valore":"Cuoio\/Pelle"},{"IdCustomFieldsValue":343,"Valore":"Tessile"},{"IdCustomFieldsValue":404,"Valore":"Leather (1\/2 Calf)"},{"IdCustomFieldsValue":405,"Valore":"Leather (Calf)"},{"IdCustomFieldsValue":406,"Valore":"Leather (Buffalo)"},{"IdCustomFieldsValue":407,"Valore":"Leather (Goat)"},{"IdCustomFieldsValue":408,"Valore":"Leather (Lamb)"},{"IdCustomFieldsValue":409,"Valore":"Leather (Exotic)"},{"IdCustomFieldsValue":410,"Valore":"Textile"},{"IdCustomFieldsValue":411,"Valore":"Final product"},{"IdCustomFieldsValue":412,"Valore":"Button"},{"IdCustomFieldsValue":413,"Valore":"Handbag"},{"IdCustomFieldsValue":414,"Valore":"Belt"},{"IdCustomFieldsValue":415,"Valore":"Heel"},{"IdCustomFieldsValue":416,"Valore":"Metallic accessories"},{"IdCustomFieldsValue":420,"Valore":"Leather"},{"IdCustomFieldsValue":446,"Valore":"Leather (Ram)"},{"IdCustomFieldsValue":480,"Valore":"Cuoio\/Pelle (Cervo)"},{"IdCustomFieldsValue":481,"Valore":"Cuoio\/Pelle (Vitellino)"},{"IdCustomFieldsValue":483,"Valore":"Wallet"},{"IdCustomFieldsValue":529,"Valore":"Cuoio\/Pelle (Nappa)"},{"IdCustomFieldsValue":533,"Valore":"Leather (Shearling)"},{"IdCustomFieldsValue":534,"Valore":"Leather (Cow)"},{"IdCustomFieldsValue":536,"Valore":"Cuoio\/Pelle (Agnello)"},{"IdCustomFieldsValue":537,"Valore":"Sottopiede"},{"IdCustomFieldsValue":547,"Valore":"Porta I-Pad"},{"IdCustomFieldsValue":558,"Valore":"Cuoio\/Pelle (Daino)"},{"IdCustomFieldsValue":571,"Valore":"Cuoio\/Pelle (Bufalo)"},{"IdCustomFieldsValue":597,"Valore":"Composito"},{"IdCustomFieldsValue":616,"Valore":"Leather (front calf)"},{"IdCustomFieldsValue":643,"Valore":"Cuoio\/Pelle (Canguro)"},{"IdCustomFieldsValue":653,"Valore":"Sole"},{"IdCustomFieldsValue":654,"Valore":"Cuoio\/Pelle (Montone)"},{"IdCustomFieldsValue":655,"Valore":"Cuoio\/Pelle (Volpe)"},{"IdCustomFieldsValue":660,"Valore":"Accessorio \/ Pitone"},{"IdCustomFieldsValue":666,"Valore":"Guanti"},{"IdCustomFieldsValue":667,"Valore":"Prodotto finito"},{"IdCustomFieldsValue":678,"Valore":"Colorante"},{"IdCustomFieldsValue":684,"Valore":"Elaphe Radiata"},{"IdCustomFieldsValue":689,"Valore":"Cuoio\/Pelle (Toro)"},{"IdCustomFieldsValue":690,"Valore":"Semilavorato"},{"IdCustomFieldsValue":696,"Valore":"Cuoio\/Pelle (Spalle)"},{"IdCustomFieldsValue":699,"Valore":"Leathergoods\/Footwear"},{"IdCustomFieldsValue":701,"Valore":"Cuoio\/Pelle (Visone)"},{"IdCustomFieldsValue":702,"Valore":"Wire"},{"IdCustomFieldsValue":705,"Valore":"Tessile (con Applicazioni)"},{"IdCustomFieldsValue":708,"Valore":"Cuoio\/Pelle (Incrociati)"},{"IdCustomFieldsValue":714,"Valore":"Cuoio\/Pelle (Cammello)"},{"IdCustomFieldsValue":717,"Valore":"Shoulder"},{"IdCustomFieldsValue":718,"Valore":"Handle"},{"IdCustomFieldsValue":719,"Valore":"Backpack"},{"IdCustomFieldsValue":731,"Valore":"Panel"},{"IdCustomFieldsValue":734,"Valore":"Textile (Coupled)"},{"IdCustomFieldsValue":736,"Valore":"Accessories"},{"IdCustomFieldsValue":738,"Valore":"Buckle"},{"IdCustomFieldsValue":740,"Valore":"Cuoio\/Pelle (Gropponi)"},{"IdCustomFieldsValue":743,"Valore":"Glittered Textile"},{"IdCustomFieldsValue":748,"Valore":"Leather (Deer)"},{"IdCustomFieldsValue":762,"Valore":"Cuir"},{"IdCustomFieldsValue":763,"Valore":"Doublure (Cro\u00fbte bovin P.U. Newcalf gris F\/32 F1.5\/1.7mm, T1.5\/2.0m2)"},{"IdCustomFieldsValue":764,"Valore":"Pieces Metallique"},{"IdCustomFieldsValue":765,"Valore":"Bracelets de montres"},{"IdCustomFieldsValue":768,"Valore":"Leather vs Textile"},{"IdCustomFieldsValue":770,"Valore":"Cuoio\/Pelle (Coniglio)"},{"IdCustomFieldsValue":792,"Valore":"Leather (Goat) vs Leather (Calf)"},{"IdCustomFieldsValue":797,"Valore":"Insock"},{"IdCustomFieldsValue":809,"Valore":"Leather (Shoulder)"},{"IdCustomFieldsValue":810,"Valore":"Cuoio\/Pelle (Fianchi)"},{"IdCustomFieldsValue":812,"Valore":"Zaino"},{"IdCustomFieldsValue":824,"Valore":"Shoe"},{"IdCustomFieldsValue":834,"Valore":"Glittered Textile"},{"IdCustomFieldsValue":835,"Valore":"Cuoio\/Pelle (Alligatore)"},{"IdCustomFieldsValue":838,"Valore":"Pannello"},{"IdCustomFieldsValue":841,"Valore":"Bracelet"},{"IdCustomFieldsValue":842,"Valore":"Chain"},{"IdCustomFieldsValue":843,"Valore":"Necklace"},{"IdCustomFieldsValue":847,"Valore":"Componente per calzatura"},{"IdCustomFieldsValue":849,"Valore":"Bracciale"},{"IdCustomFieldsValue":852,"Valore":"Cuoio\/Pelle (Cavallo)"},{"IdCustomFieldsValue":854,"Valore":"Nappa"},{"IdCustomFieldsValue":856,"Valore":"Cuoio\/Pelle (Suino)"},{"IdCustomFieldsValue":857,"Valore":"Bag"},{"IdCustomFieldsValue":862,"Valore":"PVC"},{"IdCustomFieldsValue":865,"Valore":"Cuoio\/Pelle Esotico (Ayers)"},{"IdCustomFieldsValue":877,"Valore":"Cuir (Veau)"},{"IdCustomFieldsValue":884,"Valore":"Leather (Pig)"},{"IdCustomFieldsValue":886,"Valore":"Leather (Baby Calf)"},{"IdCustomFieldsValue":888,"Valore":"Small Leathergood (Belt)"},{"IdCustomFieldsValue":899,"Valore":"Accoppiato (Tessile\/Pelle)"},{"IdCustomFieldsValue":900,"Valore":"Accoppiato (Pelle\/Pelle)"},{"IdCustomFieldsValue":901,"Valore":"Cuoio\/Pelle (Pitone)"},{"IdCustomFieldsValue":911,"Valore":"Culatte"},{"IdCustomFieldsValue":919,"Valore":"Leather (Kangaroo)"},{"IdCustomFieldsValue":934,"Valore":"Accessorio"},{"IdCustomFieldsValue":937,"Valore":"Leather (Bovine)"},{"IdCustomFieldsValue":938,"Valore":"Leather (Coupled)"},{"IdCustomFieldsValue":943,"Valore":"Textile (Glittered)"},{"IdCustomFieldsValue":945,"Valore":"Textile (Woven\/Knitted)"},{"IdCustomFieldsValue":946,"Valore":"Textile (Lining)"},{"IdCustomFieldsValue":949,"Valore":"Cuoio\/Pelle (Caribu')"},{"IdCustomFieldsValue":952,"Valore":"Tessile (Fodera)"},{"IdCustomFieldsValue":954,"Valore":"Metallic logo"},{"IdCustomFieldsValue":957,"Valore":"Plastic accessories"},{"IdCustomFieldsValue":961,"Valore":"Tessile (Paglia)"},{"IdCustomFieldsValue":962,"Valore":"Cuir (1\/2 Veau)"},{"IdCustomFieldsValue":965,"Valore":"Metallic \/ Plastic trims"},{"IdCustomFieldsValue":966,"Valore":"Prodotto chimico"},{"IdCustomFieldsValue":967,"Valore":"Cuoio\/Pelle (Culatta)"},{"IdCustomFieldsValue":974,"Valore":"I-Pad Holder"},{"IdCustomFieldsValue":979,"Valore":"Tessue"},{"IdCustomFieldsValue":984,"Valore":"Cuoio\/Pelle (Bovina)"},{"IdCustomFieldsValue":987,"Valore":"Footwear"},{"IdCustomFieldsValue":988,"Valore":"Textile (PVC)"},{"IdCustomFieldsValue":994,"Valore":"AYERS F.C. MAC."},{"IdCustomFieldsValue":995,"Valore":"Quadrante di borsa completo di maniglia"},{"IdCustomFieldsValue":1005,"Valore":"Leather (Baby calf with hair on printed)"},{"IdCustomFieldsValue":1007,"Valore":"Metallic Trims"},{"IdCustomFieldsValue":1012,"Valore":"Accessoire metallique"},{"IdCustomFieldsValue":1019,"Valore":"Fibbia"},{"IdCustomFieldsValue":1033,"Valore":"Component for Footwear"},{"IdCustomFieldsValue":1037,"Valore":"Cuoio\/Pelle (Capretto)"},{"IdCustomFieldsValue":1038,"Valore":"Leather (Crust)"},{"IdCustomFieldsValue":1040,"Valore":"Cuoio\/Pelle (Esotico)"},{"IdCustomFieldsValue":1045,"Valore":"Componente di pelletteria (tintura costola)"},{"IdCustomFieldsValue":1046,"Valore":"Tessile (Accoppiato con pelle)"},{"IdCustomFieldsValue":1049,"Valore":"Tessile (Accopiato con PU)"},{"IdCustomFieldsValue":1077,"Valore":"Sintetici"},{"IdCustomFieldsValue":1107,"Valore":"Textile (Synthetic)"},{"IdCustomFieldsValue":1126,"Valore":"Sughero"},{"IdCustomFieldsValue":1158,"Valore":"Accoppiato"},{"IdCustomFieldsValue":1159,"Valore":"Zip"},{"IdCustomFieldsValue":1178,"Valore":"Cellulosa"},{"IdCustomFieldsValue":1179,"Valore":"Pochette"},{"IdCustomFieldsValue":1218,"Valore":"Cuir (Chevre)"},{"IdCustomFieldsValue":1260,"Valore":"Watch strap"},{"IdCustomFieldsValue":1261,"Valore":"Lamina"},{"IdCustomFieldsValue":1356,"Valore":"Pietra verniciata"},{"IdCustomFieldsValue":1362,"Valore":"Cartone"},{"IdCustomFieldsValue":1369,"Valore":"Upper"},{"IdCustomFieldsValue":1373,"Valore":"Cuoio\/Pelle (Struzzo)"},{"IdCustomFieldsValue":1375,"Valore":"Prodotto liquido"},{"IdCustomFieldsValue":1376,"Valore":"Cuoio\/Pelle (Lapin Rex)"},{"IdCustomFieldsValue":1378,"Valore":"Wood Button"},{"IdCustomFieldsValue":1381,"Valore":"Lattice"},{"IdCustomFieldsValue":1419,"Valore":"Coupled"},{"IdCustomFieldsValue":1428,"Valore":"Tessile (Lana)"},{"IdCustomFieldsValue":1430,"Valore":"Tomaia"},{"IdCustomFieldsValue":1435,"Valore":"Tessile (PU)"},{"IdCustomFieldsValue":1446,"Valore":"Filo"},{"IdCustomFieldsValue":1447,"Valore":"Polvere"},{"IdCustomFieldsValue":1452,"Valore":"Leather (Sheep)"},{"IdCustomFieldsValue":1465,"Valore":"Textile (Printed)"},{"IdCustomFieldsValue":1487,"Valore":"Plastic sample"},{"IdCustomFieldsValue":1495,"Valore":"Pigmento"},{"IdCustomFieldsValue":1502,"Valore":"Shanks"},{"IdCustomFieldsValue":1506,"Valore":"Button (Urea)"},{"IdCustomFieldsValue":1521,"Valore":"Pietra"},{"IdCustomFieldsValue":1523,"Valore":"Fabric sample"},{"IdCustomFieldsValue":1525,"Valore":"Cuoio\/Pelle (Pesce)"},{"IdCustomFieldsValue":1526,"Valore":"Button (Sydney)"},{"IdCustomFieldsValue":1563,"Valore":"Metal Powder"},{"IdCustomFieldsValue":1569,"Valore":"Liquid product"},{"IdCustomFieldsValue":1582,"Valore":"Paint"},{"IdCustomFieldsValue":1588,"Valore":"Laminated paper"},{"IdCustomFieldsValue":1589,"Valore":"Accessoire"},{"IdCustomFieldsValue":1597,"Valore":"Lucido"},{"IdCustomFieldsValue":1623,"Valore":"Cuoio\/Pelle (Anguilla)"},{"IdCustomFieldsValue":1626,"Valore":"Tessile (Cotone)"},{"IdCustomFieldsValue":1663,"Valore":"ABS"},{"IdCustomFieldsValue":1664,"Valore":"Leather (Bos Taurus)"},{"IdCustomFieldsValue":1731,"Valore":"Leather (Ayers)"},{"IdCustomFieldsValue":1732,"Valore":"Leather (Colubro)"},{"IdCustomFieldsValue":1733,"Valore":"Leather (Python)"},{"IdCustomFieldsValue":1736,"Valore":"Heel with Insole"},{"IdCustomFieldsValue":1737,"Valore":"Cuoio\/Pelle (Lapin)"},{"IdCustomFieldsValue":1739,"Valore":"Cuoio\/Pelle (Caimano)"},{"IdCustomFieldsValue":1743,"Valore":"Cuir (Agneau)"},{"IdCustomFieldsValue":1760,"Valore":"Leather (Kid)"},{"IdCustomFieldsValue":1781,"Valore":"Packaging Box"},{"IdCustomFieldsValue":1782,"Valore":"Packaging Cloth"},{"IdCustomFieldsValue":1803,"Valore":"Textile (Coated)"},{"IdCustomFieldsValue":1811,"Valore":"Leather (Reclaimed) "},{"IdCustomFieldsValue":1882,"Valore":"Accoppiato (Tessile\/Tessile)"},{"IdCustomFieldsValue":1913,"Valore":"Lycra"},{"IdCustomFieldsValue":1930,"Valore":"Cuoio\/Pelle (Lucertola)"},{"IdCustomFieldsValue":1981,"Valore":"Leather (Baby Goat)"},{"IdCustomFieldsValue":1987,"Valore":"Cover"},{"IdCustomFieldsValue":2003,"Valore":"Tracolla"},{"IdCustomFieldsValue":2079,"Valore":"Leather (Bull)"},{"IdCustomFieldsValue":2080,"Valore":"Leather (Ovine)"},{"IdCustomFieldsValue":2176,"Valore":"Tessile (Poliestere)"},{"IdCustomFieldsValue":2184,"Valore":"Cuoio\/Pelle (Lama)"},{"IdCustomFieldsValue":2203,"Valore":"Accessorio in pelle"},{"IdCustomFieldsValue":2259,"Valore":"Leather (Eel)"},{"IdCustomFieldsValue":2273,"Valore":"Accoppiato (Accessorio\/Pelle)"},{"IdCustomFieldsValue":2274,"Valore":"Accoppiato (Accessorio\/Tessile)"},{"IdCustomFieldsValue":2276,"Valore":"Accessorio in tessuto"},{"IdCustomFieldsValue":2376,"Valore":"Cuoio rigenerato"},{"IdCustomFieldsValue":2460,"Valore":"Regenerated Leather"},{"IdCustomFieldsValue":2465,"Valore":"Resina acrilica"},{"IdCustomFieldsValue":2467,"Valore":"Bonded Leather"},{"IdCustomFieldsValue":2515,"Valore":"Tessile (Seta)"},{"IdCustomFieldsValue":2528,"Valore":"Cuoio"},{"IdCustomFieldsValue":2540,"Valore":"Paper packaging"},{"IdCustomFieldsValue":2541,"Valore":"Plastic packaging"},{"IdCustomFieldsValue":2576,"Valore":"Zip in Nylon"},{"IdCustomFieldsValue":2577,"Valore":"Nylon Zip"},{"IdCustomFieldsValue":2634,"Valore":"Footwear (Sandal)"},{"IdCustomFieldsValue":2644,"Valore":"Leather (Alligator)"},{"IdCustomFieldsValue":2716,"Valore":"Powder"},{"IdCustomFieldsValue":2770,"Valore":"Tissu"},{"IdCustomFieldsValue":2773,"Valore":"TBC"},{"IdCustomFieldsValue":2781,"Valore":"Leather (Nappa)"},{"IdCustomFieldsValue":3048,"Valore":"Leather (Bovine Split)"},{"IdCustomFieldsValue":3086,"Valore":"Valigia"},{"IdCustomFieldsValue":3087,"Valore":"Leather (Fox)"},{"IdCustomFieldsValue":3089,"Valore":"Cuoio\/Pelle (Mucca)"},{"IdCustomFieldsValue":3204,"Valore":"Tessile (Raso)"},{"IdCustomFieldsValue":3205,"Valore":"Ecopelle"},{"IdCustomFieldsValue":3212,"Valore":"Tessile (Termosaldatura)"},{"IdCustomFieldsValue":3215,"Valore":"Watch case"},{"IdCustomFieldsValue":3226,"Valore":"Shoulder strap"},{"IdCustomFieldsValue":3244,"Valore":"Tessile (Microfibra)"},{"IdCustomFieldsValue":3252,"Valore":"Spandex"},{"IdCustomFieldsValue":3259,"Valore":"Glue"},{"IdCustomFieldsValue":3264,"Valore":"EVA"},{"IdCustomFieldsValue":3284,"Valore":"Leather (Horse)"},{"IdCustomFieldsValue":3308,"Valore":"Soletto"},{"IdCustomFieldsValue":3312,"Valore":"Textile (PU)"},{"IdCustomFieldsValue":3316,"Valore":"Cufflinks"},{"IdCustomFieldsValue":3348,"Valore":"Synthetic Fur"},{"IdCustomFieldsValue":3355,"Valore":"Resina poliuretanica ad acqua"},{"IdCustomFieldsValue":3356,"Valore":"Resina siliconica"},{"IdCustomFieldsValue":3437,"Valore":"Leather (Whips)"},{"IdCustomFieldsValue":3438,"Valore":"Leather (Karung)"},{"IdCustomFieldsValue":3448,"Valore":"Swimming cap"},{"IdCustomFieldsValue":3458,"Valore":"Leather (Crocodile)"},{"IdCustomFieldsValue":3459,"Valore":"Leather (Crocodile Niloticus)"},{"IdCustomFieldsValue":3464,"Valore":"Leather (Cayman)"},{"IdCustomFieldsValue":3466,"Valore":"Leather (Ostrich)"},{"IdCustomFieldsValue":3471,"Valore":"Accessorio Metallico (Ottone)"},{"IdCustomFieldsValue":3486,"Valore":"Leather (Fish)"},{"IdCustomFieldsValue":3495,"Valore":"Textile (Woven)"},{"IdCustomFieldsValue":3510,"Valore":"Tessile (Ortogonale)"},{"IdCustomFieldsValue":3512,"Valore":"Lacquer"},{"IdCustomFieldsValue":3513,"Valore":"Textile (Cotton)"},{"IdCustomFieldsValue":3522,"Valore":"Cuoio\/Pelle (Coccodrillo Porosus)"},{"IdCustomFieldsValue":3737,"Valore":"Cuir (Alligator)"},{"IdCustomFieldsValue":3752,"Valore":"Canvas"},{"IdCustomFieldsValue":3834,"Valore":"Leather (Lizard)"},{"IdCustomFieldsValue":3844,"Valore":"LV"},{"IdCustomFieldsValue":3850,"Valore":"Textile (Synthetic & blend)"},{"IdCustomFieldsValue":3854,"Valore":"Pelliccia ecologica"},{"IdCustomFieldsValue":3856,"Valore":"Insole"},{"IdCustomFieldsValue":3861,"Valore":"Textile (Natural) + Prints\/Coating"},{"IdCustomFieldsValue":3875,"Valore":"Trolley"},{"IdCustomFieldsValue":3877,"Valore":"Rubber"},{"IdCustomFieldsValue":3878,"Valore":"Rubber + Plastic"},{"IdCustomFieldsValue":4032,"Valore":"Fake leather"},{"IdCustomFieldsValue":4097,"Valore":"Produit fini"},{"IdCustomFieldsValue":4121,"Valore":"Materiali adesivi in Nylon"},{"IdCustomFieldsValue":4138,"Valore":"Cuir (Porosus)"},{"IdCustomFieldsValue":4139,"Valore":"Cuir (Niloticus)"},{"IdCustomFieldsValue":4141,"Valore":"Gloves"},{"IdCustomFieldsValue":4146,"Valore":"Tessile (Rafia)"},{"IdCustomFieldsValue":4159,"Valore":"Raw material"},{"IdCustomFieldsValue":4165,"Valore":"Textile (Lace)"},{"IdCustomFieldsValue":4169,"Valore":"Tessile (Tulle)"},{"IdCustomFieldsValue":4188,"Valore":"Polycarbonate"},{"IdCustomFieldsValue":4190,"Valore":"Wax"},{"IdCustomFieldsValue":4202,"Valore":"Tessile (Rete)"},{"IdCustomFieldsValue":4203,"Valore":"Tessile (Neoprene)"},{"IdCustomFieldsValue":4232,"Valore":"Sludge"},{"IdCustomFieldsValue":4249,"Valore":"Feather"},{"IdCustomFieldsValue":4264,"Valore":"Legno"},{"IdCustomFieldsValue":4281,"Valore":"Textile (Nylon)"},{"IdCustomFieldsValue":4285,"Valore":"Textile (Knitted)"},{"IdCustomFieldsValue":4402,"Valore":"Cuoio\/Pelle (Porosus)"},{"IdCustomFieldsValue":4422,"Valore":"Tights"},{"IdCustomFieldsValue":4564,"Valore":"Sock"},{"IdCustomFieldsValue":4698,"Valore":"Wood"},{"IdCustomFieldsValue":4720,"Valore":"Cuoio\/Pelle (Ovinocaprino)"},{"IdCustomFieldsValue":5063,"Valore":"Synth\u00e9tique"},{"IdCustomFieldsValue":5089,"Valore":"Solid Product"},{"IdCustomFieldsValue":5106,"Valore":"Cuoio\/Pelle (Cocco)"},{"IdCustomFieldsValue":5314,"Valore":"Cuoio\/Pelle (\u00bd bovina)"},{"IdCustomFieldsValue":5372,"Valore":"Plastique accessoires"},{"IdCustomFieldsValue":5484,"Valore":"Hat"},{"IdCustomFieldsValue":5689,"Valore":"Produit liquide"},{"IdCustomFieldsValue":6528,"Valore":"Textile accessories"},{"IdCustomFieldsValue":8580,"Valore":"Poussi\u00e8re"},{"IdCustomFieldsValue":8778,"Valore":"Eco-Leather"},{"IdCustomFieldsValue":9269,"Valore":"Polietilene"},{"IdCustomFieldsValue":9602,"Valore":"Silk"},{"IdCustomFieldsValue":11227,"Valore":"Bois"},{"IdCustomFieldsValue":11228,"Valore":"Produit solide"},{"IdCustomFieldsValue":12432,"Valore":"Polyester"},{"IdCustomFieldsValue":12597,"Valore":"Mousse"},{"IdCustomFieldsValue":12612,"Valore":"Papier"},{"IdCustomFieldsValue":12689,"Valore":"Accessoires en plastique"},{"IdCustomFieldsValue":13244,"Valore":"Cuir (Autreches)"},{"IdCustomFieldsValue":13256,"Valore":"TPU"},{"IdCustomFieldsValue":13257,"Valore":"Gomma"},{"IdCustomFieldsValue":13726,"Valore":"Micro"},{"IdCustomFieldsValue":14025,"Valore":"Tessile (Nylon)"},{"IdCustomFieldsValue":14173,"Valore":"Poliuretano"},{"IdCustomFieldsValue":14238,"Valore":"Accessorio plastico"},{"IdCustomFieldsValue":14239,"Valore":"Plastica"},{"IdCustomFieldsValue":14633,"Valore":"Cuir (Bovin)"},{"IdCustomFieldsValue":14927,"Valore":"Cuoio\/Pelle (Varano)"}],"163":[{"IdCustomFieldsValue":248,"Valore":"a cura del laboratorio secondo la UNI EN ISO 2418:2006 "},{"IdCustomFieldsValue":251,"Valore":"a cura del committente "},{"IdCustomFieldsValue":278,"Valore":"done by the laboratory according to the UNI EN ISO 2418:2006 "},{"IdCustomFieldsValue":281,"Valore":"done by the client "},{"IdCustomFieldsValue":649,"Valore":"the specimen has been sampled from the footwear supplied by the client"},{"IdCustomFieldsValue":677,"Valore":"materiale campionato da borsa fornita dal cliente"},{"IdCustomFieldsValue":727,"Valore":"the specimen has been sampled from the bag supplied by the client"},{"IdCustomFieldsValue":755,"Valore":"par le client"},{"IdCustomFieldsValue":878,"Valore":"effectu\u00e9e par le laboratoire selon la norme UNI EN ISO 2418:2006"},{"IdCustomFieldsValue":1029,"Valore":"the specimen has been sampled from the wallet supplied by the client"},{"IdCustomFieldsValue":1627,"Valore":"materiale campionato da calzatura fornita dal cliente"},{"IdCustomFieldsValue":1628,"Valore":"materiale campionato da portafogli fornito dal cliente"},{"IdCustomFieldsValue":4716,"Valore":"Grab, sampled by the Lab"},{"IdCustomFieldsValue":5355,"Valore":"Material sampled by the Lab."},{"IdCustomFieldsValue":9142,"Valore":"materiale campionato da cappello fornito dal cliente"}],"165":[{"IdCustomFieldsValue":825,"Valore":"Nessuno, come da accordi con il cliente"},{"IdCustomFieldsValue":826,"Valore":"None, as agreed with the client"},{"IdCustomFieldsValue":1632,"Valore":"Aucun, selon accords avec le client"},{"IdCustomFieldsValue":2088,"Valore":"24\u00b12h; 21\u00b11\u00b0C; 65\u00b12%U.R. (Se richiesto dal Metodo di Prova, analisi eseguita in atmosfera standard)"},{"IdCustomFieldsValue":2089,"Valore":"24\u00b12h; 21\u00b11\u00b0C; 65\u00b12% R.H. (If required by the test method, analysis carried out in standard atmosphere)"},{"IdCustomFieldsValue":2450,"Valore":"(According to UNI EN ISO 2419:2012) 23\u00b0+\/-2\u00b0C; 50+\/-5% R.H. (If required by the test method, trial carried out in standard atmosphere)"},{"IdCustomFieldsValue":2552,"Valore":"Atmosfera di condizionamento e di prova: 20\u00b12\u00b0, 65\u00b15% UR"},{"IdCustomFieldsValue":3187,"Valore":"Il campione \u00e8 conservato a temperatura <4\u00b0C"},{"IdCustomFieldsValue":3188,"Valore":"the sample is stored at temperature <4\u00b0C"},{"IdCustomFieldsValue":6133,"Valore":"24\u00b12h; 21\u00b11\u00b0C; 65\u00b12%U.R. (Si prevu par le m\u00e9thode du test, analyse execut\u00e9e en atmosph\u00e8re standardis\u00e9e)"},{"IdCustomFieldsValue":15005,"Valore":"24\u00b12h; 23\u00b12\u00b0C; 50\u00b15%U.R. (Se richiesto dal Metodo di Prova, analisi eseguita in atmosfera standard)"},{"IdCustomFieldsValue":15006,"Valore":"24\u00b12h; 23\u00b12\u00b0C; 50\u00b15% R.H. (If required by the test method, analysis carried out in standard atmosphere)"},{"IdCustomFieldsValue":15007,"Valore":"24\u00b12h; 23\u00b12\u00b0C; 50\u00b15%U.R. (Si prevu par le m\u00e9thode du test, analyse execut\u00e9e en atmosph\u00e8re standardis\u00e9e)"}],"169":[{"IdCustomFieldsValue":672,"Valore":"Si"},{"IdCustomFieldsValue":673,"Valore":"No"},{"IdCustomFieldsValue":778,"Valore":"Si se FAIL"},{"IdCustomFieldsValue":4408,"Valore":"Procedura Standard"}],"170":[{"IdCustomFieldsValue":674,"Valore":"No"},{"IdCustomFieldsValue":675,"Valore":"Si"},{"IdCustomFieldsValue":777,"Valore":"Si se FAIL"},{"IdCustomFieldsValue":4409,"Valore":"Procedura Standard"}],"171":[{"IdCustomFieldsValue":668,"Valore":"Si"},{"IdCustomFieldsValue":669,"Valore":"No"},{"IdCustomFieldsValue":670,"Valore":"Si se FAIL"},{"IdCustomFieldsValue":671,"Valore":"Si FINE MESE"},{"IdCustomFieldsValue":1013,"Valore":"SI OGNI GIOVED\u00ec"},{"IdCustomFieldsValue":1185,"Valore":"SI due volte alla settimana"},{"IdCustomFieldsValue":2216,"Valore":"SI una volta alla settimana"},{"IdCustomFieldsValue":4410,"Valore":"Procedura Standard"},{"IdCustomFieldsValue":5722,"Valore":"SI stesso giorno"}],"181":[{"IdCustomFieldsValue":744,"Valore":"Il campione \u00e8 preparato secondo la ISO 4044 (quando richiesto dal metodo di prova)."},{"IdCustomFieldsValue":745,"Valore":"Sample is prepared according to ISO 4044 (whenever requested by the test method)"},{"IdCustomFieldsValue":753,"Valore":"L\u2019\u00e9chantillon est pr\u00e9par\u00e9 conform\u00e9ment \u00e0 la norme ISO 4044 (lorsque cela est requis par la m\u00e9thode d\u2019essai)."}],"236":[{"IdCustomFieldsValue":1468,"Valore":"Consegnato a mano"},{"IdCustomFieldsValue":1469,"Valore":"Inviato tramite corriere"},{"IdCustomFieldsValue":4945,"Valore":"Navetta Scandicci"}],"241":[{"IdCustomFieldsValue":1603,"Valore":"a Pacchetto"},{"IdCustomFieldsValue":1604,"Valore":">3"},{"IdCustomFieldsValue":1605,"Valore":"<=3"}],"246":[{"IdCustomFieldsValue":1753,"Valore":"BV Shangai"},{"IdCustomFieldsValue":1755,"Valore":"BV Hamburg- Eva Maria Benkhoff"},{"IdCustomFieldsValue":1756,"Valore":"BV Turkey"},{"IdCustomFieldsValue":1757,"Valore":"BV UK"},{"IdCustomFieldsValue":1937,"Valore":"BV Vietnam"},{"IdCustomFieldsValue":1938,"Valore":"BV Schwerin"},{"IdCustomFieldsValue":1939,"Valore":"BV Guangzhou"},{"IdCustomFieldsValue":1940,"Valore":"BV France"},{"IdCustomFieldsValue":1941,"Valore":"No outsourcing"},{"IdCustomFieldsValue":1944,"Valore":"Coventya"},{"IdCustomFieldsValue":1945,"Valore":"Cimac- P.Biglia"},{"IdCustomFieldsValue":2290,"Valore":"Ricotest"},{"IdCustomFieldsValue":2403,"Valore":"LBS"},{"IdCustomFieldsValue":2696,"Valore":"BV Korea"},{"IdCustomFieldsValue":2998,"Valore":"BV Hong Kong"},{"IdCustomFieldsValue":3058,"Valore":"J.S. Hamilton Poland S.A."},{"IdCustomFieldsValue":3191,"Valore":"BV Schwerin - BV Turkey"},{"IdCustomFieldsValue":3341,"Valore":"BV Guangzhou, BV Shangai"},{"IdCustomFieldsValue":3350,"Valore":"BV Guangzhou, BV Honk Kong"},{"IdCustomFieldsValue":3406,"Valore":"BV Putian - Lily Li"},{"IdCustomFieldsValue":4239,"Valore":"BV India"},{"IdCustomFieldsValue":4282,"Valore":"Laboraitore Eric Beucher"},{"IdCustomFieldsValue":4420,"Valore":"HerAmbiente "},{"IdCustomFieldsValue":4679,"Valore":"Chemi-Lab"},{"IdCustomFieldsValue":5745,"Valore":"BV USA, Buffalo - NY "},{"IdCustomFieldsValue":6450,"Valore":"BV Turkey- Ahmet Korkut + BV Hong Kong- Jimmy Wong\/Tasman Tai\r\n"},{"IdCustomFieldsValue":8098,"Valore":"BV Vietnam- Joy Nguyen + BV Turkey- Ahmet Korkut"},{"IdCustomFieldsValue":8755,"Valore":"Appliance Engineering Technology France SAS"},{"IdCustomFieldsValue":9316,"Valore":"BV Vietnam- Joy Nguyen + BV Guangzhou"},{"IdCustomFieldsValue":9483,"Valore":"Neosis s.r.l"},{"IdCustomFieldsValue":9645,"Valore":"Environ Lab"},{"IdCustomFieldsValue":11325,"Valore":"Neosis s.r.l + BV Honk Kong"},{"IdCustomFieldsValue":11342,"Valore":"Beta analythics"},{"IdCustomFieldsValue":12678,"Valore":"BV Honk Kong + BV Shangai"},{"IdCustomFieldsValue":13717,"Valore":"BV Thailand"},{"IdCustomFieldsValue":13917,"Valore":"BV France, BV Shangai"},{"IdCustomFieldsValue":14877,"Valore":"BV Shangai - BV Hong Kong"}],"252":[{"IdCustomFieldsValue":1887,"Valore":"Regular"},{"IdCustomFieldsValue":1888,"Valore":"Express (1-2 Working Days)"},{"IdCustomFieldsValue":1889,"Valore":"Urgent (3 Working Days)"}],"253":[{"IdCustomFieldsValue":1891,"Valore":"Yes"},{"IdCustomFieldsValue":1892,"Valore":"No"}],"261":[{"IdCustomFieldsValue":1978,"Valore":"2C Cina"},{"IdCustomFieldsValue":2442,"Valore":"N\/A"}],"771":[{"IdCustomFieldsValue":8595,"Valore":"PASS"},{"IdCustomFieldsValue":8596,"Valore":"FAIL"},{"IdCustomFieldsValue":8598,"Valore":"N\/A"}],"772":[{"IdCustomFieldsValue":8599,"Valore":"PASS"},{"IdCustomFieldsValue":8600,"Valore":"FAIL"},{"IdCustomFieldsValue":8601,"Valore":"N\/A"}],"773":[{"IdCustomFieldsValue":8602,"Valore":"PASS"},{"IdCustomFieldsValue":8603,"Valore":"FAIL"},{"IdCustomFieldsValue":8604,"Valore":"N\/A"},{"IdCustomFieldsValue":8605,"Valore":"DATA"}],"1083":[{"IdCustomFieldsValue":13482,"Valore":"Moncler Compliance_GT"},{"IdCustomFieldsValue":13488,"Valore":"Moncler Ufficio tecnico_MC"},{"IdCustomFieldsValue":13495,"Valore":"Moncler Compliance_EM"},{"IdCustomFieldsValue":13496,"Valore":"Moncler Compliance_MB"},{"IdCustomFieldsValue":13497,"Valore":"Moncler Compliance_CB"},{"IdCustomFieldsValue":13526,"Valore":"Moncler Compliance_CS"},{"IdCustomFieldsValue":13530,"Valore":"Moncler Compliance_FZ"},{"IdCustomFieldsValue":13554,"Valore":"Moncler Ufficio tecnico_AZ"},{"IdCustomFieldsValue":13662,"Valore":"Moncler Ufficio tecnico_LL"},{"IdCustomFieldsValue":13727,"Valore":"Moncler Ufficio tecnico_AU"},{"IdCustomFieldsValue":13786,"Valore":"Moncler Compliance_AC"},{"IdCustomFieldsValue":13945,"Valore":"Moncler Compliance_BZ"},{"IdCustomFieldsValue":14006,"Valore":"Moncler Compliance_GR"},{"IdCustomFieldsValue":14818,"Valore":"Moncler Ufficio tecnico_LC"},{"IdCustomFieldsValue":14910,"Valore":"Moncler Ufficio tecnico_FV"}]} \ No newline at end of file +{"146":[{"IdCustomFieldsValue":235,"Valore":"Pigmentato"},{"IdCustomFieldsValue":236,"Valore":"Anilina"},{"IdCustomFieldsValue":237,"Valore":"Verniciato"},{"IdCustomFieldsValue":238,"Valore":"Laminato"},{"IdCustomFieldsValue":259,"Valore":"Semi-Anilina"},{"IdCustomFieldsValue":274,"Valore":"Scamosciato"},{"IdCustomFieldsValue":305,"Valore":"Pigmented"},{"IdCustomFieldsValue":306,"Valore":"Aniline"},{"IdCustomFieldsValue":307,"Valore":"Patent"},{"IdCustomFieldsValue":308,"Valore":"Metallic"},{"IdCustomFieldsValue":309,"Valore":"Semi-Aniline"},{"IdCustomFieldsValue":310,"Valore":"Suede"},{"IdCustomFieldsValue":311,"Valore":"Nubuck"},{"IdCustomFieldsValue":336,"Valore":"Cavallino"},{"IdCustomFieldsValue":344,"Valore":"Abrasivato"},{"IdCustomFieldsValue":500,"Valore":"Gommato"},{"IdCustomFieldsValue":528,"Valore":"Paillettes"},{"IdCustomFieldsValue":538,"Valore":"PU"},{"IdCustomFieldsValue":559,"Valore":"Tintura di Botte"},{"IdCustomFieldsValue":570,"Valore":"Crosta"},{"IdCustomFieldsValue":572,"Valore":"Semianilina\/Stampato"},{"IdCustomFieldsValue":644,"Valore":"Accoppiato"},{"IdCustomFieldsValue":657,"Valore":"Serigrafato"},{"IdCustomFieldsValue":661,"Valore":"Stampato"},{"IdCustomFieldsValue":691,"Valore":"Brush-Off"},{"IdCustomFieldsValue":697,"Valore":"Crust"},{"IdCustomFieldsValue":707,"Valore":"Lucido Lissato"},{"IdCustomFieldsValue":729,"Valore":"Shearling"},{"IdCustomFieldsValue":733,"Valore":"Printed"},{"IdCustomFieldsValue":750,"Valore":"Ink-Jet"},{"IdCustomFieldsValue":804,"Valore":"Fur"},{"IdCustomFieldsValue":874,"Valore":"Esotico"},{"IdCustomFieldsValue":896,"Valore":"Shearling con lato carne scamosciato"},{"IdCustomFieldsValue":959,"Valore":"Ink-jet\/ Con film PU \"By-Cast\""},{"IdCustomFieldsValue":970,"Valore":"Anilina\/Ink-jet"},{"IdCustomFieldsValue":1020,"Valore":"Coated"},{"IdCustomFieldsValue":1021,"Valore":"By-Cast"},{"IdCustomFieldsValue":1024,"Valore":"Perlato"},{"IdCustomFieldsValue":1025,"Valore":"Pearled"},{"IdCustomFieldsValue":1030,"Valore":"Pelo"},{"IdCustomFieldsValue":1035,"Valore":"Glitterato"},{"IdCustomFieldsValue":1099,"Valore":"Transfer"},{"IdCustomFieldsValue":1111,"Valore":"Coupled"},{"IdCustomFieldsValue":1153,"Valore":"Saffiano"},{"IdCustomFieldsValue":1186,"Valore":"Pigmentato\/Accoppiato"},{"IdCustomFieldsValue":1238,"Valore":"Aniline\/Fixed"},{"IdCustomFieldsValue":1240,"Valore":"Laminated Foil Finish"},{"IdCustomFieldsValue":1348,"Valore":"Con applicazioni"},{"IdCustomFieldsValue":1349,"Valore":"Pony calf"},{"IdCustomFieldsValue":1415,"Valore":"Glittered"},{"IdCustomFieldsValue":1437,"Valore":"Scraped"},{"IdCustomFieldsValue":1445,"Valore":"Resinato"},{"IdCustomFieldsValue":1620,"Valore":"Stampa digitale"},{"IdCustomFieldsValue":1661,"Valore":"Laminato parziale"},{"IdCustomFieldsValue":1734,"Valore":"Hair"},{"IdCustomFieldsValue":1787,"Valore":"Smerigliato Rifinito"},{"IdCustomFieldsValue":1827,"Valore":"Uncoated"},{"IdCustomFieldsValue":1828,"Valore":"Nappa"},{"IdCustomFieldsValue":1942,"Valore":"M\u00e9tallique "},{"IdCustomFieldsValue":1943,"Valore":"Camoscina"},{"IdCustomFieldsValue":1974,"Valore":"Pigment\u00e9"},{"IdCustomFieldsValue":2002,"Valore":"Partial metallic finish"},{"IdCustomFieldsValue":2551,"Valore":"Coated con glitter"},{"IdCustomFieldsValue":3107,"Valore":"Metallic Suede"},{"IdCustomFieldsValue":3208,"Valore":"Plotter"},{"IdCustomFieldsValue":3216,"Valore":"Serigrafia con fissativo"},{"IdCustomFieldsValue":3236,"Valore":"Super Natural"},{"IdCustomFieldsValue":3239,"Valore":"Velour"},{"IdCustomFieldsValue":3251,"Valore":"Canvas"},{"IdCustomFieldsValue":3328,"Valore":"Resina stirata"},{"IdCustomFieldsValue":3335,"Valore":"Lucido"},{"IdCustomFieldsValue":3364,"Valore":"Palmellato"},{"IdCustomFieldsValue":3365,"Valore":"Volanato naturale"},{"IdCustomFieldsValue":3366,"Valore":"Trattamento Scotchgard"},{"IdCustomFieldsValue":3367,"Valore":"Passante in botte"},{"IdCustomFieldsValue":3370,"Valore":"Embroidery"},{"IdCustomFieldsValue":3371,"Valore":"Patchwork lettering"},{"IdCustomFieldsValue":3409,"Valore":"Tinto Pezza"},{"IdCustomFieldsValue":3410,"Valore":"Pronto per Tinta"},{"IdCustomFieldsValue":3411,"Valore":"Tinto Filo"},{"IdCustomFieldsValue":3412,"Valore":"Greggio"},{"IdCustomFieldsValue":3413,"Valore":"Vacchetta"},{"IdCustomFieldsValue":3424,"Valore":"Naturale"},{"IdCustomFieldsValue":3442,"Valore":"Barrel dyeing"},{"IdCustomFieldsValue":3454,"Valore":"Split leather with film"},{"IdCustomFieldsValue":3455,"Valore":"Printed Suede"},{"IdCustomFieldsValue":3460,"Valore":"Pigmented\/Patent"},{"IdCustomFieldsValue":3468,"Valore":"Non rifinito"},{"IdCustomFieldsValue":3482,"Valore":"Cruck"},{"IdCustomFieldsValue":3491,"Valore":"Stampa serigrafica"},{"IdCustomFieldsValue":3494,"Valore":"Fissativo all'acqua"},{"IdCustomFieldsValue":3498,"Valore":"Tintura"},{"IdCustomFieldsValue":3506,"Valore":"Rovesciato"},{"IdCustomFieldsValue":3511,"Valore":"Spalmato"},{"IdCustomFieldsValue":3514,"Valore":"Serigraphy"},{"IdCustomFieldsValue":3867,"Valore":"None"},{"IdCustomFieldsValue":4052,"Valore":"Pigmentato Abrasivato"},{"IdCustomFieldsValue":4082,"Valore":"Full Grain"},{"IdCustomFieldsValue":4109,"Valore":"Opaco"},{"IdCustomFieldsValue":4124,"Valore":"Embossed"},{"IdCustomFieldsValue":4135,"Valore":"Mat"},{"IdCustomFieldsValue":4136,"Valore":"Lisse"},{"IdCustomFieldsValue":4137,"Valore":"Coton"},{"IdCustomFieldsValue":4143,"Valore":"Alo\u00e9"},{"IdCustomFieldsValue":4144,"Valore":"Torino"},{"IdCustomFieldsValue":4145,"Valore":"Microsuede"},{"IdCustomFieldsValue":4151,"Valore":"Miroir"},{"IdCustomFieldsValue":4166,"Valore":"Stampa UV"},{"IdCustomFieldsValue":4185,"Valore":"Lavable"},{"IdCustomFieldsValue":4219,"Valore":"Radika"},{"IdCustomFieldsValue":4220,"Valore":"Natural"},{"IdCustomFieldsValue":4222,"Valore":"Abilo N\u00e9on"},{"IdCustomFieldsValue":4250,"Valore":"Canyon"},{"IdCustomFieldsValue":4257,"Valore":"Alo\u00e9 Shiny"},{"IdCustomFieldsValue":4258,"Valore":"Lisse\/Recoupe"},{"IdCustomFieldsValue":4280,"Valore":"Water-repellent"},{"IdCustomFieldsValue":4283,"Valore":"Lisse\/Entrepeaux"},{"IdCustomFieldsValue":4286,"Valore":"Metallo liquido spray + Stampa"},{"IdCustomFieldsValue":4288,"Valore":"Tinto"},{"IdCustomFieldsValue":4388,"Valore":"Cerato"},{"IdCustomFieldsValue":4389,"Valore":"Mat\/Recoupe"},{"IdCustomFieldsValue":4392,"Valore":"Pigmentato\/Poliuretanico finale"},{"IdCustomFieldsValue":4393,"Valore":"Semianilina Laminato"},{"IdCustomFieldsValue":4394,"Valore":"Semianilina Pigmentato"},{"IdCustomFieldsValue":4399,"Valore":"Primitivo"},{"IdCustomFieldsValue":4400,"Valore":"Ombre"},{"IdCustomFieldsValue":4401,"Valore":"Anilina Pigmentato"},{"IdCustomFieldsValue":4405,"Valore":"Caresse"},{"IdCustomFieldsValue":4429,"Valore":"Ultras\/Recoupe"},{"IdCustomFieldsValue":4552,"Valore":"Semi-Anilina + Stampa ink jet"},{"IdCustomFieldsValue":4563,"Valore":"Torino Ultra Brillante"},{"IdCustomFieldsValue":4573,"Valore":"Supernatural\/aniline"},{"IdCustomFieldsValue":5054,"Valore":"Peau d'ange"},{"IdCustomFieldsValue":5128,"Valore":"Mirage"},{"IdCustomFieldsValue":5129,"Valore":"Mirage\/Relance"},{"IdCustomFieldsValue":5130,"Valore":"Croute Chrome"},{"IdCustomFieldsValue":5309,"Valore":"PU Coated"},{"IdCustomFieldsValue":5315,"Valore":"Pigmentato stampato"},{"IdCustomFieldsValue":5498,"Valore":"Rubberized"},{"IdCustomFieldsValue":5610,"Valore":"By-Cast PU"},{"IdCustomFieldsValue":5615,"Valore":"Lamina liquida"},{"IdCustomFieldsValue":6193,"Valore":"Nubuck\/Rubber coated"},{"IdCustomFieldsValue":8523,"Valore":"Total print"},{"IdCustomFieldsValue":12774,"Valore":"Etoffe"},{"IdCustomFieldsValue":12775,"Valore":"Croute"},{"IdCustomFieldsValue":12776,"Valore":"Miroir Light"},{"IdCustomFieldsValue":12777,"Valore":"Etriviere"},{"IdCustomFieldsValue":12949,"Valore":"Vernice (Vernice\/Semianilina)"},{"IdCustomFieldsValue":13501,"Valore":"Seta Lux"},{"IdCustomFieldsValue":13733,"Valore":"Aniline Pigmented"},{"IdCustomFieldsValue":13807,"Valore":"Naturale\/Semilucido"},{"IdCustomFieldsValue":14047,"Valore":"Fissativo"},{"IdCustomFieldsValue":14140,"Valore":"Nubuk"},{"IdCustomFieldsValue":14141,"Valore":"Satin Soft"},{"IdCustomFieldsValue":14142,"Valore":"Priene\/ Millenium "},{"IdCustomFieldsValue":14887,"Valore":"Pigmented\/Metal"}],"147":[{"IdCustomFieldsValue":239,"Valore":"Cromo"},{"IdCustomFieldsValue":240,"Valore":"Vegetale"},{"IdCustomFieldsValue":272,"Valore":"\/"},{"IdCustomFieldsValue":273,"Valore":"Mista"},{"IdCustomFieldsValue":301,"Valore":"Chrome"},{"IdCustomFieldsValue":302,"Valore":"Vegetal"},{"IdCustomFieldsValue":303,"Valore":"Mixed"},{"IdCustomFieldsValue":519,"Valore":"White"},{"IdCustomFieldsValue":520,"Valore":"Bianca"},{"IdCustomFieldsValue":566,"Valore":"Chrome \/ Synthetic"},{"IdCustomFieldsValue":682,"Valore":"Sintetica"},{"IdCustomFieldsValue":1001,"Valore":"Vegetallizzato"},{"IdCustomFieldsValue":1054,"Valore":"Synthetic"},{"IdCustomFieldsValue":1208,"Valore":"Allume"},{"IdCustomFieldsValue":1264,"Valore":"Minerale"},{"IdCustomFieldsValue":1535,"Valore":"Blanche"},{"IdCustomFieldsValue":2447,"Valore":"Mineral"},{"IdCustomFieldsValue":2590,"Valore":"Semi-Vegetal"},{"IdCustomFieldsValue":2712,"Valore":"Metal free"},{"IdCustomFieldsValue":2737,"Valore":"Semi-Chrome"},{"IdCustomFieldsValue":2777,"Valore":"Wet Blue"},{"IdCustomFieldsValue":3090,"Valore":"Non conciata"},{"IdCustomFieldsValue":3199,"Valore":"Chrome free"},{"IdCustomFieldsValue":3469,"Valore":"Slow vegetal"},{"IdCustomFieldsValue":3527,"Valore":"Wet White"},{"IdCustomFieldsValue":3821,"Valore":"Sintetica + Cromo"},{"IdCustomFieldsValue":3888,"Valore":"Non metallica"},{"IdCustomFieldsValue":4568,"Valore":"Mineral"},{"IdCustomFieldsValue":5390,"Valore":"Cromo \/ Sintetico"},{"IdCustomFieldsValue":5398,"Valore":"Synthetique"},{"IdCustomFieldsValue":5647,"Valore":"Pickel"},{"IdCustomFieldsValue":6192,"Valore":"Chrome\/Mixed"},{"IdCustomFieldsValue":8709,"Valore":"Mixte"},{"IdCustomFieldsValue":11356,"Valore":"Mista Cromo"},{"IdCustomFieldsValue":13713,"Valore":"Bio"},{"IdCustomFieldsValue":13714,"Valore":"Bio\/Metal free"}],"150":[{"IdCustomFieldsValue":261,"Valore":"Pelletteria"},{"IdCustomFieldsValue":262,"Valore":"Calzatura (Tomaio)"},{"IdCustomFieldsValue":263,"Valore":"Calzatura (Fodera)"},{"IdCustomFieldsValue":264,"Valore":"Abbigliamento"},{"IdCustomFieldsValue":265,"Valore":"Arredamento"},{"IdCustomFieldsValue":266,"Valore":"Calzatura\/Pelletteria"},{"IdCustomFieldsValue":267,"Valore":"Cinture"},{"IdCustomFieldsValue":269,"Valore":"Piccola Pelletteria (Portafogli)"},{"IdCustomFieldsValue":270,"Valore":"Valigeria"},{"IdCustomFieldsValue":271,"Valore":"\/"},{"IdCustomFieldsValue":285,"Valore":"Leathergoods"},{"IdCustomFieldsValue":286,"Valore":"Footwear (Upper)"},{"IdCustomFieldsValue":287,"Valore":"Footwear (Lining)"},{"IdCustomFieldsValue":288,"Valore":"Apparel"},{"IdCustomFieldsValue":289,"Valore":"Furnishing"},{"IdCustomFieldsValue":290,"Valore":"Footwear\/Leathergoods"},{"IdCustomFieldsValue":291,"Valore":"Belts"},{"IdCustomFieldsValue":292,"Valore":"Watchstrap"},{"IdCustomFieldsValue":293,"Valore":"Small Leathergood"},{"IdCustomFieldsValue":338,"Valore":"Calzatura"},{"IdCustomFieldsValue":440,"Valore":"Footwear"},{"IdCustomFieldsValue":474,"Valore":"Apparel Trim"},{"IdCustomFieldsValue":495,"Valore":"Pelletteria (Fodera)"},{"IdCustomFieldsValue":582,"Valore":"Leathergoods (Bag)"},{"IdCustomFieldsValue":598,"Valore":"Pelletteria (Borsa)"},{"IdCustomFieldsValue":637,"Valore":"Shoes - Leathergoods"},{"IdCustomFieldsValue":676,"Valore":"Footwear (Insole)"},{"IdCustomFieldsValue":687,"Valore":"Piccola Pelletteria (Cinture)"},{"IdCustomFieldsValue":688,"Valore":"Cinturini da orologio"},{"IdCustomFieldsValue":692,"Valore":"Apparel (Outer)"},{"IdCustomFieldsValue":693,"Valore":"Apparel (Inner)"},{"IdCustomFieldsValue":695,"Valore":"Calzatura (Sottopiedi)"},{"IdCustomFieldsValue":742,"Valore":"Packaging"},{"IdCustomFieldsValue":756,"Valore":"Maroquinerie"},{"IdCustomFieldsValue":757,"Valore":"Maroquinerie (Sac a main)"},{"IdCustomFieldsValue":758,"Valore":"Maroquinerie (Petite maroquinerie)"},{"IdCustomFieldsValue":759,"Valore":"Maroquinerie (Ceintures)"},{"IdCustomFieldsValue":760,"Valore":"Maroquinerie (Bracelets de montres)"},{"IdCustomFieldsValue":761,"Valore":"Maroquinerie (Doublure)"},{"IdCustomFieldsValue":767,"Valore":"Bracelets de montres"},{"IdCustomFieldsValue":775,"Valore":"Pelletteria (Borsa) \/ Piccola Pelletteria (Portafogli)"},{"IdCustomFieldsValue":779,"Valore":"Leathergoods \/Finishedgoods"},{"IdCustomFieldsValue":807,"Valore":"Leathergoods (Lining)"},{"IdCustomFieldsValue":821,"Valore":"Accessori da Abbigliamento"},{"IdCustomFieldsValue":823,"Valore":"Gioielleria"},{"IdCustomFieldsValue":840,"Valore":"Jewellery"},{"IdCustomFieldsValue":855,"Valore":"Piccola Pelletteria"},{"IdCustomFieldsValue":889,"Valore":"Small Leathergood (Belt)"},{"IdCustomFieldsValue":898,"Valore":"Pelletteria (Borsa) \/ Gioielleria"},{"IdCustomFieldsValue":902,"Valore":"V\u00eatements"},{"IdCustomFieldsValue":912,"Valore":"Abbigliamento (Guanti)"},{"IdCustomFieldsValue":986,"Valore":"Leathergoods (Wallet)"},{"IdCustomFieldsValue":1009,"Valore":"Gioielleria \/ Bigiotteria"},{"IdCustomFieldsValue":1010,"Valore":"Bigiotteria"},{"IdCustomFieldsValue":1027,"Valore":"Abbigliamento esterno"},{"IdCustomFieldsValue":1028,"Valore":"Abbigliamento interno"},{"IdCustomFieldsValue":1032,"Valore":"Calzatura sfoderata"},{"IdCustomFieldsValue":1055,"Valore":"Leathergoods (Body of the bag)"},{"IdCustomFieldsValue":1082,"Valore":"Leathergoods (Belt)"},{"IdCustomFieldsValue":1104,"Valore":"Calzatura (Soletto)"},{"IdCustomFieldsValue":1204,"Valore":"Calzatura (fodera\/soletto)"},{"IdCustomFieldsValue":1205,"Valore":"Shoes"},{"IdCustomFieldsValue":1207,"Valore":"Pelletteria \/ Abbigliamento"},{"IdCustomFieldsValue":1236,"Valore":"Ombrelli"},{"IdCustomFieldsValue":1383,"Valore":"Abbigliamento\/Calzatura"},{"IdCustomFieldsValue":1421,"Valore":"Calzatura (Tacco)"},{"IdCustomFieldsValue":1467,"Valore":"Furniture"},{"IdCustomFieldsValue":1514,"Valore":"Footwear (Upper\/Lining)"},{"IdCustomFieldsValue":1662,"Valore":"Leathergoods (Exterior)"},{"IdCustomFieldsValue":1670,"Valore":"Chaussures"},{"IdCustomFieldsValue":1780,"Valore":"Abbigliamento\/Calzatura\/Pelletteria"},{"IdCustomFieldsValue":1970,"Valore":"Accessories"},{"IdCustomFieldsValue":1971,"Valore":"Carta da parati"},{"IdCustomFieldsValue":2087,"Valore":"Glasses case"},{"IdCustomFieldsValue":2190,"Valore":"Calzatura (Tomaio\/Fodera)"},{"IdCustomFieldsValue":2240,"Valore":"Pelletteria \/ Calzatura"},{"IdCustomFieldsValue":2530,"Valore":"Calzatura (Suola)"},{"IdCustomFieldsValue":2570,"Valore":"Occhiali"},{"IdCustomFieldsValue":2635,"Valore":"Footwear (Sandal)"},{"IdCustomFieldsValue":2639,"Valore":"Lining"},{"IdCustomFieldsValue":2671,"Valore":"Portachiavi"},{"IdCustomFieldsValue":3098,"Valore":"Pellicceria"},{"IdCustomFieldsValue":3200,"Valore":"Car seat upholstery"},{"IdCustomFieldsValue":3209,"Valore":"Fodera"},{"IdCustomFieldsValue":3243,"Valore":"Accessoristica"},{"IdCustomFieldsValue":3253,"Valore":"Cuscini da Viaggio"},{"IdCustomFieldsValue":3357,"Valore":"Coulisse"},{"IdCustomFieldsValue":3361,"Valore":"Leathergoods (Handbag)"},{"IdCustomFieldsValue":3369,"Valore":"Leathergoods (Knapsack)"},{"IdCustomFieldsValue":3445,"Valore":"Footwear (Lake shoe)"},{"IdCustomFieldsValue":3453,"Valore":"Apparel (Hat)"},{"IdCustomFieldsValue":3470,"Valore":"Bike saddle"},{"IdCustomFieldsValue":3476,"Valore":"Apparel (Shirts)"},{"IdCustomFieldsValue":3477,"Valore":"Apparel (Jackets)"},{"IdCustomFieldsValue":3478,"Valore":"Leathergoods (Flap)"},{"IdCustomFieldsValue":3484,"Valore":"Upholstery"},{"IdCustomFieldsValue":3485,"Valore":"Saddlery"},{"IdCustomFieldsValue":3519,"Valore":"Apparel (Lining)"},{"IdCustomFieldsValue":3837,"Valore":"Swimwear"},{"IdCustomFieldsValue":3847,"Valore":"Accoppiatura tessuti"},{"IdCustomFieldsValue":3876,"Valore":"Luggage"},{"IdCustomFieldsValue":3891,"Valore":"Pelletteria (Rinforzo)"},{"IdCustomFieldsValue":4041,"Valore":"Bijoux (Lining)"},{"IdCustomFieldsValue":4081,"Valore":"Label"},{"IdCustomFieldsValue":4189,"Valore":"Case"},{"IdCustomFieldsValue":4268,"Valore":"Abbigliamento (Camicia)"},{"IdCustomFieldsValue":4390,"Valore":"Bijoux"},{"IdCustomFieldsValue":4421,"Valore":"Apparel (tights)"},{"IdCustomFieldsValue":4424,"Valore":"Maglieria"},{"IdCustomFieldsValue":4425,"Valore":"Abbigliamento (Sciarpe)"},{"IdCustomFieldsValue":4588,"Valore":"Forniture"},{"IdCustomFieldsValue":4642,"Valore":"Calzatura (Tomaio\/Soletto)"},{"IdCustomFieldsValue":4746,"Valore":"Leathergoods\/Footwear"},{"IdCustomFieldsValue":4749,"Valore":"Orthopedic \/ comfort Shoes"},{"IdCustomFieldsValue":5308,"Valore":"Swimsuit"},{"IdCustomFieldsValue":5394,"Valore":"Pelletteria \/ Accessori"},{"IdCustomFieldsValue":5435,"Valore":"Accessoire"},{"IdCustomFieldsValue":6265,"Valore":"V\u00eatements\/Maroquinerie"},{"IdCustomFieldsValue":12514,"Valore":"\u00c9quitation"},{"IdCustomFieldsValue":12714,"Valore":"Montre"},{"IdCustomFieldsValue":13149,"Valore":"Calzatura (Tomaio\/Sottopiede)"},{"IdCustomFieldsValue":13486,"Valore":"Glasses"},{"IdCustomFieldsValue":13487,"Valore":"Sunglasses"},{"IdCustomFieldsValue":13897,"Valore":"Bagage"},{"IdCustomFieldsValue":13977,"Valore":"Apparel\/Leathergoods\/Footwear"},{"IdCustomFieldsValue":14000,"Valore":"Garment"},{"IdCustomFieldsValue":14023,"Valore":"Leathergoods (Waist bag)"},{"IdCustomFieldsValue":14681,"Valore":"Chaussures\/Maroquinerie"},{"IdCustomFieldsValue":14698,"Valore":"Small Leathergood (Key ring)"},{"IdCustomFieldsValue":14836,"Valore":"Abbigliamento (Costume da bagno)"},{"IdCustomFieldsValue":14991,"Valore":"Footwear\/Leathergoods\/Apparel"}],"156":[{"IdCustomFieldsValue":243,"Valore":"Bottone"},{"IdCustomFieldsValue":244,"Valore":"Cerniera"},{"IdCustomFieldsValue":245,"Valore":"Accessorio Metallico"},{"IdCustomFieldsValue":246,"Valore":"Accessorio Plastico"},{"IdCustomFieldsValue":247,"Valore":"Sottotacco"},{"IdCustomFieldsValue":304,"Valore":"Suola"},{"IdCustomFieldsValue":313,"Valore":"Tacco"},{"IdCustomFieldsValue":314,"Valore":"Composite"},{"IdCustomFieldsValue":315,"Valore":"Cuoio\/Pelle (1\/2 Vitello)"},{"IdCustomFieldsValue":316,"Valore":"Cuoio\/Pelle (Bovino)"},{"IdCustomFieldsValue":317,"Valore":"Cuoio\/Pelle (Capra)"},{"IdCustomFieldsValue":318,"Valore":"Cuoio\/Pelle (Coccodrillo)"},{"IdCustomFieldsValue":319,"Valore":"Cuoio\/Pelle (Crosta)"},{"IdCustomFieldsValue":320,"Valore":"Cuoio\/Pelle (Nabuck)"},{"IdCustomFieldsValue":321,"Valore":"Cuoio\/Pelle (Ovocaprino)"},{"IdCustomFieldsValue":322,"Valore":"Cuoio\/Pelle (Rettile)"},{"IdCustomFieldsValue":323,"Valore":"Cuoio\/Pelle (Vitello)"},{"IdCustomFieldsValue":324,"Valore":"Borsa"},{"IdCustomFieldsValue":325,"Valore":"Calzatura"},{"IdCustomFieldsValue":326,"Valore":"Cintura"},{"IdCustomFieldsValue":327,"Valore":"Portafoglio"},{"IdCustomFieldsValue":328,"Valore":"Tessile (Sintetico)"},{"IdCustomFieldsValue":329,"Valore":"Tessile (Ortogonale\/A maglia)"},{"IdCustomFieldsValue":330,"Valore":"Tessile (PVC)"},{"IdCustomFieldsValue":331,"Valore":"Tessile (Spalmato)"},{"IdCustomFieldsValue":332,"Valore":"Tessile (Stampato)"},{"IdCustomFieldsValue":333,"Valore":"Tessile (Accoppiato)"},{"IdCustomFieldsValue":335,"Valore":"Cuoio\/Pelle (Cavallino)"},{"IdCustomFieldsValue":342,"Valore":"Cuoio\/Pelle"},{"IdCustomFieldsValue":343,"Valore":"Tessile"},{"IdCustomFieldsValue":404,"Valore":"Leather (1\/2 Calf)"},{"IdCustomFieldsValue":405,"Valore":"Leather (Calf)"},{"IdCustomFieldsValue":406,"Valore":"Leather (Buffalo)"},{"IdCustomFieldsValue":407,"Valore":"Leather (Goat)"},{"IdCustomFieldsValue":408,"Valore":"Leather (Lamb)"},{"IdCustomFieldsValue":409,"Valore":"Leather (Exotic)"},{"IdCustomFieldsValue":410,"Valore":"Textile"},{"IdCustomFieldsValue":411,"Valore":"Final product"},{"IdCustomFieldsValue":412,"Valore":"Button"},{"IdCustomFieldsValue":413,"Valore":"Handbag"},{"IdCustomFieldsValue":414,"Valore":"Belt"},{"IdCustomFieldsValue":415,"Valore":"Heel"},{"IdCustomFieldsValue":416,"Valore":"Metallic accessories"},{"IdCustomFieldsValue":420,"Valore":"Leather"},{"IdCustomFieldsValue":446,"Valore":"Leather (Ram)"},{"IdCustomFieldsValue":480,"Valore":"Cuoio\/Pelle (Cervo)"},{"IdCustomFieldsValue":481,"Valore":"Cuoio\/Pelle (Vitellino)"},{"IdCustomFieldsValue":483,"Valore":"Wallet"},{"IdCustomFieldsValue":529,"Valore":"Cuoio\/Pelle (Nappa)"},{"IdCustomFieldsValue":533,"Valore":"Leather (Shearling)"},{"IdCustomFieldsValue":534,"Valore":"Leather (Cow)"},{"IdCustomFieldsValue":536,"Valore":"Cuoio\/Pelle (Agnello)"},{"IdCustomFieldsValue":537,"Valore":"Sottopiede"},{"IdCustomFieldsValue":547,"Valore":"Porta I-Pad"},{"IdCustomFieldsValue":558,"Valore":"Cuoio\/Pelle (Daino)"},{"IdCustomFieldsValue":571,"Valore":"Cuoio\/Pelle (Bufalo)"},{"IdCustomFieldsValue":597,"Valore":"Composito"},{"IdCustomFieldsValue":616,"Valore":"Leather (front calf)"},{"IdCustomFieldsValue":643,"Valore":"Cuoio\/Pelle (Canguro)"},{"IdCustomFieldsValue":653,"Valore":"Sole"},{"IdCustomFieldsValue":654,"Valore":"Cuoio\/Pelle (Montone)"},{"IdCustomFieldsValue":655,"Valore":"Cuoio\/Pelle (Volpe)"},{"IdCustomFieldsValue":660,"Valore":"Accessorio \/ Pitone"},{"IdCustomFieldsValue":666,"Valore":"Guanti"},{"IdCustomFieldsValue":667,"Valore":"Prodotto finito"},{"IdCustomFieldsValue":678,"Valore":"Colorante"},{"IdCustomFieldsValue":684,"Valore":"Elaphe Radiata"},{"IdCustomFieldsValue":689,"Valore":"Cuoio\/Pelle (Toro)"},{"IdCustomFieldsValue":690,"Valore":"Semilavorato"},{"IdCustomFieldsValue":696,"Valore":"Cuoio\/Pelle (Spalle)"},{"IdCustomFieldsValue":699,"Valore":"Leathergoods\/Footwear"},{"IdCustomFieldsValue":701,"Valore":"Cuoio\/Pelle (Visone)"},{"IdCustomFieldsValue":702,"Valore":"Wire"},{"IdCustomFieldsValue":705,"Valore":"Tessile (con Applicazioni)"},{"IdCustomFieldsValue":708,"Valore":"Cuoio\/Pelle (Incrociati)"},{"IdCustomFieldsValue":714,"Valore":"Cuoio\/Pelle (Cammello)"},{"IdCustomFieldsValue":717,"Valore":"Shoulder"},{"IdCustomFieldsValue":718,"Valore":"Handle"},{"IdCustomFieldsValue":719,"Valore":"Backpack"},{"IdCustomFieldsValue":731,"Valore":"Panel"},{"IdCustomFieldsValue":734,"Valore":"Textile (Coupled)"},{"IdCustomFieldsValue":736,"Valore":"Accessories"},{"IdCustomFieldsValue":738,"Valore":"Buckle"},{"IdCustomFieldsValue":740,"Valore":"Cuoio\/Pelle (Gropponi)"},{"IdCustomFieldsValue":743,"Valore":"Glittered Textile"},{"IdCustomFieldsValue":748,"Valore":"Leather (Deer)"},{"IdCustomFieldsValue":762,"Valore":"Cuir"},{"IdCustomFieldsValue":763,"Valore":"Doublure (Cro\u00fbte bovin P.U. Newcalf gris F\/32 F1.5\/1.7mm, T1.5\/2.0m2)"},{"IdCustomFieldsValue":764,"Valore":"Pieces Metallique"},{"IdCustomFieldsValue":765,"Valore":"Bracelets de montres"},{"IdCustomFieldsValue":768,"Valore":"Leather vs Textile"},{"IdCustomFieldsValue":770,"Valore":"Cuoio\/Pelle (Coniglio)"},{"IdCustomFieldsValue":792,"Valore":"Leather (Goat) vs Leather (Calf)"},{"IdCustomFieldsValue":797,"Valore":"Insock"},{"IdCustomFieldsValue":809,"Valore":"Leather (Shoulder)"},{"IdCustomFieldsValue":810,"Valore":"Cuoio\/Pelle (Fianchi)"},{"IdCustomFieldsValue":812,"Valore":"Zaino"},{"IdCustomFieldsValue":824,"Valore":"Shoe"},{"IdCustomFieldsValue":834,"Valore":"Glittered Textile"},{"IdCustomFieldsValue":835,"Valore":"Cuoio\/Pelle (Alligatore)"},{"IdCustomFieldsValue":838,"Valore":"Pannello"},{"IdCustomFieldsValue":841,"Valore":"Bracelet"},{"IdCustomFieldsValue":842,"Valore":"Chain"},{"IdCustomFieldsValue":843,"Valore":"Necklace"},{"IdCustomFieldsValue":847,"Valore":"Componente per calzatura"},{"IdCustomFieldsValue":849,"Valore":"Bracciale"},{"IdCustomFieldsValue":852,"Valore":"Cuoio\/Pelle (Cavallo)"},{"IdCustomFieldsValue":854,"Valore":"Nappa"},{"IdCustomFieldsValue":856,"Valore":"Cuoio\/Pelle (Suino)"},{"IdCustomFieldsValue":857,"Valore":"Bag"},{"IdCustomFieldsValue":862,"Valore":"PVC"},{"IdCustomFieldsValue":865,"Valore":"Cuoio\/Pelle Esotico (Ayers)"},{"IdCustomFieldsValue":877,"Valore":"Cuir (Veau)"},{"IdCustomFieldsValue":884,"Valore":"Leather (Pig)"},{"IdCustomFieldsValue":886,"Valore":"Leather (Baby Calf)"},{"IdCustomFieldsValue":888,"Valore":"Small Leathergood (Belt)"},{"IdCustomFieldsValue":899,"Valore":"Accoppiato (Tessile\/Pelle)"},{"IdCustomFieldsValue":900,"Valore":"Accoppiato (Pelle\/Pelle)"},{"IdCustomFieldsValue":901,"Valore":"Cuoio\/Pelle (Pitone)"},{"IdCustomFieldsValue":911,"Valore":"Culatte"},{"IdCustomFieldsValue":919,"Valore":"Leather (Kangaroo)"},{"IdCustomFieldsValue":934,"Valore":"Accessorio"},{"IdCustomFieldsValue":937,"Valore":"Leather (Bovine)"},{"IdCustomFieldsValue":938,"Valore":"Leather (Coupled)"},{"IdCustomFieldsValue":943,"Valore":"Textile (Glittered)"},{"IdCustomFieldsValue":945,"Valore":"Textile (Woven\/Knitted)"},{"IdCustomFieldsValue":946,"Valore":"Textile (Lining)"},{"IdCustomFieldsValue":949,"Valore":"Cuoio\/Pelle (Caribu')"},{"IdCustomFieldsValue":952,"Valore":"Tessile (Fodera)"},{"IdCustomFieldsValue":954,"Valore":"Metallic logo"},{"IdCustomFieldsValue":957,"Valore":"Plastic accessories"},{"IdCustomFieldsValue":961,"Valore":"Tessile (Paglia)"},{"IdCustomFieldsValue":962,"Valore":"Cuir (1\/2 Veau)"},{"IdCustomFieldsValue":965,"Valore":"Metallic \/ Plastic trims"},{"IdCustomFieldsValue":966,"Valore":"Prodotto chimico"},{"IdCustomFieldsValue":967,"Valore":"Cuoio\/Pelle (Culatta)"},{"IdCustomFieldsValue":974,"Valore":"I-Pad Holder"},{"IdCustomFieldsValue":979,"Valore":"Tessue"},{"IdCustomFieldsValue":984,"Valore":"Cuoio\/Pelle (Bovina)"},{"IdCustomFieldsValue":987,"Valore":"Footwear"},{"IdCustomFieldsValue":988,"Valore":"Textile (PVC)"},{"IdCustomFieldsValue":994,"Valore":"AYERS F.C. MAC."},{"IdCustomFieldsValue":995,"Valore":"Quadrante di borsa completo di maniglia"},{"IdCustomFieldsValue":1005,"Valore":"Leather (Baby calf with hair on printed)"},{"IdCustomFieldsValue":1007,"Valore":"Metallic Trims"},{"IdCustomFieldsValue":1012,"Valore":"Accessoire metallique"},{"IdCustomFieldsValue":1019,"Valore":"Fibbia"},{"IdCustomFieldsValue":1033,"Valore":"Component for Footwear"},{"IdCustomFieldsValue":1037,"Valore":"Cuoio\/Pelle (Capretto)"},{"IdCustomFieldsValue":1038,"Valore":"Leather (Crust)"},{"IdCustomFieldsValue":1040,"Valore":"Cuoio\/Pelle (Esotico)"},{"IdCustomFieldsValue":1045,"Valore":"Componente di pelletteria (tintura costola)"},{"IdCustomFieldsValue":1046,"Valore":"Tessile (Accoppiato con pelle)"},{"IdCustomFieldsValue":1049,"Valore":"Tessile (Accopiato con PU)"},{"IdCustomFieldsValue":1077,"Valore":"Sintetici"},{"IdCustomFieldsValue":1107,"Valore":"Textile (Synthetic)"},{"IdCustomFieldsValue":1126,"Valore":"Sughero"},{"IdCustomFieldsValue":1158,"Valore":"Accoppiato"},{"IdCustomFieldsValue":1159,"Valore":"Zip"},{"IdCustomFieldsValue":1178,"Valore":"Cellulosa"},{"IdCustomFieldsValue":1179,"Valore":"Pochette"},{"IdCustomFieldsValue":1218,"Valore":"Cuir (Chevre)"},{"IdCustomFieldsValue":1260,"Valore":"Watch strap"},{"IdCustomFieldsValue":1261,"Valore":"Lamina"},{"IdCustomFieldsValue":1356,"Valore":"Pietra verniciata"},{"IdCustomFieldsValue":1362,"Valore":"Cartone"},{"IdCustomFieldsValue":1369,"Valore":"Upper"},{"IdCustomFieldsValue":1373,"Valore":"Cuoio\/Pelle (Struzzo)"},{"IdCustomFieldsValue":1375,"Valore":"Prodotto liquido"},{"IdCustomFieldsValue":1376,"Valore":"Cuoio\/Pelle (Lapin Rex)"},{"IdCustomFieldsValue":1378,"Valore":"Wood Button"},{"IdCustomFieldsValue":1381,"Valore":"Lattice"},{"IdCustomFieldsValue":1419,"Valore":"Coupled"},{"IdCustomFieldsValue":1428,"Valore":"Tessile (Lana)"},{"IdCustomFieldsValue":1430,"Valore":"Tomaia"},{"IdCustomFieldsValue":1435,"Valore":"Tessile (PU)"},{"IdCustomFieldsValue":1446,"Valore":"Filo"},{"IdCustomFieldsValue":1447,"Valore":"Polvere"},{"IdCustomFieldsValue":1452,"Valore":"Leather (Sheep)"},{"IdCustomFieldsValue":1465,"Valore":"Textile (Printed)"},{"IdCustomFieldsValue":1487,"Valore":"Plastic sample"},{"IdCustomFieldsValue":1495,"Valore":"Pigmento"},{"IdCustomFieldsValue":1502,"Valore":"Shanks"},{"IdCustomFieldsValue":1506,"Valore":"Button (Urea)"},{"IdCustomFieldsValue":1521,"Valore":"Pietra"},{"IdCustomFieldsValue":1523,"Valore":"Fabric sample"},{"IdCustomFieldsValue":1525,"Valore":"Cuoio\/Pelle (Pesce)"},{"IdCustomFieldsValue":1526,"Valore":"Button (Sydney)"},{"IdCustomFieldsValue":1563,"Valore":"Metal Powder"},{"IdCustomFieldsValue":1569,"Valore":"Liquid product"},{"IdCustomFieldsValue":1582,"Valore":"Paint"},{"IdCustomFieldsValue":1588,"Valore":"Laminated paper"},{"IdCustomFieldsValue":1589,"Valore":"Accessoire"},{"IdCustomFieldsValue":1597,"Valore":"Lucido"},{"IdCustomFieldsValue":1623,"Valore":"Cuoio\/Pelle (Anguilla)"},{"IdCustomFieldsValue":1626,"Valore":"Tessile (Cotone)"},{"IdCustomFieldsValue":1663,"Valore":"ABS"},{"IdCustomFieldsValue":1664,"Valore":"Leather (Bos Taurus)"},{"IdCustomFieldsValue":1731,"Valore":"Leather (Ayers)"},{"IdCustomFieldsValue":1732,"Valore":"Leather (Colubro)"},{"IdCustomFieldsValue":1733,"Valore":"Leather (Python)"},{"IdCustomFieldsValue":1736,"Valore":"Heel with Insole"},{"IdCustomFieldsValue":1737,"Valore":"Cuoio\/Pelle (Lapin)"},{"IdCustomFieldsValue":1739,"Valore":"Cuoio\/Pelle (Caimano)"},{"IdCustomFieldsValue":1743,"Valore":"Cuir (Agneau)"},{"IdCustomFieldsValue":1760,"Valore":"Leather (Kid)"},{"IdCustomFieldsValue":1781,"Valore":"Packaging Box"},{"IdCustomFieldsValue":1782,"Valore":"Packaging Cloth"},{"IdCustomFieldsValue":1803,"Valore":"Textile (Coated)"},{"IdCustomFieldsValue":1811,"Valore":"Leather (Reclaimed) "},{"IdCustomFieldsValue":1882,"Valore":"Accoppiato (Tessile\/Tessile)"},{"IdCustomFieldsValue":1913,"Valore":"Lycra"},{"IdCustomFieldsValue":1930,"Valore":"Cuoio\/Pelle (Lucertola)"},{"IdCustomFieldsValue":1981,"Valore":"Leather (Baby Goat)"},{"IdCustomFieldsValue":1987,"Valore":"Cover"},{"IdCustomFieldsValue":2003,"Valore":"Tracolla"},{"IdCustomFieldsValue":2079,"Valore":"Leather (Bull)"},{"IdCustomFieldsValue":2080,"Valore":"Leather (Ovine)"},{"IdCustomFieldsValue":2176,"Valore":"Tessile (Poliestere)"},{"IdCustomFieldsValue":2184,"Valore":"Cuoio\/Pelle (Lama)"},{"IdCustomFieldsValue":2203,"Valore":"Accessorio in pelle"},{"IdCustomFieldsValue":2259,"Valore":"Leather (Eel)"},{"IdCustomFieldsValue":2273,"Valore":"Accoppiato (Accessorio\/Pelle)"},{"IdCustomFieldsValue":2274,"Valore":"Accoppiato (Accessorio\/Tessile)"},{"IdCustomFieldsValue":2276,"Valore":"Accessorio in tessuto"},{"IdCustomFieldsValue":2376,"Valore":"Cuoio rigenerato"},{"IdCustomFieldsValue":2460,"Valore":"Regenerated Leather"},{"IdCustomFieldsValue":2465,"Valore":"Resina acrilica"},{"IdCustomFieldsValue":2467,"Valore":"Bonded Leather"},{"IdCustomFieldsValue":2515,"Valore":"Tessile (Seta)"},{"IdCustomFieldsValue":2528,"Valore":"Cuoio"},{"IdCustomFieldsValue":2540,"Valore":"Paper packaging"},{"IdCustomFieldsValue":2541,"Valore":"Plastic packaging"},{"IdCustomFieldsValue":2576,"Valore":"Zip in Nylon"},{"IdCustomFieldsValue":2577,"Valore":"Nylon Zip"},{"IdCustomFieldsValue":2634,"Valore":"Footwear (Sandal)"},{"IdCustomFieldsValue":2644,"Valore":"Leather (Alligator)"},{"IdCustomFieldsValue":2716,"Valore":"Powder"},{"IdCustomFieldsValue":2770,"Valore":"Tissu"},{"IdCustomFieldsValue":2773,"Valore":"TBC"},{"IdCustomFieldsValue":2781,"Valore":"Leather (Nappa)"},{"IdCustomFieldsValue":3048,"Valore":"Leather (Bovine Split)"},{"IdCustomFieldsValue":3086,"Valore":"Valigia"},{"IdCustomFieldsValue":3087,"Valore":"Leather (Fox)"},{"IdCustomFieldsValue":3089,"Valore":"Cuoio\/Pelle (Mucca)"},{"IdCustomFieldsValue":3204,"Valore":"Tessile (Raso)"},{"IdCustomFieldsValue":3205,"Valore":"Ecopelle"},{"IdCustomFieldsValue":3212,"Valore":"Tessile (Termosaldatura)"},{"IdCustomFieldsValue":3215,"Valore":"Watch case"},{"IdCustomFieldsValue":3226,"Valore":"Shoulder strap"},{"IdCustomFieldsValue":3244,"Valore":"Tessile (Microfibra)"},{"IdCustomFieldsValue":3252,"Valore":"Spandex"},{"IdCustomFieldsValue":3259,"Valore":"Glue"},{"IdCustomFieldsValue":3264,"Valore":"EVA"},{"IdCustomFieldsValue":3284,"Valore":"Leather (Horse)"},{"IdCustomFieldsValue":3308,"Valore":"Soletto"},{"IdCustomFieldsValue":3312,"Valore":"Textile (PU)"},{"IdCustomFieldsValue":3316,"Valore":"Cufflinks"},{"IdCustomFieldsValue":3348,"Valore":"Synthetic Fur"},{"IdCustomFieldsValue":3355,"Valore":"Resina poliuretanica ad acqua"},{"IdCustomFieldsValue":3356,"Valore":"Resina siliconica"},{"IdCustomFieldsValue":3437,"Valore":"Leather (Whips)"},{"IdCustomFieldsValue":3438,"Valore":"Leather (Karung)"},{"IdCustomFieldsValue":3448,"Valore":"Swimming cap"},{"IdCustomFieldsValue":3458,"Valore":"Leather (Crocodile)"},{"IdCustomFieldsValue":3459,"Valore":"Leather (Crocodile Niloticus)"},{"IdCustomFieldsValue":3464,"Valore":"Leather (Cayman)"},{"IdCustomFieldsValue":3466,"Valore":"Leather (Ostrich)"},{"IdCustomFieldsValue":3471,"Valore":"Accessorio Metallico (Ottone)"},{"IdCustomFieldsValue":3486,"Valore":"Leather (Fish)"},{"IdCustomFieldsValue":3495,"Valore":"Textile (Woven)"},{"IdCustomFieldsValue":3510,"Valore":"Tessile (Ortogonale)"},{"IdCustomFieldsValue":3512,"Valore":"Lacquer"},{"IdCustomFieldsValue":3513,"Valore":"Textile (Cotton)"},{"IdCustomFieldsValue":3522,"Valore":"Cuoio\/Pelle (Coccodrillo Porosus)"},{"IdCustomFieldsValue":3737,"Valore":"Cuir (Alligator)"},{"IdCustomFieldsValue":3752,"Valore":"Canvas"},{"IdCustomFieldsValue":3834,"Valore":"Leather (Lizard)"},{"IdCustomFieldsValue":3844,"Valore":"LV"},{"IdCustomFieldsValue":3850,"Valore":"Textile (Synthetic & blend)"},{"IdCustomFieldsValue":3854,"Valore":"Pelliccia ecologica"},{"IdCustomFieldsValue":3856,"Valore":"Insole"},{"IdCustomFieldsValue":3861,"Valore":"Textile (Natural) + Prints\/Coating"},{"IdCustomFieldsValue":3875,"Valore":"Trolley"},{"IdCustomFieldsValue":3877,"Valore":"Rubber"},{"IdCustomFieldsValue":3878,"Valore":"Rubber + Plastic"},{"IdCustomFieldsValue":4032,"Valore":"Fake leather"},{"IdCustomFieldsValue":4097,"Valore":"Produit fini"},{"IdCustomFieldsValue":4121,"Valore":"Materiali adesivi in Nylon"},{"IdCustomFieldsValue":4138,"Valore":"Cuir (Porosus)"},{"IdCustomFieldsValue":4139,"Valore":"Cuir (Niloticus)"},{"IdCustomFieldsValue":4141,"Valore":"Gloves"},{"IdCustomFieldsValue":4146,"Valore":"Tessile (Rafia)"},{"IdCustomFieldsValue":4159,"Valore":"Raw material"},{"IdCustomFieldsValue":4165,"Valore":"Textile (Lace)"},{"IdCustomFieldsValue":4169,"Valore":"Tessile (Tulle)"},{"IdCustomFieldsValue":4188,"Valore":"Polycarbonate"},{"IdCustomFieldsValue":4190,"Valore":"Wax"},{"IdCustomFieldsValue":4202,"Valore":"Tessile (Rete)"},{"IdCustomFieldsValue":4203,"Valore":"Tessile (Neoprene)"},{"IdCustomFieldsValue":4232,"Valore":"Sludge"},{"IdCustomFieldsValue":4249,"Valore":"Feather"},{"IdCustomFieldsValue":4264,"Valore":"Legno"},{"IdCustomFieldsValue":4281,"Valore":"Textile (Nylon)"},{"IdCustomFieldsValue":4285,"Valore":"Textile (Knitted)"},{"IdCustomFieldsValue":4402,"Valore":"Cuoio\/Pelle (Porosus)"},{"IdCustomFieldsValue":4422,"Valore":"Tights"},{"IdCustomFieldsValue":4564,"Valore":"Sock"},{"IdCustomFieldsValue":4698,"Valore":"Wood"},{"IdCustomFieldsValue":4720,"Valore":"Cuoio\/Pelle (Ovinocaprino)"},{"IdCustomFieldsValue":5063,"Valore":"Synth\u00e9tique"},{"IdCustomFieldsValue":5089,"Valore":"Solid Product"},{"IdCustomFieldsValue":5106,"Valore":"Cuoio\/Pelle (Cocco)"},{"IdCustomFieldsValue":5314,"Valore":"Cuoio\/Pelle (\u00bd bovina)"},{"IdCustomFieldsValue":5372,"Valore":"Plastique accessoires"},{"IdCustomFieldsValue":5484,"Valore":"Hat"},{"IdCustomFieldsValue":5689,"Valore":"Produit liquide"},{"IdCustomFieldsValue":6528,"Valore":"Textile accessories"},{"IdCustomFieldsValue":8580,"Valore":"Poussi\u00e8re"},{"IdCustomFieldsValue":8778,"Valore":"Eco-Leather"},{"IdCustomFieldsValue":9269,"Valore":"Polietilene"},{"IdCustomFieldsValue":9602,"Valore":"Silk"},{"IdCustomFieldsValue":11227,"Valore":"Bois"},{"IdCustomFieldsValue":11228,"Valore":"Produit solide"},{"IdCustomFieldsValue":12432,"Valore":"Polyester"},{"IdCustomFieldsValue":12597,"Valore":"Mousse"},{"IdCustomFieldsValue":12612,"Valore":"Papier"},{"IdCustomFieldsValue":12689,"Valore":"Accessoires en plastique"},{"IdCustomFieldsValue":13244,"Valore":"Cuir (Autreches)"},{"IdCustomFieldsValue":13256,"Valore":"TPU"},{"IdCustomFieldsValue":13257,"Valore":"Gomma"},{"IdCustomFieldsValue":13726,"Valore":"Micro"},{"IdCustomFieldsValue":14025,"Valore":"Tessile (Nylon)"},{"IdCustomFieldsValue":14173,"Valore":"Poliuretano"},{"IdCustomFieldsValue":14238,"Valore":"Accessorio plastico"},{"IdCustomFieldsValue":14239,"Valore":"Plastica"},{"IdCustomFieldsValue":14633,"Valore":"Cuir (Bovin)"},{"IdCustomFieldsValue":14927,"Valore":"Cuoio\/Pelle (Varano)"},{"IdCustomFieldsValue":15048,"Valore":"Plexiglas"}],"163":[{"IdCustomFieldsValue":248,"Valore":"a cura del laboratorio secondo la UNI EN ISO 2418:2006 "},{"IdCustomFieldsValue":251,"Valore":"a cura del committente "},{"IdCustomFieldsValue":278,"Valore":"done by the laboratory according to the UNI EN ISO 2418:2006 "},{"IdCustomFieldsValue":281,"Valore":"done by the client "},{"IdCustomFieldsValue":649,"Valore":"the specimen has been sampled from the footwear supplied by the client"},{"IdCustomFieldsValue":677,"Valore":"materiale campionato da borsa fornita dal cliente"},{"IdCustomFieldsValue":727,"Valore":"the specimen has been sampled from the bag supplied by the client"},{"IdCustomFieldsValue":755,"Valore":"par le client"},{"IdCustomFieldsValue":878,"Valore":"effectu\u00e9e par le laboratoire selon la norme UNI EN ISO 2418:2006"},{"IdCustomFieldsValue":1029,"Valore":"the specimen has been sampled from the wallet supplied by the client"},{"IdCustomFieldsValue":1627,"Valore":"materiale campionato da calzatura fornita dal cliente"},{"IdCustomFieldsValue":1628,"Valore":"materiale campionato da portafogli fornito dal cliente"},{"IdCustomFieldsValue":4716,"Valore":"Grab, sampled by the Lab"},{"IdCustomFieldsValue":5355,"Valore":"Material sampled by the Lab."},{"IdCustomFieldsValue":9142,"Valore":"materiale campionato da cappello fornito dal cliente"}],"165":[{"IdCustomFieldsValue":825,"Valore":"Nessuno, come da accordi con il cliente"},{"IdCustomFieldsValue":826,"Valore":"None, as agreed with the client"},{"IdCustomFieldsValue":1632,"Valore":"Aucun, selon accords avec le client"},{"IdCustomFieldsValue":2088,"Valore":"24\u00b12h; 21\u00b11\u00b0C; 65\u00b12%U.R. (Se richiesto dal Metodo di Prova, analisi eseguita in atmosfera standard)"},{"IdCustomFieldsValue":2089,"Valore":"24\u00b12h; 21\u00b11\u00b0C; 65\u00b12% R.H. (If required by the test method, analysis carried out in standard atmosphere)"},{"IdCustomFieldsValue":2450,"Valore":"(According to UNI EN ISO 2419:2012) 23\u00b0+\/-2\u00b0C; 50+\/-5% R.H. (If required by the test method, trial carried out in standard atmosphere)"},{"IdCustomFieldsValue":2552,"Valore":"Atmosfera di condizionamento e di prova: 20\u00b12\u00b0, 65\u00b15% UR"},{"IdCustomFieldsValue":3187,"Valore":"Il campione \u00e8 conservato a temperatura <4\u00b0C"},{"IdCustomFieldsValue":3188,"Valore":"the sample is stored at temperature <4\u00b0C"},{"IdCustomFieldsValue":6133,"Valore":"24\u00b12h; 21\u00b11\u00b0C; 65\u00b12%U.R. (Si prevu par le m\u00e9thode du test, analyse execut\u00e9e en atmosph\u00e8re standardis\u00e9e)"},{"IdCustomFieldsValue":15005,"Valore":"24\u00b12h; 23\u00b12\u00b0C; 50\u00b15%U.R. (Se richiesto dal Metodo di Prova, analisi eseguita in atmosfera standard)"},{"IdCustomFieldsValue":15006,"Valore":"24\u00b12h; 23\u00b12\u00b0C; 50\u00b15% R.H. (If required by the test method, analysis carried out in standard atmosphere)"},{"IdCustomFieldsValue":15007,"Valore":"24\u00b12h; 23\u00b12\u00b0C; 50\u00b15%U.R. (Si prevu par le m\u00e9thode du test, analyse execut\u00e9e en atmosph\u00e8re standardis\u00e9e)"}],"169":[{"IdCustomFieldsValue":672,"Valore":"Si"},{"IdCustomFieldsValue":673,"Valore":"No"},{"IdCustomFieldsValue":778,"Valore":"Si se FAIL"},{"IdCustomFieldsValue":4408,"Valore":"Procedura Standard"}],"170":[{"IdCustomFieldsValue":674,"Valore":"No"},{"IdCustomFieldsValue":675,"Valore":"Si"},{"IdCustomFieldsValue":777,"Valore":"Si se FAIL"},{"IdCustomFieldsValue":4409,"Valore":"Procedura Standard"}],"171":[{"IdCustomFieldsValue":668,"Valore":"Si"},{"IdCustomFieldsValue":669,"Valore":"No"},{"IdCustomFieldsValue":670,"Valore":"Si se FAIL"},{"IdCustomFieldsValue":671,"Valore":"Si FINE MESE"},{"IdCustomFieldsValue":1013,"Valore":"SI OGNI GIOVED\u00ec"},{"IdCustomFieldsValue":1185,"Valore":"SI due volte alla settimana"},{"IdCustomFieldsValue":2216,"Valore":"SI una volta alla settimana"},{"IdCustomFieldsValue":4410,"Valore":"Procedura Standard"},{"IdCustomFieldsValue":5722,"Valore":"SI stesso giorno"}],"181":[{"IdCustomFieldsValue":744,"Valore":"Il campione \u00e8 preparato secondo la ISO 4044 (quando richiesto dal metodo di prova)."},{"IdCustomFieldsValue":745,"Valore":"Sample is prepared according to ISO 4044 (whenever requested by the test method)"},{"IdCustomFieldsValue":753,"Valore":"L\u2019\u00e9chantillon est pr\u00e9par\u00e9 conform\u00e9ment \u00e0 la norme ISO 4044 (lorsque cela est requis par la m\u00e9thode d\u2019essai)."}],"236":[{"IdCustomFieldsValue":1468,"Valore":"Consegnato a mano"},{"IdCustomFieldsValue":1469,"Valore":"Inviato tramite corriere"},{"IdCustomFieldsValue":4945,"Valore":"Navetta Scandicci"}],"241":[{"IdCustomFieldsValue":1603,"Valore":"a Pacchetto"},{"IdCustomFieldsValue":1604,"Valore":">3"},{"IdCustomFieldsValue":1605,"Valore":"<=3"}],"246":[{"IdCustomFieldsValue":1753,"Valore":"BV Shangai"},{"IdCustomFieldsValue":1755,"Valore":"BV Hamburg- Eva Maria Benkhoff"},{"IdCustomFieldsValue":1756,"Valore":"BV Turkey"},{"IdCustomFieldsValue":1757,"Valore":"BV UK"},{"IdCustomFieldsValue":1937,"Valore":"BV Vietnam"},{"IdCustomFieldsValue":1938,"Valore":"BV Schwerin"},{"IdCustomFieldsValue":1939,"Valore":"BV Guangzhou"},{"IdCustomFieldsValue":1940,"Valore":"BV France"},{"IdCustomFieldsValue":1941,"Valore":"No outsourcing"},{"IdCustomFieldsValue":1944,"Valore":"Coventya"},{"IdCustomFieldsValue":1945,"Valore":"Cimac- P.Biglia"},{"IdCustomFieldsValue":2290,"Valore":"Ricotest"},{"IdCustomFieldsValue":2403,"Valore":"LBS"},{"IdCustomFieldsValue":2696,"Valore":"BV Korea"},{"IdCustomFieldsValue":2998,"Valore":"BV Hong Kong"},{"IdCustomFieldsValue":3058,"Valore":"J.S. Hamilton Poland S.A."},{"IdCustomFieldsValue":3191,"Valore":"BV Schwerin - BV Turkey"},{"IdCustomFieldsValue":3341,"Valore":"BV Guangzhou, BV Shangai"},{"IdCustomFieldsValue":3350,"Valore":"BV Guangzhou, BV Honk Kong"},{"IdCustomFieldsValue":3406,"Valore":"BV Putian - Lily Li"},{"IdCustomFieldsValue":4239,"Valore":"BV India"},{"IdCustomFieldsValue":4282,"Valore":"Laboraitore Eric Beucher"},{"IdCustomFieldsValue":4420,"Valore":"HerAmbiente "},{"IdCustomFieldsValue":4679,"Valore":"Chemi-Lab"},{"IdCustomFieldsValue":5745,"Valore":"BV USA, Buffalo - NY "},{"IdCustomFieldsValue":6450,"Valore":"BV Turkey- Ahmet Korkut + BV Hong Kong- Jimmy Wong\/Tasman Tai\r\n"},{"IdCustomFieldsValue":8098,"Valore":"BV Vietnam- Joy Nguyen + BV Turkey- Ahmet Korkut"},{"IdCustomFieldsValue":8755,"Valore":"Appliance Engineering Technology France SAS"},{"IdCustomFieldsValue":9316,"Valore":"BV Vietnam- Joy Nguyen + BV Guangzhou"},{"IdCustomFieldsValue":9483,"Valore":"Neosis s.r.l"},{"IdCustomFieldsValue":9645,"Valore":"Environ Lab"},{"IdCustomFieldsValue":11325,"Valore":"Neosis s.r.l + BV Honk Kong"},{"IdCustomFieldsValue":11342,"Valore":"Beta analythics"},{"IdCustomFieldsValue":12678,"Valore":"BV Honk Kong + BV Shangai"},{"IdCustomFieldsValue":13717,"Valore":"BV Thailand"},{"IdCustomFieldsValue":13917,"Valore":"BV France, BV Shangai"},{"IdCustomFieldsValue":14877,"Valore":"BV Shangai - BV Hong Kong"}],"252":[{"IdCustomFieldsValue":1887,"Valore":"Regular"},{"IdCustomFieldsValue":1888,"Valore":"Express (1-2 Working Days)"},{"IdCustomFieldsValue":1889,"Valore":"Urgent (3 Working Days)"}],"253":[{"IdCustomFieldsValue":1891,"Valore":"Yes"},{"IdCustomFieldsValue":1892,"Valore":"No"}],"261":[{"IdCustomFieldsValue":1978,"Valore":"2C Cina"},{"IdCustomFieldsValue":2442,"Valore":"N\/A"}],"771":[{"IdCustomFieldsValue":8595,"Valore":"PASS"},{"IdCustomFieldsValue":8596,"Valore":"FAIL"},{"IdCustomFieldsValue":8598,"Valore":"N\/A"}],"772":[{"IdCustomFieldsValue":8599,"Valore":"PASS"},{"IdCustomFieldsValue":8600,"Valore":"FAIL"},{"IdCustomFieldsValue":8601,"Valore":"N\/A"}],"773":[{"IdCustomFieldsValue":8602,"Valore":"PASS"},{"IdCustomFieldsValue":8603,"Valore":"FAIL"},{"IdCustomFieldsValue":8604,"Valore":"N\/A"},{"IdCustomFieldsValue":8605,"Valore":"DATA"}],"1083":[{"IdCustomFieldsValue":13482,"Valore":"Moncler Compliance_GT"},{"IdCustomFieldsValue":13488,"Valore":"Moncler Ufficio tecnico_MC"},{"IdCustomFieldsValue":13495,"Valore":"Moncler Compliance_EM"},{"IdCustomFieldsValue":13496,"Valore":"Moncler Compliance_MB"},{"IdCustomFieldsValue":13497,"Valore":"Moncler Compliance_CB"},{"IdCustomFieldsValue":13526,"Valore":"Moncler Compliance_CS"},{"IdCustomFieldsValue":13530,"Valore":"Moncler Compliance_FZ"},{"IdCustomFieldsValue":13554,"Valore":"Moncler Ufficio tecnico_AZ"},{"IdCustomFieldsValue":13662,"Valore":"Moncler Ufficio tecnico_LL"},{"IdCustomFieldsValue":13727,"Valore":"Moncler Ufficio tecnico_AU"},{"IdCustomFieldsValue":13786,"Valore":"Moncler Compliance_AC"},{"IdCustomFieldsValue":13945,"Valore":"Moncler Compliance_BZ"},{"IdCustomFieldsValue":14006,"Valore":"Moncler Compliance_GR"},{"IdCustomFieldsValue":14818,"Valore":"Moncler Ufficio tecnico_LC"},{"IdCustomFieldsValue":14910,"Valore":"Moncler Ufficio tecnico_FV"}]} \ No newline at end of file diff --git a/public/userarea/import_edit2.php b/public/userarea/import_edit2.php index 81ca1e9..6aed56e 100644 --- a/public/userarea/import_edit2.php +++ b/public/userarea/import_edit2.php @@ -713,6 +713,7 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
    +
    @@ -728,7 +729,8 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { - + + diff --git a/public/userarea/modal_annotations.php b/public/userarea/modal_annotations.php new file mode 100644 index 0000000..85203c7 --- /dev/null +++ b/public/userarea/modal_annotations.php @@ -0,0 +1,219 @@ + + + + \ No newline at end of file diff --git a/public/userarea/modal_partsTable.php b/public/userarea/modal_partsTable.php new file mode 100644 index 0000000..581f25d --- /dev/null +++ b/public/userarea/modal_partsTable.php @@ -0,0 +1,155 @@ + + + \ No newline at end of file diff --git a/public/userarea/partsTable.js b/public/userarea/partsTable.js new file mode 100644 index 0000000..2efaef9 --- /dev/null +++ b/public/userarea/partsTable.js @@ -0,0 +1,1017 @@ +$(document).ready(function () { + // =================== + // GLOBAL STATE + // =================== + let partMatrice = {}; + let unsavedChanges = false; + let matrici = []; + + // =================== + // VOICE RECOGNITION SETUP + // =================== + const SpeechRecognition = + window.SpeechRecognition || window.webkitSpeechRecognition; + let recognition = null; + let isVoiceActive = false; + const magicWord = "salva"; + + if (SpeechRecognition) { + recognition = new SpeechRecognition(); + recognition.lang = "it-IT"; + recognition.continuous = true; + recognition.interimResults = false; + + recognition.onresult = function (event) { + const transcript = event.results[ + event.results.length - 1 + ][0].transcript + .trim() + .toLowerCase(); + const $currentRow = $("#partsTableBody tr:last"); + const $descriptionInput = $currentRow.find(".part-description"); + + if (transcript.includes(magicWord)) { + const cleanedTranscript = transcript + .replace(magicWord, "") + .trim(); + if (cleanedTranscript) { + $descriptionInput.val( + ( + $descriptionInput.val() + + " " + + cleanedTranscript + ).trim(), + ); + $descriptionInput.trigger("blur"); + } + const maxPartNumber = Math.max( + ...$("#partsTableBody tr") + .map(function () { + return ( + parseInt($(this).find(".part-number").val()) || + 0 + ); + }) + .get(), + ); + addNewRow(maxPartNumber + 1); + const $newRow = $("#partsTableBody tr:last"); + $newRow.find(".part-description").focus(); + } else { + $descriptionInput.val( + ($descriptionInput.val() + " " + transcript).trim(), + ); + $descriptionInput.trigger("blur"); + } + }; + + recognition.onerror = function (event) { + if (event.error === "no-speech" || event.error === "aborted") { + if (isVoiceActive) recognition.start(); + } else { + alert("Errore nel riconoscimento vocale: " + event.error); + toggleVoiceRecognition(); + } + }; + + recognition.onend = function () { + if (isVoiceActive) recognition.start(); + }; + } else { + $("#toggleVoiceBtn").hide(); + } + + function toggleVoiceRecognition() { + if (!recognition) return; + isVoiceActive = !isVoiceActive; + const $btn = $("#toggleVoiceBtn"); + if (isVoiceActive) { + $btn.addClass("btn-danger").html( + ' Stop Voce', + ); + recognition.start(); + $("#partsTableBody tr:last").find(".part-description").focus(); + } else { + $btn.removeClass("btn-danger") + .addClass("btn-secondary") + .html(' Voce'); + recognition.stop(); + } + } + + $("#toggleVoiceBtn").on("click", toggleVoiceRecognition); + + // =================== + // MODAL HANDLING + // =================== + function loadParts(iddatadb, idquotations) { + if (iddatadb) { + if (matrici.length === 0) { + $.ajax({ + url: "get_matrici_db.php", + method: "GET", + dataType: "json", + success: function (data) { + matrici = data.value || []; + initializeGlobalSelect2(); + loadPhoto(iddatadb, idquotations); + loadExistingParts(iddatadb, idquotations); + }, + error: function (xhr, status, error) { + matrici = []; + initializeGlobalSelect2(); + loadPhoto(iddatadb, idquotations); + loadExistingParts(iddatadb, idquotations); + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + }, + }); + } else { + initializeGlobalSelect2(); + loadPhoto(iddatadb, idquotations); + loadExistingParts(iddatadb, idquotations); + } + } else { + loadPhoto(iddatadb, idquotations); + loadExistingParts(iddatadb, idquotations); + } + } + + // EVENTO PER APRIRE IL SECONDO MODALE + $(document).on("click", "#openAnnotationsBtn", function () { + console.log("Clic su Apri Annotazioni..."); + const iddatadb = $("#partsModal").data("iddatadb"); + const idquotations = $("#partsModal").data("idquotations"); + const trfHeader = $("#trfHeader").text(); + + console.log("Dati recuperati da partsModal:", { + iddatadb, + idquotations, + trfHeader, + }); + + const partsModal = bootstrap.Modal.getInstance( + document.getElementById("partsModal"), + ); + if (partsModal) { + partsModal.hide(); + } + + // Verifica se annotationsModal esiste nel DOM + const annotationsModalElement = + document.getElementById("annotationsModal"); + if (annotationsModalElement) { + console.log("Elemento #annotationsModal trovato nel DOM."); + openAnnotationsModal(iddatadb, idquotations, trfHeader); + return; + } + + // Carica dinamicamente modal_annotations.php se non è già presente + console.log("Caricamento dinamico di modal_annotations.php..."); + $.ajax({ + url: "modal_annotations.php", + method: "GET", + cache: false, + beforeSend: function () { + console.log("Inizio richiesta AJAX per modal_annotations.php"); + }, + success: function (response) { + console.log( + "modal_annotations.php caricato con successo:", + response.substring(0, 100) + "...", + ); + $("#annotationsModalContainer").html(response); + + // Verifica nuovamente la presenza di #annotationsModal + const annotationsModalElementAfterLoad = + document.getElementById("annotationsModal"); + if (!annotationsModalElementAfterLoad) { + console.error( + "Errore: #annotationsModal non trovato nel DOM dopo il caricamento.", + ); + alert( + "Errore: Il modale delle annotazioni non è stato caricato correttamente. Controlla il contenuto di modal_annotations.php.", + ); + return; + } + + openAnnotationsModal(iddatadb, idquotations, trfHeader); + }, + error: function (xhr, status, error) { + console.error( + "Errore nel caricamento di modal_annotations.php:", + { + status: status, + statusCode: xhr.status, + error: error, + responseText: xhr.responseText, + }, + ); + alert( + "Errore nel caricamento del modale delle annotazioni: " + + error + + " (Codice: " + + xhr.status + + ")", + ); + }, + }); + }); + + function openAnnotationsModal(iddatadb, idquotations, trfHeader) { + console.log("Tentativo di aprire annotationsModal con:", { + iddatadb, + idquotations, + trfHeader, + }); + const annotationsModalElement = + document.getElementById("annotationsModal"); + if (!annotationsModalElement) { + console.error( + "Elemento #annotationsModal non trovato nel DOM durante openAnnotationsModal.", + ); + alert( + "Errore: Modale annotazioni non trovato dopo il caricamento.", + ); + return; + } + + if (typeof window.initAnnotationsModal === "function") { + console.log("Chiamata a window.initAnnotationsModal..."); + window.initAnnotationsModal(iddatadb, idquotations, trfHeader); + } else { + console.error( + "initAnnotationsModal non definito. Verifica che annotationsModal.js sia caricato correttamente e definisca window.initAnnotationsModal.", + ); + alert( + "Errore: Funzione initAnnotationsModal non trovata. Controlla che annotationsModal.js sia incluso correttamente.", + ); + } + } + + $("#partsModal").on("hide.bs.modal", function (e) { + if ( + unsavedChanges && + !confirm("Hai modifiche non salvate. Vuoi davvero uscire?") + ) { + e.preventDefault(); + } + }); + + $("#partsModal").on("hidden.bs.modal", function () { + partMatrice = {}; + unsavedChanges = false; + matrici = []; + $("#photoSelectorContainer").empty().hide(); + $("#samplePhoto").attr("src", ""); + $("#partsTableBody").empty(); + $("#global-matrice").empty(); + $(".temp-alert").remove(); + $(".modal-backdrop").remove(); + $("body").removeClass("modal-open").css("padding-right", ""); + $(":focus").blur(); + }); + + // =================== + // PHOTO LOADERS + // =================== + function loadPhoto(iddatadb, idquotations) { + const currentPhoto = $("#samplePhoto").attr("src"); + const endpoint = idquotations + ? "load_photo_quotation.php" + : "load_photo.php"; + const data = idquotations + ? { idquotations: idquotations } + : { iddatadb: iddatadb }; + $.ajax({ + url: endpoint, + method: "GET", + data: data, + success: function (response) { + if (response.success) { + if (response.photos && response.photos.length > 1) { + showPhotoSelector(response.photos, currentPhoto); + } else if ( + response.photos && + response.photos.length === 1 + ) { + loadSinglePhoto(response.photos[0]); + } else { + $("#samplePhoto").attr("src", ""); + const errorMsg = $( + '', + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + } + } else { + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + } + }, + error: function (xhr, status, error) { + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + }, + }); + } + + function showPhotoSelector(photos, selected = null) { + const selectorContainer = $("#photoSelectorContainer"); + selectorContainer.empty().show(); + const selector = $( + '', + ); + photos.forEach((photo, index) => { + const photoName = photo.split("/").pop(); + const option = $("") + .val(photo) + .text(`Photo ${index + 1} - ${photoName}`); + selector.append(option); + }); + selector.on("change", function () { + loadSinglePhoto($(this).val()); + }); + selectorContainer.append(selector); + const photoToSelect = + selected && photos.includes(selected) ? selected : photos[0]; + if (photoToSelect) { + selector.val(photoToSelect); + loadSinglePhoto(photoToSelect); + } + } + + function loadSinglePhoto(photoPath) { + const img = $("#samplePhoto"); + img.off("load").attr("src", photoPath); + } + + // =================== + // DOWNLOAD PHOTO + // =================== + $("#downloadPhotoBtn").on("click", function () { + const photoSrc = $("#samplePhoto").attr("src"); + if (!photoSrc) { + const errorMsg = $( + '', + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + const photoName = photoSrc.split("/").pop(); + const link = document.createElement("a"); + link.href = photoSrc; + link.download = photoName; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }); + + // =================== + // PARTS TABLE + // =================== + $(document).on("click", ".add-row-global", function (e) { + e.preventDefault(); + const maxPartNumber = Math.max( + ...$("#partsTableBody tr") + .map(function () { + return parseInt($(this).find(".part-number").val()) || 0; + }) + .get(), + ); + addNewRow(maxPartNumber + 1); + }); + + $(document).on("click", ".add-mix-global", function (e) { + e.preventDefault(); + const maxPartNumber = Math.max( + ...$("#partsTableBody tr") + .map(function () { + return parseInt($(this).find(".part-number").val()) || 0; + }) + .get(), + ); + addNewRow(maxPartNumber + 1, true); + }); + + function addNewRow(nextPartNumber, isMix = false) { + const description = isMix ? "Mix" : ""; + const newRow = ` + + + + +
    + + +
    + + + + + + + + `; + $("#partsTableBody").append(newRow); + const $select = $("#partsTableBody tr:last .part-matrice"); + initializeSelect2($select, nextPartNumber, "", null); + updateRowButtons(); + markUnsaved(); + } + + function updateRowButtons() { + const rowCount = $("#partsTableBody tr").length; + $("#partsTableBody tr").each(function () { + $(this) + .find(".remove-row") + .toggle(rowCount > 1); + }); + } + + $(document).on("click", ".add-to-mix-row", function (e) { + e.preventDefault(); + const $row = $(this).closest("tr"); + const partDescription = $row.find(".part-description").val().trim(); + if (!partDescription) { + const errorMsg = $( + '', + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + const $mixRow = $("#partsTableBody tr") + .filter(function () { + return $(this) + .find(".part-description") + .val() + .trim() + .startsWith("Mix"); + }) + .last(); + + if ($mixRow.length === 0) { + const errorMsg = $( + '', + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + return; + } + + let mixDescription = $mixRow.find(".part-description").val().trim(); + if (mixDescription === "Mix") { + mixDescription = `Mix ${partDescription}`; + } else if (!mixDescription.includes(partDescription)) { + mixDescription += ` + ${partDescription}`; + } + $mixRow.find(".part-description").val(mixDescription).trigger("blur"); + }); + + $(document).on("click", ".remove-row", function (e) { + e.preventDefault(); + const $row = $(this).closest("tr"); + const partId = $row.data("part-id"); + const partNumber = $row.find(".part-number").val(); + const iddatadb = $("#partsModal").data("iddatadb"); + const idquotations = $("#partsModal").data("idquotations"); + const endpoint = idquotations + ? "delete_part_quotation.php" + : "delete_part.php"; + + if (partId && partId !== "new") { + $.ajax({ + url: endpoint, + method: "POST", + data: JSON.stringify({ part_id: partId }), + contentType: "application/json", + success: function (response) { + if (response.success) { + $row.remove(); + delete partMatrice[partNumber]; + updateRowButtons(); + markUnsaved(); + } else { + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + } + }, + error: function (xhr, status, error) { + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + }, + }); + } else { + $row.remove(); + delete partMatrice[partNumber]; + updateRowButtons(); + markUnsaved(); + } + }); + + $(document).on("blur", ".part-description, .part-number", function () { + const $input = $(this); + const $row = $input.closest("tr"); + const partNumber = $row.find(".part-number").val(); + const partDescription = $row.find(".part-description").val().trim(); + const $saveStatus = $row.find(".save-status"); + const $saveLoading = $row.find(".save-loading"); + const iddatadb = $("#partsModal").data("iddatadb"); + const idquotations = $("#partsModal").data("idquotations"); + const isMix = partDescription.startsWith("Mix") ? "Y" : "N"; + const partId = $row.data("part-id") || null; + const endpoint = idquotations + ? "save_parts_quotation.php" + : "save_parts.php"; + const data = idquotations + ? { idquotations: idquotations } + : { iddatadb: iddatadb }; + + if (partDescription && (iddatadb || idquotations)) { + $saveLoading.show(); + $saveStatus.hide(); + $.ajax({ + url: endpoint, + method: "POST", + data: JSON.stringify({ + ...data, + parts: [ + { + id: partId, + part_number: partNumber, + part_description: partDescription, + mix: isMix, + }, + ], + }), + contentType: "application/json", + success: function (response) { + $saveLoading.hide(); + if (response.success) { + $saveStatus.show(); + if (response.part_id) { + $row.attr("data-part-id", response.part_id).data( + "part-id", + response.part_id, + ); + } + setTimeout(() => $saveStatus.hide(), 2000); + } else { + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + } + }, + error: function (xhr, status, error) { + $saveLoading.hide(); + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + }, + }); + } + }); + + function loadExistingParts(iddatadb, idquotations) { + const endpoint = idquotations + ? "load_parts_quotation.php" + : "load_parts.php"; + const data = idquotations + ? { idquotations: idquotations } + : { iddatadb: iddatadb }; + $.ajax({ + url: endpoint, + method: "GET", + data: data, + success: function (response) { + $("#partsTableBody").empty(); + if ( + response.success && + response.parts && + response.parts.length > 0 + ) { + response.parts.forEach((part) => { + const newRow = ` + + + + +
    + + +
    + + + + + + + + `; + $("#partsTableBody").append(newRow); + const $select = $("#partsTableBody").find( + `tr[data-part-id="${part.id}"] .part-matrice`, + ); + initializeSelect2( + $select, + part.part_number, + part.id, + part.idmatrice, + ); + if (part.idmatrice) { + partMatrice[part.part_number] = part.idmatrice; + } + }); + } else { + addNewRow(1); + } + updateRowButtons(); + }, + error: function (xhr, status, error) { + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + addNewRow(1); + }, + }); + } + + function initializeSelect2($select, partNumber, partId, idmatrice) { + if (typeof $.fn.select2 === "undefined") { + $select.replaceWith( + '', + ); + return; + } + + const options = matrici.map(function (matrice) { + return { id: matrice.IdMatrice, text: matrice.NomeMatrice }; + }); + + $select.select2({ + placeholder: "Seleziona matrice", + allowClear: true, + data: options, + dropdownParent: $("#partsModal"), + matcher: function (params, data) { + if (!params.term || params.term.length < 3) return data; + const term = params.term.toUpperCase(); + if (data.text.toUpperCase().indexOf(term) >= 0) return data; + return null; + }, + }); + + if (partId && partId !== "new" && idmatrice) { + const matrice = matrici.find((m) => m.IdMatrice == idmatrice); + if (matrice) { + const option = new Option( + matrice.NomeMatrice, + matrice.IdMatrice, + true, + true, + ); + $select.append(option).trigger("change"); + partMatrice[partNumber] = matrice.IdMatrice; + } + } + + $select.on("change", function () { + const idmatrice = $(this).val(); + const $row = $(this).closest("tr"); + const partId = $row.data("part-id"); + const partNumber = $row.find(".part-number").val(); + const $saveStatus = $row.find(".save-status"); + const $saveLoading = $row.find(".save-loading"); + + partMatrice[partNumber] = idmatrice || null; + + if (partId && partId !== "new") { + $saveLoading.show(); + $saveStatus.hide(); + const iddatadb = $("#partsModal").data("iddatadb"); + const idquotations = $("#partsModal").data("idquotations"); + const endpoint = idquotations + ? "save_matrice_quotation.php" + : "save_matrice.php"; + const data = idquotations + ? { idquotations: idquotations } + : { iddatadb: iddatadb }; + + $.ajax({ + url: endpoint, + method: "POST", + data: JSON.stringify({ + ...data, + parts: [{ id: partId, idmatrice: idmatrice || null }], + }), + contentType: "application/json", + success: function (response) { + if (response.success) { + $saveLoading.hide(); + $saveStatus.show(); + setTimeout(() => $saveStatus.hide(), 2000); + } else { + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + $saveLoading.hide(); + } + }, + error: function (xhr, status, error) { + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + $saveLoading.hide(); + }, + }); + } + }); + } + + function initializeGlobalSelect2() { + const $select = $("#global-matrice"); + if (typeof $.fn.select2 === "undefined") { + $select.replaceWith( + '', + ); + return; + } + + const options = matrici.map(function (matrice) { + return { id: matrice.IdMatrice, text: matrice.NomeMatrice }; + }); + + $select.select2({ + placeholder: "Seleziona matrice globale", + allowClear: true, + data: options, + dropdownParent: $("#partsModal"), + matcher: function (params, data) { + if (!params.term || params.term.length < 3) return data; + const term = params.term.toUpperCase(); + if (data.text.toUpperCase().indexOf(term) >= 0) return data; + return null; + }, + }); + } + + $(document).on("click", ".propagate-matrice-btn", function () { + const $row = $(this).closest("tr"); + const globalVal = $("#global-matrice").val(); + if (globalVal) { + $row.find(".part-matrice").val(globalVal).trigger("change"); + } else { + const errorMsg = $( + '', + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + } + }); + + function renumberParts() { + const $rows = $("#partsTableBody tr"); + const iddatadb = $("#partsModal").data("iddatadb"); + const idquotations = $("#partsModal").data("idquotations"); + const endpoint = idquotations + ? "renumber_parts_quotation.php" + : "renumber_parts.php"; + const data = idquotations + ? { idquotations: idquotations } + : { iddatadb: iddatadb }; + let newPartMatrice = {}; + + let partsData = $rows + .map(function (index) { + const $row = $(this); + return { + partNumber: $row.find(".part-number").val(), + partDescription: $row.find(".part-description").val(), + partId: $row.data("part-id"), + }; + }) + .get(); + + partsData.forEach((part, index) => { + const newNumber = index + 1; + newPartMatrice[newNumber] = partMatrice[part.partNumber] || null; + part.partNumber = newNumber; + }); + + $rows.each(function (index) { + $(this) + .find(".part-number") + .val(index + 1); + }); + + partMatrice = newPartMatrice; + + const partsToSave = partsData.map((part) => ({ + id: part.partId || null, + part_number: part.partNumber, + part_description: part.partDescription, + mix: part.partDescription.startsWith("Mix") ? "Y" : "N", + idmatrice: partMatrice[part.partNumber] || null, + })); + + $.ajax({ + url: endpoint, + method: "POST", + data: JSON.stringify({ ...data, parts: partsToSave }), + contentType: "application/json", + success: function (response) { + if (response.success) { + $rows.each(function (index) { + const $row = $(this); + const newPartId = + response.part_ids && response.part_ids[index] + ? response.part_ids[index] + : $row.data("part-id"); + if (newPartId) { + $row.attr("data-part-id", newPartId).data( + "part-id", + newPartId, + ); + } + const $saveStatus = $row.find(".save-status"); + const $saveLoading = $row.find(".save-loading"); + $saveLoading.hide(); + $saveStatus.show(); + setTimeout(() => $saveStatus.hide(), 2000); + }); + markUnsaved(); + } else { + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + } + }, + error: function (xhr, status, error) { + const errorMsg = $( + '", + ); + $("#partsModal .modal-body").prepend(errorMsg); + setTimeout(function () { + errorMsg.fadeOut(500, function () { + $(this).remove(); + }); + }, 5000); + }, + }); + } + + $("#renumberPartsBtn").on("click", renumberParts); + + function markUnsaved() { + if (!unsavedChanges) { + unsavedChanges = true; + } + } + + $(document).on( + "input change", + "#partsTableBody input, #partsTableBody select", + markUnsaved, + ); + $(document).on( + "click", + ".add-row-global, .add-mix-global, .add-to-mix-row, .remove-row, .propagate-matrice-btn", + markUnsaved, + ); + + // Esporta la funzione loadParts per essere usata da import_Edit2.php + window.loadParts = loadParts; +}); diff --git a/public/userarea/save_matrice.php b/public/userarea/save_matrice.php new file mode 100644 index 0000000..e569e40 --- /dev/null +++ b/public/userarea/save_matrice.php @@ -0,0 +1,39 @@ +getConnection(); + +$data = json_decode(file_get_contents('php://input'), true); + +$iddatadb = $data['iddatadb'] ?? null; +$parts = $data['parts'] ?? []; + +if (!$iddatadb || empty($parts)) { + echo json_encode(['success' => false, 'message' => 'Dati mancanti']); + exit; +} + +$part = $parts[0]; +$partId = $part['id'] ?? null; +$idmatrice = $part['idmatrice'] ?? null; + +if (!$partId) { + echo json_encode(['success' => false, 'message' => 'ID parte mancante']); + exit; +} + +try { + $stmt = $pdo->prepare("UPDATE identification_parts + SET idmatrice = :idmatrice, + updated_at = NOW() + WHERE id = :id"); + $stmt->execute([ + ':id' => $partId, + ':idmatrice' => $idmatrice // Può essere NULL + ]); + echo json_encode(['success' => true, 'message' => 'Matrice aggiornata con successo']); +} catch (PDOException $e) { + echo json_encode(['success' => false, 'message' => 'Errore nel salvataggio della matrice: ' . $e->getMessage()]); +} diff --git a/public/userarea/save_parts.php b/public/userarea/save_parts.php index 65e07cc..089732d 100644 --- a/public/userarea/save_parts.php +++ b/public/userarea/save_parts.php @@ -16,41 +16,45 @@ if (!$iddatadb || empty($parts)) { } $part = $parts[0]; -$partId = $part['id'] ?? null; // part_id თუ არსებობს +$partId = $part['id'] ?? null; $partNumber = $part['part_number'] ?? null; $partDescription = $part['part_description'] ?? ''; $mix = $part['mix'] ?? 'N'; +$idmatrice = $part['idmatrice'] ?? null; // Nuovo campo idmatrice if ($partDescription) { try { if ($partId) { - // UPDATE თუ უკვე არსებობს part + // UPDATE se la parte esiste $stmt = $pdo->prepare("UPDATE identification_parts SET part_number = :part_number, part_description = :part_description, mix = :mix, + idmatrice = :idmatrice, updated_at = NOW() WHERE id = :id"); $stmt->execute([ ':id' => $partId, ':part_number' => $partNumber, ':part_description' => $partDescription, - ':mix' => $mix + ':mix' => $mix, + ':idmatrice' => $idmatrice // Può essere NULL ]); - echo json_encode(['success' => true, 'part_id' => $partId, 'part_number'=>$partNumber, 'message' => 'Parte aggiornata con successo']); + echo json_encode(['success' => true, 'part_id' => $partId, 'part_number' => $partNumber, 'message' => 'Parte aggiornata con successo']); } else { - // INSERT თუ ახალია + // INSERT per nuova parte $stmt = $pdo->prepare("INSERT INTO identification_parts - (iddatadb, part_number, part_description, mix, created_at, updated_at) - VALUES (:iddatadb, :part_number, :part_description, :mix, NOW(), NOW())"); + (iddatadb, part_number, part_description, mix, idmatrice, created_at, updated_at) + VALUES (:iddatadb, :part_number, :part_description, :mix, :idmatrice, NOW(), NOW())"); $stmt->execute([ ':iddatadb' => $iddatadb, ':part_number' => $partNumber, ':part_description' => $partDescription, - ':mix' => $mix + ':mix' => $mix, + ':idmatrice' => $idmatrice // Può essere NULL ]); $newId = $pdo->lastInsertId(); - echo json_encode(['success' => true, 'part_id' => $newId, 'part_number'=>$partNumber, 'message' => 'Parte salvata con successo']); + echo json_encode(['success' => true, 'part_id' => $newId, 'part_number' => $partNumber, 'message' => 'Parte salvata con successo']); } } catch (PDOException $e) { echo json_encode(['success' => false, 'message' => 'Errore nel salvataggio: ' . $e->getMessage()]);