diff --git a/config/csv_import/EXTRACTIONS/T3LP20RR SN 030022040361 09 10 2024.csv b/config/csv_import/EXTRACTIONS/T3LP20RR SN 030022040361 09 10 2024.csv new file mode 100644 index 0000000..892c91f --- /dev/null +++ b/config/csv_import/EXTRACTIONS/T3LP20RR SN 030022040361 09 10 2024.csv @@ -0,0 +1,308 @@ +codice_ricetta,part_number,tempo_pre_riempimento,pressione_pre_riempimento,tempo_riempimento,tempo_assestamento,percentuale_minima_pressione_assestamento,percentuale_massima_pressione_assestamento,tempo_di_test,pressione_di_test_delta_minimo,pressione_di_test,pressione_di_test_delta_massimo,tempo_svuotamento,pressione_svuotamento,template_di_stampa,campo1,campo2 +TEST FUGA 7 BAR,B1619X,0.0,0,5.0,10.0,10,10,5.0,12.0,0,8.0,0.0,0,,DA 14.4 A 21.6 , +5803217628 REV.,UNIT GASOIL PIPE,0.0,0,5.0,10.0,10,10,20.0,20.0,0,0.0,0.0,0,,UNITE GASOIL PI,IVECO +5802915822,COMPL.MAN,0.0,0,5.0,15.0,15,15,10.0,20.0,0,10.0,1.0,100,,5802915822 R.02,5802915822 R.02 +PY83-6B747-BA,ENGINE OIL ASSY,0.0,0,5.0,15.0,10,10,30.0,20.0,0,10.0,0.1,1," +",PY83-6B747-BA,ASTON MARTIN +PY83-6B748-BA,ENGINE OIL ASSY,0.0,0,5.0,15.0,10,10,30.0,20.0,0,10.0,0.1,1," +",PY83-6B748-BA,ASTON MARTIN +MY83-6B747-BA,ENGINE OIL ASSY,0.0,0,30.0,20.0,10,10,30.0,20.0,0,10.0,0.1,1," +",MY83-6B747-BA,ASTON MARTIN +MY83-6B748-BA,ENGINE OIL ASSY,0.0,0,5.0,15.0,10,10,30.0,20.0,0,10.0,0.1,1," +",MY83-6B748-BA,ASTON MARTIN +MY83-6L701-AB, ENGINE OIL ASSY,0.0,0,10.0,10.0,10,10,30.0,20.0,0,10.0,0.1,1,,MY83-6L701-AB,ASTON MARTIN +MY83-6L694-AB,ENGINE OIL ASSY,0.0,0,10.0,10.0,10,10,30.0,25.0,0,10.0,0.1,1," +",MY83-6L694-AB,ASTON MARTIN +000746453,000746453,0.0,0,10.0,20.0,10,10,20.0,25.0,0,5.0,0.1,0, ,000746453 REV05,FERRARI +5802889710 REV3,FUEL HOSE,0.0,0,20.0,25.0,10,10,20.0,20.0,0,0.0,0.1,0,,FUEL HOSE,IVECO +5802953113 REV.,FUEL HOSE,0.0,0,5.0,25.0,10,10,20.0,20.0,0,0.0,0.0,0,,FUEL HOSE,IVECO +5802980014 REV.,UNIT GASOIL PIPE,0.0,0,15.0,10.0,10,10,20.0,20.0,0,0.0,0.0,0,,UNITE GASOIL PI,IVECO +5802981174 REV.,UNIT GASOIL PIPE,0.0,0,5.0,20.0,10,10,60.0,20.0,0,0.0,0.0,0,,UNIT GASOIL PIP,IVECO +5802889709 REV3,FUEL HOSE,0.0,0,25.0,30.0,10,10,20.0,20.0,0,0.0,0.0,0,,FUEL HOSE,IVECO +12970-13-2382,TUBE-ASSY-CLUTCH,0.0,0,10.0,5.0,10,10,20.0,30.0,0,5.0,0.0,0,,12970-13-2382,MULTIMATIC +12970-13-2384,TUBE-ASSY-CLUTCH,0.0,0,10.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,12970-13-2384,MULTIMATIC +12970-13-2386,TUBEASSY-CLUTCH,0.0,0,10.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,12970-13-2386,MULTIMATIC +5801384838,full hose,0.0,0,10.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,5801384838,lancia bz +16L0043CP REV02,,0.0,0,5.0,10.0,10,10,30.0,20.0,0,0.0,0.0,0,,PIPE-OUTLET-PRE,P16 +16LA027SP REV02,,0.0,0,15.0,15.0,10,10,30.0,30.0,0,0.0,0.0,0,,HOSE-LH WCAC AN,P16 +16LA648CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,0,0.0,0.0,0,,HOSE-RH-LTR-OUT,P16 + 16LA661CP REV1,HOSE-RH-HT-RADIATOR-BOT,0.0,0,20.0,20.0,20,20,30.0,20.0,0,5.0,1.0,1,,HOSE-RH-HT-RADI,P16 + 16LA449CP REV2,,0.0,0,5.0,10.0,10,10,30.0,30.0,0,0.0,0.0,0,,HOSE-ENGINE-TO-,P16 + 16L0045CP REV2,,0.0,0,10.0,10.0,10,10,30.0,20.0,0,10.0,0.0,0,,HOSE-HT-RADIATO,P16 +16LA718CP REV02,MCLAREN,0.0,0,10.0,10.0,10,10,30.0,20.0,0,10.0,0.0,0,,HOSE-E-MOTOR-OU,P16 + 16L0075CP REV3,,0.0,0,5.0,10.0,10,10,20.0,30.0,0,0.0,0.0,0,,HOSE-HEADER-TAN,P16 +5803112815 R.1,COMPL.MAN,0.0,0,5.0,5.0,15,15,10.0,30.0,0,5.0,1.0,1000,,5803112815 R1, +5803112816 R.1,COMPL.MAN,0.0,0,5.0,5.0,15,15,10.0,20.0,0,10.0,1.0,100,, 5803112816 R.1, +16LA397CP REV02,,0.0,0,5.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,HOSE-HT-RADIATO,P16 +16LA765CP REV01,,0.0,0,5.0,5.0,10,10,30.0,20.0,0,0.0,0.0,0,,HOSE-WCACS LINK,P16 +16LA695CP REV02,,0.0,0,15.0,15.0,10,10,30.0,20.0,0,0.0,0.0,0,,HOSE PRE COOLER,P16 +5801384840 REV0,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,5801384840 REV0,LANCIA BOLZANO +60175799 REV0,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,60175799 REV0,LANCIA BOLZANO +5803103147 REV0,UNIT GASOIL PIPE FILTER,0.0,0,25.0,30.0,10,10,20.0,20.0,0,0.0,0.0,0,,UNIT GASOIL PIL,IVECO +5803103150 REV0,UNIT GASOIL PIPE FILTER,0.0,0,20.0,30.0,10,10,20.0,20.0,0,10.0,0.0,0,,UNIT GASOIL PIL,IVECO +5801970063 REV0,,0.0,0,5.0,10.0,10,10,30.0,30.0,0,10.0,0.0,0,,5801970063,"LANCIA,BOLZANO" +5801616061,,0.0,0,5.0,10.0,10,10,30.0,30.0,0,10.0,0.0,0," +",5801616061,"LANCIA,BOLZANO" + 16LA584CP REV1,,0.0,0,5.0,10.0,10,10,30.0,20.0,0,0.0,0.0,0,,HOSE-TRANS HX-R,P16 +5801384842 REV0,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,5801384842 REV0,LANCIA BOLZANO +5801970066 REV0,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,5801970066,LANCIA BOLZANO +16LA372CP REV01,MCLAREN,0.0,0,5.0,10.0,10,10,30.0,20.0,0,10.0,0.0,0,,PIPE-IN-PRE-COO,P16 +16LA518CP REV02,P16,0.0,0,5.0,10.0,10,10,20.0,20.0,0,10.0,0.0,0,,HOSE-TO-E-MOTOR,P16 +16LA680CP REV01,,0.0,0,20.0,10.0,10,10,30.0,20.0,0,0.0,0.0,0,,HOSE-TRANS- HX-,P16 +16FB157CP REV 3,MCLAREN,0.0,0,15.0,5.0,10,10,30.0,50.0,0,2.0,0.0,0,,ASSY CCV-OIL TA,P16 +16FC256CP REV01,ASSY CCV,0.0,17000,15.0,10.0,20,20,20.0,50.0,0,2.0,0.0,0,,ASSY MAKE UP AI,P16 +16L0151CP REV03,,0.0,0,20.0,25.0,10,10,30.0,20.0,0,5.0,0.0,0,,HOSE-IPU-OUTLET,P16 +16L0170CP REV03,,0.0,0,5.0,10.0,10,10,30.0,25.0,0,5.0,0.0,0,,HOSE-IPU-OUTLET,P16 +16L0161CP REV04,,0.0,0,15.0,15.0,10,10,30.0,20.0,0,5.0,0.0,0,,HOSE-WCACS-TO-M,P16 +16L0167CP REV02,,0.0,0,10.0,20.0,10,10,30.0,20.0,0,5.0,0.0,0,,HOSE-TO-MCU,16L0167CP REV02 +504321531,,0.0,0,5.0,10.0,10,10,30.0,30.0,0,10.0,0.0,0," +",504321531,"LANCIA,BOLZANO" +16L0180CP REV04,,0.0,0,15.0,10.0,10,10,30.0,20.0,0,0.0,1.0,0,,HOSE-LH-LTR-OUT,P16 +16L0154CP REV03,,0.0,0,15.0,25.0,10,10,30.0,20.0,0,5.0,1.0,0,,HOSE-RH-LTR-OUT,P16 +5801970064 REV0,,0.0,0,5.0,10.0,10,10,30.0,30.0,0,10.0,0.0,0,,5801970064 REV0,"LANCIA,BOLZANO" +16FC446CP REV01,ASSY CCV,0.0,17000,5.0,5.0,20,20,20.0,50.0,0,2.0,0.0,0,,FED,T16C-Z0800-001 + 16LA397CP REV2,,0.0,0,5.0,5.0,10,10,30.0,20.0,0,0.0,0.0,0,,HOSE-HT-RADIATO,P16 +16L0164CP REV02,,0.0,0,10.0,15.0,10,10,30.0,20.0,0,0.0,0.0,0,,HOSE-LH-LTR-OUT,P16 +16LA461CP REV02,,0.0,0,10.0,10.0,10,10,20.0,20.0,0,0.0,0.0,0,,ASSY-HOSE-HT-RT,P16 +16L0177CP REV03,,0.0,0,15.0,10.0,10,10,30.0,20.0,0,0.0,1.0,0,,HOSE-JNCTN TO W,P16 +16L0007CP RE3,,0.0,0,5.0,5.0,10,10,30.0,20.0,0,5.0,0.0,0,,HOSE-IPU-JNCTN-,P16 +16LA586CP REV1,,0.0,0,15.0,15.0,10,10,30.0,20.0,0,0.0,0.0,0,,HOSE PRE COOLER,P16 +16FA849CP REV02,,0.0,17000,5.0,5.0,20,20,20.0,50.0,0,2.0,0.0,0,,ASSY OIL FILL,P16 +16FC084CP REV2,,0.0,0,5.0,5.0,10,10,20.0,50.0,0,0.0,0.0,0,,BALANCE PIPE-IN,P16 +16LA573CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,0,0.0,0.0,0,,HOSE MCU-TO-MOT,P16 +16L0145CP REV3,,0.0,0,5.0,15.0,10,10,30.0,20.0,0,0.0,0.0,0,,HOSE-HOSE-PUMP-,P16 +16FB394CP REV04,,0.0,0,5.0,5.0,10,10,30.0,30.0,0,5.0,0.0,0,,ASSY INLET PURG,P16 +16FC069CP REV1,,0.0,0,10.0,15.0,10,10,20.0,50.0,0,5.0,0.0,0,,ASSY CCV-INTAKE,P16 +60192056 REV1,FUEL HOSE,0.0,0,20.0,10.0,10,10,20.0,20.0,0,5.0,0.0,0,,60192056 REV1,LANCIA BOLZANO +5801970065 REV0,,0.0,0,20.0,20.0,10,10,30.0,30.0,0,0.0,0.0,0,,5801970065 RE0,"LANCIA,BOLZANO" +5801384841 REV0,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,5801384841 REV0,LANCIA BOLZANO +5801384839 REV0,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,5801384839 REV0,LANCIA BOLZANO +5803112815 R.1,COMPL.MAN,0.0,0,5.0,5.0,15,15,10.0,30.0,0,5.0,1.0,1000,,5803112815 R1, +16JA605CP,,10.0,500,10.0,30.0,10,10,10.0,20.0,0,10.0,0.0,0,,16JA603CP, +5803112815,,0.0,0,5.0,5.0,5,10,10.0,30.0,0,5.0,0.0,0,,5803112816, +5801970067 REV1,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,5801970067 REV0,LANCIA BOLZANO +000746453,000746453,0.0,0,10.0,20.0,10,10,30.0,30.0,0,10.0,0.0,0,,, +5801862227 REV0,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,0,5.0,0.0,0,,5801862227 REV0,LANCIA BOLZANO +5803018239,PIPE,0.0,0,5.0,10.0,10,10,10.0,10.0,0,5.0,0.0,0,,5803018239,PIPE +5803018238,PIPE,0.0,0,5.0,10.0,10,10,10.0,10.0,0,5.0,0.0,0,,5803018238,PIPE +5803018244,PIPE,0.0,0,5.0,10.0,10,10,10.0,10.0,0,5.0,0.0,0,,5803018244,PIPE +5803018243,PIPE,0.0,0,5.0,10.0,10,10,10.0,10.0,0,5.0,0.0,0,,5803018243,PIPE +16LA668CP REV01,,0.0,0,15.0,15.0,10,10,30.0,30.0,0,0.0,0.0,0,,HOSE-LH WCAC AN,P16 +16LA773CP REV01,,0.0,0,20.0,10.0,10,10,30.0,20.0,0,0.0,0.0,0,,HOSE-TRANS- HX-,P16 +98FA644CP,,10.0,2000,10.0,10.0,20,20,20.0,150.0,0,0.0,0.0,0,,,P98 + 16LA353CP REV2,HOSE-RH-HT-RADIATOR-TOP,0.0,0,20.0,15.0,20,20,30.0,20.0,0,5.0,2.0,1,,HOSE-RH-HT-RADI,P16 + 98FB081CP REV1,,0.0,0,10.0,10.0,10,10,20.0,10.0,0,10.0,0.0,0,,ASSY-PIPE-CCV-T, +98FB342CP,,0.0,0,10.0,10.0,10,10,20.0,10.0,0,0.0,0.0,0,,18FB342CP, +16L0046CP REV3,HOSE-RH-HT-RADIATOR-BOT,0.0,0,20.0,10.0,10,10,20.0,20.0,0,5.0,1.0,1,,HOSE-LH-HT-RADI,P16 +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +NESSUN NOME,,0.0,0,1.0,1.0,10,10,1.0,0.0,0,0.0,0.0,0,,, +98FB080CP,,0.0,0,10.0,10.0,10,10,20.0,10.0,0,20.0,0.0,0,,98FB080CP, +98FA186CP,98FA186CP,0.0,0,5.0,10.0,10,10,20.0,15.0,0,15.0,0.0,0,,98FA186CP, +5802991065,,0.0,0,5.0,5.0,10,10,10.0,30.0,0,5.0,0.0,0,,IVECO, +TENUTA 20 bar,,0.0,0,5.0,40.0,10,10,10.0,1.0,0,1.0,2.0,0,,, +FUGA,,0.0,0,5.0,40.0,10,10,5.0,5.0,0,0.0,2.0,0,,, +112247,j112247,0.0,1000,15.0,15.0,5,5,10.0,30.0,7000,30.0,1.0,100,,112247, diff --git a/config/csv_import/EXTRACTIONS/T3LP20RR SN030022100512 4 11 2024.csv b/config/csv_import/EXTRACTIONS/T3LP20RR SN030022100512 4 11 2024.csv new file mode 100644 index 0000000..b0d73ef --- /dev/null +++ b/config/csv_import/EXTRACTIONS/T3LP20RR SN030022100512 4 11 2024.csv @@ -0,0 +1,303 @@ +codice_ricetta,codice_prodotto,tempo_pre_riempimento,pressione_pre_riempimento,tempo_riempimento,tempo_assestamento,percentuale_minima_pressione_assestamento,percentuale_massima_pressione_assestamento,tempo_di_test,pressione_di_test_delta_minimo,pressione_di_test,pressione_di_test_delta_massimo,tempo_svuotamento,pressione_svuotamento,modello_etichetta,testo_etich_1,testo_etich_2 +07N.131.628.A,,10,200,20,20,10,10,10,5,200,5,20,0,ferrari_30x16_203.prn,07N.131.628.A, +V04.030.057.BE,P18 BATTERY COOLING,0,0,20,20,10,10,20,5,4100,5,1,0,ferrari_30x16_203.prn,V04.030.057.BE, +000990502,,0,0,10,10,10,10,10,30,1500,20,0,0,ferrari_30x16_203.prn,000990502, +98FA644CP,,0,0,5,10,10,10,20,15,3000,15,0,0,ferrari_30x16_203.prn,98FA644CP, +5803158246,CPLGASOLIO LP,5,2000,5,10,10,10,20,30,2000,0,0,0,ferrari_30x16_203.prn,5803158246,C9 CCM FPT +BLOW BY WOKO,000781499,10,1000,10,10,99,99,10,600,1000,20,0,0,ferrari_30x16_203.prn,000781499, +SY9Y-2976-B,SY9Y-2976-A,0,5000,10,10,10,10,10,20,3000,15,10,0,ferrari_30x16_203.prn,SY9Y-2976-B, +SY9Y-2976-A,SY9Y-2976-A,0,0,10,10,10,10,10,20,3000,0,0,0,ferrari_30x16_203.prn,SY9Y-2976-A, +SY9Y-9S331-B,SY9Y-9S331-B,10,0,10,10,10,10,10,20,3000,15,0,0,ferrari_30x16_203.prn,SY9Y-9S331-B, +SY9Y-9S331-A,SY9Y-9S331-A,10,0,10,10,10,10,10,20,3000,0,0,0,ferrari_30x16_203.prn,SY9Y-9S331-A, +18JA708CP,,0,0,5,5,10,10,30,20,3000,20,0,0,ferrari_30x16_203.prn,18JA708CP, +18JA757CP,,0,0,5,5,10,10,30,20,3000,20,0,0,ferrari_30x16_203.prn,18JA757CP, +18JA750CP,,0,0,5,5,10,10,30,20,3000,20,0,0,ferrari_30x16_203.prn,18JA750CP, +18JA712CP,,0,0,5,5,10,10,30,20,3000,20,0,0,ferrari_30x16_203.prn,18JA712CP, +18JA710CP,,0,0,5,5,10,10,30,20,3000,20,0,0,ferrari_30x16_203.prn,18JA710CP, +18JA718CP,,0,5,5,5,10,10,30,20,3000,20,30,0,ferrari_30x16_203.prn,18JA718CP, +18JA713CP,,0,0,5,5,10,10,30,20,3000,20,0,0,ferrari_30x16_203.prn,18JA713CP, +18JA709CP,,0,0,5,5,10,10,30,20,3000,20,0,0,ferrari_30x16_203.prn,18JA709CP, +000904357,,0,0,10,10,10,10,20,20,4200,20,0,0,ferrari_30x16_203.prn,000904357, +05534288,,0,0,10,10,10,10,20,20,6900,20,0,0,ferrari_30x16_203.prn,05534288, +5802031904,,0,0,5,5,10,10,20,20,2100,20,0,0,ferrari_30x16_203.prn,5802031904, +000894372,,10,0,5,5,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,000894372, +000957630,,0,0,10,10,10,10,10,30,3400,10,0,0,ferrari_30x16_203.prn,000957630, +000957631,,0,0,10,10,10,10,10,30,3400,10,0,0,ferrari_30x16_203.prn,000957631, +000958439,,0,0,5,10,10,10,30,30,2200,10,0,0,ferrari_30x16_203.prn,000958439, +000986619,,0,0,5,15,10,10,10,30,1600,10,0,0,ferrari_30x16_203.prn,000986619, +S3130E132,,0,0,7,15,10,10,5,2,4100,1,0,0,ferrari_30x16_203.prn,S3130E132, +18KA144CT,,0,0,5,5,10,10,30,10,3100,10,0,0,ferrari_30x16_203.prn,18KA144CT, +5803148261,,2,5000,5,10,10,10,10,30,5000,15,1,0,ferrari_30x16_203.prn,5803148261, +98FB080CP,,5,200,10,10,10,10,20,10,200,15,30,1,ferrari_30x16_203.prn,98FB080CP, +590.2.418.1A,,0,5000,3,5,10,10,5,5,1000,15,0,0,ferrari_30x16_203.prn,590.2.418.1A, +055000044,,0,3000,5,5,10,10,30,20,2100,15,0,0,ferrari_30x16_203.prn,055000044, +000975576,TUBO INLET,5,2000,30,80,10,10,10,0,2000,1,0,0,ferrari_30x16_203.prn,000975576, +000975575,TUBO OUTLET,5,2000,10,80,10,10,10,0,2000,1,0,0,ferrari_30x16_203.prn,000975575, +5803223742,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223742, +5803223740,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223740, +5803223741,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223741, +5803223736,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223736, +5803223745,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223745, +000884945,,0,0,10,5,10,10,10,30,1500,0,0,0,ferrari_30x16_203.prn,000884945, +5803223739,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223739, +000960322,000960322,0,0,5,10,10,10,10,20,1600,20,0,0,ferrari_30x16_203.prn,000960322, +000960324,000960324,0,0,5,10,10,10,10,20,1600,20,0,0,ferrari_30x16_203.prn,000960324, +000960275,000960275,0,0,5,10,10,10,10,20,1600,20,0,0,ferrari_30x16_203.prn,000960275, +000960281,000960281,0,0,5,10,10,10,10,20,1600,20,0,0,ferrari_30x16_203.prn,000960281, +055055934,,0,0,10,10,10,10,20,20,6800,20,0,0,ferrari_30x16_203.prn,055055934, +5803228585,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803228585, +5803223755,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223755, +5803120375,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803120375, +5803083634,,0,5000,5,10,10,10,10,30,3000,15,0,0,ferrari_30x16_203.prn,5803083634, +742722-15,742722-15,0,0,5,10,10,10,20,30,6000,10,0,0,ferrari_30x16_203.prn,74222-15, +90383952,90383952,0,10,5,10,10,10,20,30,6100,0,0,0,ferrari_30x16_203.prn,90383952, +90383805,90383805,0,0,5,20,10,20,20,30,6100,0,0,0,ferrari_30x16_203.prn,90383805, +90459069,90459069,0,0,5,10,10,10,20,30,5100,0,0,0,ferrari_30x16_203.prn,90459069, +001031-R5,,0,0,10,30,10,10,30,10,5100,5,0,0,ferrari_30x16_203.prn,001031-R5, +5803036739,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803036739, +000990010,000990010,2,200,10,10,10,10,10,20,200,20,0,0,ferrari_30x16_203.prn,000990010, +SY9Y-18D553AAM1,,0,0,5,5,10,10,30,20,7000,20,0,0,ferrari_30x16_203.prn,SY9Y-18D553AAM1, +SY9Y-18D552AAM1,,10,7000,5,5,10,10,30,20,7100,20,0,0,ferrari_30x16_203.prn,SY9Y-18D552AAM1, +5803037202,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803037202, +5803108366,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5703108366, +5803108365,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803108365, +PT00051126,,2,800,5,10,10,10,10,30,800,15,0,0,ferrari_30x16_203.prn,PT00051126, +000985807,,0,0,5,10,10,10,10,30,1600,10,0,0,ferrari_30x16_203.prn,000985807, +055038005,,0,300,5,10,40,40,10,20,200,20,10,0,ferrari_30x16_203.prn,055038005, +5803034811,,0,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803034811, +5803037201,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803037201, +5803223749,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223749, +5803223748,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223748, +055000045,,0,0,5,5,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,055000045, +5803223747,,0,0,5,10,10,10,10,30,5000,30,0,0,ferrari_30x16_203.prn,5803223747, +5803223746,,0,0,5,10,10,10,10,30,5000,30,0,0,ferrari_30x16_203.prn,5803223746, +000951612,,0,0,5,5,10,10,30,20,2200,20,0,0,ferrari_30x16_203.prn,000951612, +000951613,,0,0,5,5,10,10,30,20,2200,20,0,0,ferrari_30x16_203.prn,000951613, +5803223750,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223750, +5803223751,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223751, +5803223752,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223752, +5803223753,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803223753, +014093,014093,5,6000,10,1,10,10,10,30,6000,15,0,0,ferrari_30x16_203.prn,014093, +7076213,7076213,0,0,10,1,10,10,10,30,6000,15,0,0,ferrari_30x16_203.prn,7026213, +M28090912174,M280909-12174,0,0,5,10,10,10,10,30,6000,15,0,0,ferrari_30x16_203.prn,M28090912174, +M28O90912174ECL,,0,0,1,1,10,10,1,0,0,0,0,0,ferrari_flag_qr_only.prn,, +5802815391,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5802815391, +5803101541,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803101541, +5803101542,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803101542, +5803406514,,2,5000,5,10,10,10,10,30,5000,15,1,0,ferrari_30x16_203.prn,5803406514, +5803108310,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803108310, +5803101537,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803101537, +5803101538,,2,5000,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803101538, +SY9Y-7F113AAM1,,10,7000,5,5,10,10,30,20,7100,20,0,0,ferrari_30x16_203.prn,SY9Y-7F113AAM1, +SY9Y-7F114AAM1,,10,7000,5,5,10,10,30,20,7100,20,0,0,ferrari_30x16_203.prn,SY9Y-7F114AAM1, +5803108305,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803108305, +5803108311,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803108311, +5802932524,,0,0,5,25,10,10,10,50,5000,50,0,0,ferrari_30x16_203.prn,5802932524, +200116-13-1610,,5,5000,10,10,10,10,10,30,7000,0,0,0,ferrari_30x16_203.prn,200116-13-1610, +5803108369,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803108369, + ENT.791.057.MT,,0,8000,5,5,10,10,10,30,8000,32,0,0,ferrari_30x16_203.prn,ENT.791.057.MT, + ENT.791.057.MR,,0,8000,5,5,10,10,10,30,8000,32,0,0,ferrari_30x16_203.prn,ENT.791.057.MR, +5803036736,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803036736, +5803036738,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803036738, +A46107017000,,0,0,10,10,10,10,15,10,5100,15,0,0,ferrari_30x16_203.prn,A46107017000, +000975406,,0,0,5,5,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,000975406, +000982127,,0,0,5,5,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,000982127, +98KA125CT,,0,0,5,5,10,10,30,50,3000,50,0,0,ferrari_30x16_203.prn,98KA125CT, +000976097,,0,0,5,5,10,10,10,30,3500,30,0,0,ferrari_30x16_203.prn,000976097, +000904357,,0,0,10,10,10,10,20,20,4100,20,0,0,ferrari_30x16_203.prn,000904357, +TEST F250,,0,0,10,10,10,10,30,10,6000,0,0,0,ferrari_flag_qr_only.prn,, +000779625,,0,0,5,5,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,000779625, +000951611,,0,0,5,5,10,10,30,20,2200,20,0,0,ferrari_30x16_203.prn,000951611, +000748845,,0,0,5,5,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,000748845, + 055034288,,0,6800,10,10,10,10,20,20,6800,20,0,0,ferrari_30x16_203.prn, 055034288, +5803223735,,0,0,5,10,10,10,10,30,5100,15,0,0,ferrari_30x16_203.prn,5803223735, +LIEBHERR R55240,,0,0,10,40,10,10,10,30,5000,30,0,0,ferrari_flag_qr_only.prn,, +000298261,,0,0,3,3,10,10,3,30,6000,30,0,0,ferrari_30x16_203.prn,000298261, +18LB033CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB033CT, +18LA995CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LA995CT, +18LA994CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LA994CT, +5803120373,,0,0,5,10,10,10,10,30,5100,15,0,0,ferrari_30x16_203.prn,5803120373, +18LB034CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB034CT, +18LB069CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB069CT, +18LB032CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB032CT, +5803025117,,0,0,5,10,10,10,10,30,5100,15,0,0,ferrari_30x16_203.prn,583025117, +5803025116,,5,2000,10,10,10,10,10,30,5100,15,0,0,ferrari_30x16_203.prn,5803025116, +000990688,,0,0,5,5,10,10,30,20,2000,20,0,0,ferrari_30x16_203.prn,000990688, +000990696,,0,0,5,5,10,10,30,20,2000,20,0,0,ferrari_30x16_203.prn,000990696, +000990684,,0,0,5,5,10,10,30,20,2000,20,0,0,ferrari_30x16_203.prn,000990684, +000990685,,0,0,5,5,10,10,30,20,2000,20,0,0,ferrari_30x16_203.prn,000990685, +000990679,,0,0,5,5,10,10,30,20,2000,20,0,0,ferrari_30x16_203.prn,000990679, +0000825276,,0,0,5,10,10,10,10,30,1500,30,0,0,ferrari_30x16_203.prn,0000825276, +000990691,,0,0,5,10,10,10,10,20,3000,20,0,0,ferrari_30x16_203.prn,000990691, +000990704,,0,0,5,10,10,10,10,20,1500,20,0,0,ferrari_30x16_203.prn,000990704, +000990700,,0,0,5,10,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,000990700, +000990681,,0,0,5,10,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,000990681, +000990703,,0,0,5,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000990703, +000990692,,0,0,5,10,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,000990692, +000990690,,0,0,5,10,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,000990690, +000990708,,0,0,10,10,10,10,30,20,5000,20,0,0,ferrari_30x16_203.prn,000990708, +055045415,,0,0,5,5,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,055045415, +000990686,,0,0,5,5,10,10,30,20,2000,20,0,0,ferrari_30x16_203.prn,000990686, +18LB058CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB058CT, +000990680,,0,0,5,10,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,000990680, +000990687,,0,0,10,10,10,10,30,20,5000,20,0,0,ferrari_30x16_203.prn,000990687, +000907313,000907313,0,0,10,10,10,10,10,20,2100,20,0,0,ferrari_30x16_203.prn,000907313, +000987924,,5,0,10,10,10,10,10,20,2100,20,0,0,ferrari_30x16_203.prn,000987924, +18LB051CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB051CT, +18LB044CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB044CT, +000987923,,0,0,10,10,10,10,10,20,2100,20,0,0,ferrari_30x16_203.prn,000987923, +000987571,,0,0,10,10,10,10,10,20,2100,20,0,0,ferrari_30x16_203.prn,000987571, +000987572,,0,0,10,10,10,10,10,20,2100,20,0,0,ferrari_30x16_203.prn,000987572, +18LB027CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB027CT, +18LA990CT,,0,0,30,30,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LA990CT, +18LB561CT,,0,0,30,30,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB561CT, +000990702,,0,0,5,5,10,10,10,20,1600,20,0,0,ferrari_30x16_203.prn,000990702, +000991064,,0,0,5,5,10,10,10,20,1600,20,0,0,ferrari_30x16_203.prn,000991064, +000991211,,0,0,5,5,10,10,10,20,1600,20,0,0,ferrari_30x16_203.prn,000991211, +000990689,,0,0,5,5,10,10,30,20,1600,20,0,0,ferrari_30x16_203.prn,000990689, +000991211,,0,0,10,10,10,10,30,20,2100,20,0,0,ferrari_30x16_203.prn,000991211, +000991064,,0,0,10,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000991064, +000990689,,0,0,10,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000990689, +055000046,,0,0,5,10,10,10,30,20,2150,20,0,0,ferrari_30x16_203.prn,055000046, +000990701,,0,0,10,10,10,10,30,20,2000,20,0,0,ferrari_30x16_203.prn,000990701, +000990706,,0,0,10,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000990706, +000990697,,0,0,10,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000990697, +BUCHER 7076213,7076213,0,0,10,30,10,10,10,30,5000,30,0,0,ferrari_30x16_203.prn,7076213, +000990694,,0,0,5,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000990694, +000990699,,0,0,10,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000990699, +SP031.053-R2,,0,0,5,10,10,10,10,30,3100,10,0,0,ferrari_30x16_203.prn,SP031.053-R2, +SP031.051-R2,SP031.051-R2,0,0,5,10,10,10,10,30,3100,10,0,0,ferrari_30x16_203.prn,SP031.051-R2, +SP031.050-R3,,0,0,5,10,10,10,10,30,3100,10,0,0,ferrari_30x16_203.prn,SP031.050-R3, +SP031.052-R2,,0,0,5,10,10,10,10,30,3100,10,0,0,ferrari_30x16_203.prn,SP031.052-R2, +16JA603CP,,10,500,10,30,10,10,10,20,500,10,0,0,ferrari_30x16_203.prn,16JA603CP, +16JA605CP,,10,500,10,30,10,10,10,20,500,10,0,0,ferrari_30x16_203.prn,16JA605CP, +18LB348CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB348CT, +18LB347CT,,0,0,10,10,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB347CT, +18LB349CT,,0,0,20,20,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB349CT, +18LB348CT,,0,0,30,30,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB348CT, +18LB349CT,,0,0,30,30,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB349CT, +18LB347CT,,0,0,30,30,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB347CT, +000990693,,0,0,5,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000990693, +18LB346CT,,0,0,30,30,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB346CT, +18LB350CT,,0,0,30,30,10,10,30,20,3500,20,0,0,ferrari_30x16_203.prn,18LB350CT, +000990698,,0,0,10,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000990698, +000990695,,0,0,10,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000990695, +000990707,,0,0,5,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000990707, + 055017119,,0,0,5,10,10,10,10,4,2600,10,0,0,ferrari_30x16_203.prn, 055017119, +3915370,,0,0,10,10,10,10,20,4,3500,15,0,0,ferrari_30x16_203.prn, 3915370, +055017118,,0,0,5,10,10,10,10,4,2600,10,0,0,ferrari_30x16_203.prn, 055017118, +055017120,,0,0,5,10,10,10,60,3,2500,10,0,0,ferrari_30x16_203.prn, 055017120, +055017125,,0,0,5,10,10,10,60,3,2600,10,0,0,ferrari_30x16_203.prn, 055017125, +000990705,,0,0,10,10,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000990705, +055024035,,0,0,5,10,10,10,20,5,2600,10,0,0,ferrari_30x16_203.prn, 055024035, +R56414,,0,0,5,10,10,10,10,10,3000,10,0,0,ferrari_30x16_203.prn,R56414, +R56418,,0,0,5,10,10,10,10,10,3000,10,0,0,ferrari_30x16_203.prn,R56418, +R56413,,0,0,5,10,10,10,10,10,3000,10,0,0,ferrari_30x16_203.prn,R56413, +R56405,,0,0,5,10,10,10,10,10,3000,10,0,0,ferrari_30x16_203.prn,R56405, +R56411,,0,0,5,10,10,10,10,10,3000,10,0,0,ferrari_30x16_203.prn,R56411, +R56410,,0,0,5,10,10,10,10,10,3000,10,0,0,ferrari_30x16_203.prn,R56410, +07N.131.597.A,,5,4000,10,10,10,10,10,30,3000,10,0,0,ferrari_30x16_203.prn,07N.131.597.A, +000784883,,0,0,5,5,10,10,10,30,1600,10,0,0,ferrari_30x16_203.prn, 000784883, +000985807,,0,0,5,5,10,10,10,30,1600,10,0,0,ferrari_30x16_203.prn, 000985807, +SP031.077R1,,0,0,7,15,10,10,5,30,4100,30,0,0,ferrari_30x16_203.prn,SP031.077-R1, +800.P.850.1A,,0,0,5,10,10,10,10,30,4000,30,0,0,ferrari_30x16_203.prn,800.P.850.1A, +800.P.851.1A,,0,0,5,10,10,10,10,30,4000,30,0,0,ferrari_30x16_203.prn,800.P.851.1A, +055018630,,0,200,5,5,10,10,10,50,2000,50,10,0,ferrari_30x16_203.prn,055018630, +5803229239,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803229239, +000952005,,0,0,5,10,10,10,10,30,2100,15,0,0,ferrari_30x16_203.prn,000952005, +92172962,,0,0,10,20,10,10,10,30,2000,30,0,0,ferrari_30x16_203.prn,92172962, +5803229240,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803229240, +PROVA VA0017,,0,0,2,3,10,10,5,0,4000,5,0,0,ferrari_30x16_203.prn,VA0017, +V04.030.057.AD,,0,0,5,10,10,10,10,20,200,20,0,0,ferrari_30x16_203.prn,V04.030.057.AD, +5803184400,,0,0,5,10,10,10,10,20,5000,20,0,0,ferrari_30x16_203.prn,5803184400, +5803329396,,0,0,5,10,10,10,10,30,5000,30,0,0,ferrari_30x16_203.prn,5803329396, +5803329398,,0,0,5,10,10,10,10,30,5000,30,0,0,ferrari_30x16_203.prn,5803329398, +5803329442,,0,0,5,10,10,10,10,30,5000,30,0,0,ferrari_30x16_203.prn,5803329442, +5803329443,,0,0,5,10,10,10,10,30,5000,30,0,0,ferrari_30x16_203.prn,5803329443, +5803313275,,0,0,5,10,10,10,10,30,5000,30,0,0,ferrari_30x16_203.prn,5803313275, +5803330518,,0,0,5,10,10,10,10,30,5000,30,0,0,ferrari_30x16_203.prn,5803330518, +5803313274,,0,0,5,10,10,10,10,30,5000,30,0,0,ferrari_30x16_203.prn,5803313274, +000742336,,0,0,5,5,10,10,10,20,2100,20,0,0,ferrari_30x16_203.prn,000742336, +000742332,,0,0,5,5,10,10,10,20,2100,20,0,0,ferrari_30x16_203.prn,000742332, +5803293153,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293153, +5803293154,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293154, +5803293158,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293158, +5803293162,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293162, +5803293142,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293142, +5803293141,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293141, +5803293149,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293149, +5803293157,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293157, +5803229244,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803229244, +5803229245,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803229245, +5803293143,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293143, +5803293144,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293144, +5803293147,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293147, +5803293148,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293148, +5803293149,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293149, +PROVA RIMAC,,0,0,5,10,10,10,20,20,3000,20,0,0,ferrari_30x16_203.prn,PROVA RIMAC, +5803293151,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293151, +5803293150,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293150, +5803293155,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293155, +5803293159,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293159, +055019161,,0,0,5,10,10,10,10,20,1500,20,0,0,ferrari_30x16_203.prn,055019161, +5803293156,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293156, +5803293161,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293161, +5803293160,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293160, +5803328789,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803328789, +5803328788,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803328788, +5803439351,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803439351, +5803442534,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803442534, +5803439352,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803439352, +5803442535,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803442535, +5803328907,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803328907, +5803328906,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803328906, +5803293145,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293145, +5803293155,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293155, +5803293152,,0,0,5,10,10,10,10,30,5000,15,0,0,ferrari_30x16_203.prn,5803293152, +PT00044318,,0,0,5,10,10,10,10,30,1000,15,0,0,ferrari_30x16_203.prn,PT00044318, +PT00045408,,0,0,5,10,10,10,10,30,1000,15,0,0,ferrari_30x16_203.prn,PT00045408, +5803311633,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803311633, +5803312417,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803312417, +5803312373,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803312373, +5803312291,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803312291, +5803311634,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803311634, +5803311630,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803311630, +5803311632,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803311632, +5803311636,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803311636, +5803312839,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803312839, +5803312781,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803312781, +5803316610,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803316610, +5803316729,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803316729, +5803316718,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803316718, +5803317742,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803317742, +5803321O38,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803321038, +5803311635,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803311635, +5803311631,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803311631, +PT00049591,,0,0,5,10,10,10,10,30,1000,15,0,0,ferrari_30x16_203.prn,PT00049591, +PT00049590,,0,0,5,10,10,10,10,30,1000,15,0,0,ferrari_30x16_203.prn,PT00049590, +1636050157,,0,0,5,10,10,10,10,30,6000,0,0,0,ferrari_30x16_203.prn,1636050157, +580051500,,0,0,5,5,10,10,10,30,6100,30,0,0,ferrari_30x16_203.prn,580051500, +5803350485,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803350485, +5803315085,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803315085, +5803350411,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803350411, +5803350392,,0,0,5,5,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803350392, +580051376,,0,0,5,10,10,10,10,30,6100,30,0,0,ferrari_30x16_203.prn,580051376, +055020340,,0,0,5,10,10,10,10,20,2000,20,0,0,ferrari_30x16_203.prn,055020340, +G04-030-057-BF,VO4-030-057-BF,0,0,5,5,10,10,10,30,2100,30,0,0,ferrari_30x16_203.prn,V04-030-057-BF, +5803350506,,0,0,5,10,10,10,10,30,6100,15,0,0,ferrari_30x16_203.prn,5803350506, +5803350485,,0,0,5,10,10,10,10,30,6100,15,0,0,ferrari_30x16_203.prn,5803350485, +1636050164,,0,0,5,10,10,10,10,30,6000,15,0,0,ferrari_30x16_203.prn,1636050164, +1636050159,,0,0,5,10,10,10,10,30,6000,15,0,0,ferrari_30x16_203.prn,1636050159, +1636050042,,0,0,5,10,10,10,10,30,6000,15,0,0,ferrari_30x16_203.prn,1636050042, +403/S2662,,0,0,10,10,10,10,10,10,2000,10,0,0,ferrari_30x16_203.prn,403/S2662, +1636050042,,0,0,5,1,10,10,10,30,6000,15,0,0,ferrari_30x16_203.prn,1636050042, +1636050162,,0,0,5,10,10,10,10,30,6000,15,0,0,ferrari_30x16_203.prn,1636050162, +1636050158,,0,0,5,10,10,10,10,30,6000,15,0,0,ferrari_30x16_203.prn,1636050158, +98FA186CP,98FA186CP,0,2000,5,5,10,10,20,15,3000,15,0,0,ferrari_30x16_203.prn,98FA186CP, +5803358645,,0,5000,5,10,10,10,10,30,5100,30,0,0,ferrari_30x16_203.prn,5803358646, +5803158291,CPL GASOLIO LP,5,2000,5,10,10,10,20,30,2000,0,0,0,ferrari_30x16_203.prn,5803158291,C9 CCM FPT +000784883,,0,0,5,5,10,10,30,20,1500,20,0,0,ferrari_30x16_203.prn,000784883, + FUGA CAL 7 BAR,24001,0,0,5,5,10,10,10,9,7000,6,20,1,ferrari_30x16_203.prn,FUGA 24001 8MBA, +5802814210 R.3,j5802814210 R.3,5,3000,5,10,20,20,20,30,3000,30,10,100,ferrari_flag_qr_only.prn,5802814210 R.3, +403/S2664,j5802814210 R.3,5,3000,5,10,5,5,10,10,2000,10,10,100,ferrari_30x16_203.prn,"", +403/S2666,jcb,0,3000,5,10,5,5,10,10,2000,10,10,100,ferrari_30x16_203.prn,"", diff --git a/config/csv_import/EXTRACTIONS/T3P20RR SN 20060720 09 10 2024.csv b/config/csv_import/EXTRACTIONS/T3P20RR SN 20060720 09 10 2024.csv new file mode 100644 index 0000000..7fdc224 --- /dev/null +++ b/config/csv_import/EXTRACTIONS/T3P20RR SN 20060720 09 10 2024.csv @@ -0,0 +1,102 @@ +codice_ricetta,part_number,tempo_pre_riempimento,pressione_pre_riempimento,tempo_riempimento,tempo_assestamento,percentuale_minima_pressione_assestamento,percentuale_massima_pressione_assestamento,tempo_di_test,pressione_di_test_delta_minimo,pressione_di_test,pressione_di_test_delta_massimo,tempo_svuotamento,pressione_svuotamento,template_di_stampa,campo1,campo2 +TEST FUGA 7 BAR,B1619X,0.0,1400,5.0,10.0,10,10,5.0,16.8,7000,11.200000000000001,0.1,0,,DA 11.2 A 16.8 M, +16LA773CP REV01,,0.0,0,10.0,15.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-TRANS HX-RT,P16 +5803112815 REV01,COMPL.MAN,0.0,0,5.0,5.0,15,15,10.0,30.0,5000,1.0,0.0,0,,5803112815 REV01, +5803112816 REV01,COMPL.MAN,0.0,0,5.0,5.0,15,15,10.0,30.0,5000,1.0,0.1,0,,5803112816 REV01, +PY83-6B747-BA,ENGINE OIL ASSY,0.0,0,10.0,10.0,10,10,30.0,20.0,7000,10.0,0.0,0,,PY83-6B747-BA,ASTON MARTIN +PY83-6B748-BA,ENGINE OIL ASSY,0.0,0,10.0,10.0,10,10,30.0,20.0,7000,5.0,0.0,0,,PY83-6B748-BA,ASTON MARTIN +5802729983 REV0,,0.0,0,5.0,5.0,10,10,10.0,20.0,8000,0.0,0.0,0,,, +MY83-6L701-AB,TRASMISSION OIL,0.0,0,5.0,5.0,10,10,20.0,20.0,7000,5.0,0.0,0,,MY83-6L701-AB,ASTON MARTIN +16FC246CP REV1,,0.0,0,10.0,5.0,10,10,20.0,20.0,1000,5.0,0.0,0,,ASSY-OIL FILL,P16 +MY83-6L694-AB,TRASMISSION OIL,0.0,0,5.0,5.0,10,10,20.0,20.0,7000,5.0,0.0,0,,MY83-6L694-AB,ASTON MARTIN +16FC250CP REV02,ASSY CCV,0.0,0,5.0,5.0,20,20,20.0,50.0,200,2.0,0.0,0,,ASSY CCV - PCV,T16C-Z0800-001 +5801970064 REV2,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801970064 REV2,LANCIA BOLZANO +5801970067 REV1,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801970067 REV1,LANCIA BOLZANO +5801384839 REV1,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801384839 REV1,LANCIA BOLZANO +5801384838 REV1,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801384838 REV1,LANCIA BOLZANO +12970-13-2382,TUBEASSY-CLUTCH,0.0,0,10.0,5.0,10,10,20.0,20.0,7000,5.0,0.0,0,,12970-13-2382,MULTIMATIC +12970-13-2384,TUBEASSY-CLUTCH,0.0,0,10.0,5.0,10,10,20.0,20.0,7000,5.0,0.0,0,,12970-13-2384,MULTIMATIC +12970-13-2386,TUBEASSY-CLUTCH,0.0,0,10.0,5.0,10,10,20.0,20.0,7000,5.0,0.0,0,,12970-13-2386,MULTIMATIC +12970-13-2388,TUBEASSY-CLUTCH,0.0,0,10.0,5.0,10,10,20.0,20.0,7000,5.0,0.0,0,,12970-13-2388,MULTIMATIC +16FC256CP REV01,,0.0,0,5.0,5.0,10,10,20.0,20.0,1000,5.0,0.0,0,,ASSY-MAKE UP AIR,P16 +5801384841 REV01,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801384841 REV01,LANCIA BOLZANO +5801384842 REV01,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801384842 REV01,LANCIA BOLZANO +5801970063 REV2,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801970063 REV2,LANCIA BOLZANO + 16FB157CP REV03,,0.0,0,5.0,5.0,10,10,20.0,50.0,1000,2.0,0.0,0,,ASSY CCV-OIL TAN,P16 + 16L0002CP REV03,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-RH-HT-RADIA,P16 + 16L0007CP REV03,,0.0,0,5.0,5.0,10,10,30.0,20.0,3000,4.0,0.0,0,,HOSE-IPU-JNCTN-T,P16 +16L0043CP REV02,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,PIPE-OUTLET-PRE-,P16 +16L0045CP REV02,,0.0,0,5.0,5.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-HT-RADIATOR,P16 +16L0046CP REV03,,0.0,0,15.0,10.0,10,10,20.0,20.0,3500,5.0,0.0,0,,HOSE-LH-HT-RADIA,P16 +16L0058CP REV02,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,5.0,0.0,0,,HOSE-LT-TUNNEL-T,P16 +16L0059CP REV03,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-COOLANT-FIL,P16 +16L0075CP REVO3,,0.0,0,20.0,15.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-HEADER-TANK,P16 +16L0145CP REV03,,0.0,0,5.0,15.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-HOSE-PUMP-T,P16 +16L0151CP REV03,,0.0,0,5.0,15.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-IPU-OUTLET-,P16 +16L0154CP REV03,,0.0,0,10.0,20.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-RH-LTR-OUTL,P16 +16L0161CP REV04,,0.0,0,5.0,15.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-WCACS-TO-ME,P16 +16L0164CP REV02,,0.0,0,10.0,15.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-LH-LTR-OUT,P16 +16L0167CP REV02,,0.0,0,10.0,20.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-TO-MCU,P16 +16L0170CP REV03,,0.0,0,10.0,10.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-IPU-OUTLET-,P16 +16L0174CP REV02,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-WCACS LINK,P16 +16L0177CP REV03,,0.0,0,5.0,10.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-JNCTN TO WC,P16 +16L0180CP REV04,,0.0,0,15.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-LH-LTR-OUTL,P16 +16LA259CP REV03,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-LT-MECH-PUM,P16 +16LA336CP REV02,,0.0,0,5.0,10.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-E-MOTOR-OUT,P16 +16LA353CP REV02,,0.0,0,20.0,15.0,5,20,10.0,20.0,3500,5.0,0.0,0,,HOSE-RH-HT-RADIA,P16 +16LA372CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,3000,0.0,0.0,0,,PIPE-IN-PRE-COOL,P16 +16LA397CP REV02,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-HT-RADIATOR,P16 +16LA449CP REV02,,0.0,0,15.0,15.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-ENGINE-TO-P,P16 +16LA451CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE PRE COOLER ,P16 +16LA648CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-RH-LTR-OUT-,P16 +16LA452CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE PRE COOLERS,P16 +16LA461CP REV02,,0.0,0,5.0,10.0,10,10,20.0,20.0,3000,0.0,0.0,0,,ASSY-HOSE-HT-RTN,P16 +16LA680CP REV01,,0.0,0,10.0,15.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-TRANS HX-RT,P16 +16LA490CP REV02,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-RH-LTR-OUT-,P16 +16LA515CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-TRANS HX-RT,P16 +16LA518CP REV02,,0.0,0,5.0,10.0,10,10,20.0,20.0,3000,0.0,0.0,0,,HOSE-TO-E-MOTOR,P16 +16LA573CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-MCU-TO-MOTO,P16 +16LA579CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-WCACS LINK ,P16 +16LA668CP REV01,,0.0,0,10.0,20.0,10,10,30.0,20.0,3500,5.0,0.0,0,,HOSE-LH WCAC AND,P16 +16LA615CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-RH WCAC HOS,P16 +16LA584CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-TRANS HX-RT,P16 +16LA695CP REV02,,0.0,0,5.0,10.0,10,10,30.0,20.0,3000,1.0,0.0,0,,HOSE PRE COOLERS,P16 +16LA586CP REV01,,0.0,0,5.0,10.0,10,10,20.0,20.0,3000,0.0,0.0,0,,HOSE PRE COOLERS,P16 +16LA642CP REV01,,0.0,0,5.0,5.0,10,10,20.0,20.0,3500,0.0,0.0,0,,HOSE-WCACS LINK ,P16 +16LA643CP REV01,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-WCACS LINK ,P16 + 16FC069CP REV01,,0.0,0,10.0,15.0,10,10,20.0,50.0,1000,5.0,0.0,0,,ASSY CCV-INTAKE,P16 + 16FC084CP REV02,,0.0,0,5.0,5.0,10,10,20.0,50.0,3000,0.0,0.0,0,,BALANCE PIPE-INL,P16 + 16FB394CP REV04,,0.0,0,5.0,5.0,10,10,20.0,50.0,3000,5.0,0.0,0,,ASSY INLET PURGE,P16 +5801970066 REV01,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801970066 REV01,LANCIA BOLZANO +5801970021 REV01,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801970021 REV01,LANCIA BOLZANO +5801862227 REV00,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801862227 REV00,LANCIA BOLZANO + 16LA661CP REV01,,0.0,0,5.0,10.0,10,10,20.0,20.0,3500,0.0,0.0,0,,HOSE-RH-HT-RADIA,P16 +16FC056CX REV01,,0.0,0,5.0,5.0,10,10,20.0,20.0,1000,5.0,0.0,0,,ASSY-MAKE UP AIR,P16 +16FC201CX REV01, ASSY CCV-PCV,0.0,0,5.0,5.0,20,20,20.0,50.0,300,2.0,0.0,0," +",ASSY CCV - PCV,T16C-Z0800-001 +16LA718CP REV02,,0.0,0,5.0,10.0,10,10,30.0,20.0,3000,0.0,0.0,0,,HOSE-E-MOTOR-OUT,P16 +16FA849CP REV02,,0.0,0,10.0,5.0,10,10,20.0,20.0,1000,5.0,0.0,0,,ASSY-OIL FILL,P16 +5803112815,COMPL.MAN,0.0,0,5.0,10.0,15,15,10.0,30.0,5000,1.0,0.1,0,,5803112815, +5801970065 REV01,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801970065 REV01,LANCIA BOLZANO +MY83-6B748-BA,TRASMISSION OIL,0.0,0,10.0,10.0,10,10,20.0,20.0,7000,5.0,0.0,0,,MY83-6B748-BA,ASTON MARTIN +16FC256CP REV01,,0.0,0,5.0,5.0,10,10,20.0,20.0,1000,5.0,0.0,0,,ASSY-MAKE UP AIR,P16 +5803112816,COMPL.MAN,0.0,0,5.0,10.0,15,15,10.0,30.0,5000,1.0,0.1,0,,5803112816, +16LA459CP REV02,,0.0,0,5.0,10.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-TRANS HX-RT,P16 +MY83-6B747-BA,TRASMISSION OIL,0.0,0,10.0,10.0,10,10,20.0,20.0,7000,5.0,0.0,0,,MY83-6B747-BA,ASTON MARTIN +16FA849CP REV02,,0.0,0,10.0,5.0,10,10,20.0,20.0,1000,5.0,0.0,0,,ASSY-OIL FILL, +16FA849CX REV01,,0.0,0,10.0,5.0,10,10,20.0,20.0,1000,5.0,0.0,0,,ASSY-OIL FILL, +16LA027SP REV02,,0.0,0,20.0,30.0,10,10,30.0,20.0,3500,5.0,0.0,0,,HOSE-LH WCAC AND,P16 +5801970065 REV01,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801970065 REV01,LANCIA BOLZANO +16FA026SP REV1,OIL FIL LINE-FED,0.0,0,5.0,5.0,20,20,20.0,50.0,200,2.0,0.0,0,,FED,T16C-Z0800-001 +5801384840 REV01,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5801384840 REV01,LANCIA BOLZANO +16FC446CP REV01,ASSY CCV,0.0,0,5.0,5.0,20,20,20.0,50.0,200,2.0,0.0,0,,FED,T16C-Z0800-001 +16FA026SP,,0.0,0,5.0,10.0,10,10,30.0,20.0,3000,0.0,0.0,0,,FED,P16 +5802170779 REV0,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5802170779 REV0,LANCIA BOLZANO +16FC469CP REV.01,ASSY CCV,0.0,0,5.0,5.0,20,20,20.0,50.0,200,2.0,0.0,0,,FED,T16C-Z0800-001 +5802170804 REV0,FUEL HOSE,0.0,0,10.0,5.0,10,10,20.0,20.0,8000,5.0,0.0,0,,5802170804 REV0,LANCIA BOLZANO +16LA459CP REV1,,0.0,0,10.0,15.0,10,10,30.0,20.0,3500,0.0,0.0,0,,HOSE-TRANS HX-RT,P16 +16FC541CT REV01,ASSY CCV,0.0,0,5.0,5.0,20,20,20.0,50.0,200,2.0,0.0,0,,FED,T16C-Z0800-001 +16LA735CP REV01,,0.0,0,5.0,5.0,10,10,20.0,20.0,3500,0.0,0.0,0,,HOSE-WCACS LINK ,P16 +16FA026SP REV01,ASSY CCV,0.0,0,5.0,5.0,20,20,20.0,50.0,200,2.0,0.0,0,,FED,T16C-Z0800-001 +5802980014 REV0,,0.0,0,15.0,10.0,10,10,25.0,20.0,7000,0.0,0.0,0,,UNITE GASOIL PI,IVECO +16LA765CP REV1,,0.0,0,5.0,5.0,10,10,20.0,20.0,3500,0.0,0.0,0,,HOSE-WCACS LINK ,P16 diff --git a/config/csv_import/ST-TEN-6.csv b/config/csv_import/manual_csv_import/ST-TEN-6.csv similarity index 100% rename from config/csv_import/ST-TEN-6.csv rename to config/csv_import/manual_csv_import/ST-TEN-6.csv diff --git a/config/csv_import/Tabella Tubi riscaldati - COMPLETA rev09_27-10-2022.csv b/config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev09_27-10-2022.csv similarity index 100% rename from config/csv_import/Tabella Tubi riscaldati - COMPLETA rev09_27-10-2022.csv rename to config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev09_27-10-2022.csv diff --git a/config/csv_import/Tabella Tubi riscaldati - COMPLETA rev19_29-12-2022.csv b/config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev19_29-12-2022.csv similarity index 100% rename from config/csv_import/Tabella Tubi riscaldati - COMPLETA rev19_29-12-2022.csv rename to config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev19_29-12-2022.csv diff --git a/config/csv_import/Tabella Tubi riscaldati - COMPLETA rev19_29-12-2022.xlsx b/config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev19_29-12-2022.xlsx similarity index 100% rename from config/csv_import/Tabella Tubi riscaldati - COMPLETA rev19_29-12-2022.xlsx rename to config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev19_29-12-2022.xlsx diff --git a/config/csv_import/Tabella Tubi riscaldati - COMPLETA rev46_13-03-2024.xlsx - Tubi riscaldati costampati.csv b/config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev46_13-03-2024.xlsx - Tubi riscaldati costampati.csv similarity index 100% rename from config/csv_import/Tabella Tubi riscaldati - COMPLETA rev46_13-03-2024.xlsx - Tubi riscaldati costampati.csv rename to config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev46_13-03-2024.xlsx - Tubi riscaldati costampati.csv diff --git a/config/csv_import/Tabella Tubi riscaldati - COMPLETA rev49_19-04-2024.xlsx - Tubi riscaldati costampati.csv b/config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev49_19-04-2024.xlsx - Tubi riscaldati costampati.csv similarity index 100% rename from config/csv_import/Tabella Tubi riscaldati - COMPLETA rev49_19-04-2024.xlsx - Tubi riscaldati costampati.csv rename to config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev49_19-04-2024.xlsx - Tubi riscaldati costampati.csv diff --git a/config/csv_import/Tabella Tubi riscaldati - COMPLETA rev50_07-05-2024.xlsx - Tubi riscaldati costampati.csv b/config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev50_07-05-2024.xlsx - Tubi riscaldati costampati.csv similarity index 100% rename from config/csv_import/Tabella Tubi riscaldati - COMPLETA rev50_07-05-2024.xlsx - Tubi riscaldati costampati.csv rename to config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev50_07-05-2024.xlsx - Tubi riscaldati costampati.csv diff --git a/config/csv_import/Tabella Tubi riscaldati - COMPLETA rev50_13-05-2024.xlsx - Tubi riscaldati costampati.csv b/config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev50_13-05-2024.xlsx - Tubi riscaldati costampati.csv similarity index 100% rename from config/csv_import/Tabella Tubi riscaldati - COMPLETA rev50_13-05-2024.xlsx - Tubi riscaldati costampati.csv rename to config/csv_import/manual_csv_import/Tabella Tubi riscaldati - COMPLETA rev50_13-05-2024.xlsx - Tubi riscaldati costampati.csv diff --git a/config/csv_import/Tabella Tubi riscaldati - campi extra.csv b/config/csv_import/manual_csv_import/Tabella Tubi riscaldati - campi extra.csv similarity index 100% rename from config/csv_import/Tabella Tubi riscaldati - campi extra.csv rename to config/csv_import/manual_csv_import/Tabella Tubi riscaldati - campi extra.csv diff --git a/config/csv_import/Tabella_e_daily.csv b/config/csv_import/manual_csv_import/Tabella_e_daily.csv similarity index 100% rename from config/csv_import/Tabella_e_daily.csv rename to config/csv_import/manual_csv_import/Tabella_e_daily.csv diff --git a/config/csv_import/importazione da banco montaggio.ods b/config/csv_import/manual_csv_import/importazione da banco montaggio.ods similarity index 100% rename from config/csv_import/importazione da banco montaggio.ods rename to config/csv_import/manual_csv_import/importazione da banco montaggio.ods diff --git a/config/csv_import/importazione da banco preformatura.csv b/config/csv_import/manual_csv_import/importazione da banco preformatura.csv similarity index 100% rename from config/csv_import/importazione da banco preformatura.csv rename to config/csv_import/manual_csv_import/importazione da banco preformatura.csv diff --git a/config/csv_import/ricette MULTIMATIC.csv b/config/csv_import/manual_csv_import/ricette MULTIMATIC.csv similarity index 100% rename from config/csv_import/ricette MULTIMATIC.csv rename to config/csv_import/manual_csv_import/ricette MULTIMATIC.csv diff --git a/config/csv_import/manual_csv_import/ricette prototipi.csv b/config/csv_import/manual_csv_import/ricette prototipi.csv new file mode 100644 index 0000000..0dcc407 --- /dev/null +++ b/config/csv_import/manual_csv_import/ricette prototipi.csv @@ -0,0 +1,305 @@ +codice_ricetta,codice_prodotto,tempo_pre_riempimento,pressione_di_test,tempo_di_test,tempo_assestamento,percentuale_minima_pressione_assestamento,percentuale_massima_pressione_assestamento,tempo_di_test,pressione_di_test_delta_minimo,pressione_pre_rimepimento,pressione_di_test_delta_massimo,tempo_svuotamento,pressione_svuotamento,template_di_stampa,descrizione,campo2 +07N.131.628.A,,10,200,20,20,10,10,10,5,0,5,2,0,,07N.131.628.A, +V04.030.057.BE,P18 BATTERY COOLING,0,0,20,20,10,10,20,5,0,5,0,0,,V04.030.057.BE, +000990502,,0,0,10,10,10,10,10,30,0,20,0,0,,000990502, +98FA644CP,,0,0,5,10,10,10,20,15,0,15,0,0,,98FA644CP, +5803158246,CPLGASOLIO LP,5,2000,5,10,10,10,20,30,0,0,0,0,,5803158246,C9 CCM FPT +BLOW BY WOKO,000781499,10,1000,10,10,99,99,10,600,0,20,0,0,,000781499, +SY9Y-2976-B,SY9Y-2976-A,0,5000,10,10,10,10,10,20,0,15,1,0,,SY9Y-2976-B, +SY9Y-2976-A,SY9Y-2976-A,0,0,10,10,10,10,10,20,0,0,0,0,,SY9Y-2976-A, +SY9Y-9S331-B,SY9Y-9S331-B,10,0,10,10,10,10,10,20,0,15,0,0,,SY9Y-9S331-B, +SY9Y-9S331-A,SY9Y-9S331-A,10,0,10,10,10,10,10,20,0,0,0,0,,SY9Y-9S331-A, +18JA708CP,,0,0,5,5,10,10,30,20,0,20,0,0,,18JA708CP, +18JA757CP,,0,0,5,5,10,10,30,20,0,20,0,0,,18JA757CP, +18JA750CP,,0,0,5,5,10,10,30,20,0,20,0,0,,18JA750CP, +18JA712CP,,0,0,5,5,10,10,30,20,0,20,0,0,,18JA712CP, +18JA710CP,,0,0,5,5,10,10,30,20,0,20,0,0,,18JA710CP, +18JA718CP,,0,5,5,5,10,10,30,20,0,20,3,0,,18JA718CP, +18JA713CP,,0,0,5,5,10,10,30,20,0,20,0,0,,18JA713CP, +18JA709CP,,0,0,5,5,10,10,30,20,0,20,0,0,,18JA709CP, +000904357,,0,0,10,10,10,10,20,20,0,20,0,0,,000904357, +05534288,,0,0,10,10,10,10,20,20,0,20,0,0,,05534288, +5802031904,,0,0,5,5,10,10,20,20,0,20,0,0,,5802031904, +000894372,,10,0,5,5,10,10,30,20,0,20,0,0,,000894372, +000957630,,0,0,10,10,10,10,10,30,0,10,0,0,,000957630, +000957631,,0,0,10,10,10,10,10,30,0,10,0,0,,000957631, +000958439,,0,0,5,10,10,10,30,30,0,10,0,0,,000958439, +000986619,,0,0,5,15,10,10,10,30,0,10,0,0,,000986619, +S3130E132,,0,0,7,15,10,10,5,2,0,1,0,0,,S3130E132, +18KA144CT,,0,0,5,5,10,10,30,10,0,10,0,0,,18KA144CT, +5803148261,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803148261, +98FB080CP,,5,200,10,10,10,10,20,10,0,15,3,1,,98FB080CP, +590.2.418.1A,,0,5000,3,5,10,10,5,5,0,15,0,0,,590.2.418.1A, +055000044,,0,3000,5,5,10,10,30,20,0,15,0,0,,055000044, +000975576,TUBO INLET,5,2000,30,80,10,10,10,1,0,1,0,0,,000975576, +000975575,TUBO OUTLET,5,2000,10,80,10,10,10,1,0,1,0,0,,000975575, +5803223742,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803223742, +5803223740,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803223740, +5803223741,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803223741, +5803223736,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803223736, +5803223745,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803223745, +000884945,,0,0,10,5,10,10,10,30,0,0,0,0,,000884945, +5803223739,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803223739, +000960322,000960322,0,0,5,10,10,10,10,20,0,20,0,0,,000960322, +000960324,000960324,0,0,5,10,10,10,10,20,0,20,0,0,,000960324, +000960275,000960275,0,0,5,10,10,10,10,20,0,20,0,0,,000960275, +000960281,000960281,0,0,5,10,10,10,10,20,0,20,0,0,,000960281, +055055934,,0,0,10,10,10,10,20,20,0,20,0,0,,055055934, +5803228585,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803228585, +5803223755,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803223755, +5803120375,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803120375, +5803083634,,0,5000,5,10,10,10,10,30,0,15,0,0,,5803083634, +742722-15,742722-15,0,0,5,10,10,10,20,30,0,10,0,0,,74222-15, +90383952,90383952,0,10,5,10,10,10,20,30,0,0,0,0,,90383952, +90383805,90383805,0,0,5,20,10,20,20,30,0,0,0,0,,90383805, +90459069,90459069,0,0,5,10,10,10,20,30,0,0,0,0,,90459069, +001031-R5,,0,0,10,30,10,10,30,10,0,5,0,0,,001031-R5, +5803036739,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803036739, +000990010,000990010,2,200,10,10,10,10,10,20,0,20,0,0,,000990010, +SY9Y-18D553AAM1,,0,0,5,5,10,10,30,20,0,20,0,0,,SY9Y-18D553AAM1, +SY9Y-18D552AAM1,,10,7000,5,5,10,10,30,20,0,20,0,0,,SY9Y-18D552AAM1, +5803037202,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803037202, +5803108366,,2,5000,5,10,10,10,10,30,0,15,0,0,,5703108366, +5803108365,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803108365, +PT00051126,,2,800,5,10,10,10,10,30,0,15,0,0,,PT00051126, +000985807,,0,0,5,10,10,10,10,30,0,10,0,0,,000985807, +055038005,,0,300,5,10,40,40,10,20,0,20,1,0,,055038005, +5803034811,,0,5000,5,10,10,10,10,30,0,15,0,0,,5803034811, +5803037201,,0,0,5,10,10,10,10,30,0,15,0,0,,5803037201, +5803223749,,0,0,5,10,10,10,10,30,0,15,0,0,,5803223749, +5803223748,,0,0,5,10,10,10,10,30,0,15,0,0,,5803223748, +055000045,,0,0,5,5,10,10,30,20,0,20,0,0,,055000045, +5803223747,,0,0,5,10,10,10,10,30,0,30,0,0,,5803223747, +5803223746,,0,0,5,10,10,10,10,30,0,30,0,0,,5803223746, +000951612,,0,0,5,5,10,10,30,20,0,20,0,0,,000951612, +000951613,,0,0,5,5,10,10,30,20,0,20,0,0,,000951613, +5803223750,,0,0,5,10,10,10,10,30,0,15,0,0,,5803223750, +5803223751,,0,0,5,10,10,10,10,30,0,15,0,0,,5803223751, +5803223752,,0,0,5,10,10,10,10,30,0,15,0,0,,5803223752, +5803223753,,0,0,5,10,10,10,10,30,0,15,0,0,,5803223753, +014093,014093,5,6000,10,1,10,10,10,30,0,15,0,0,,014093, +7076213,7076213,0,0,10,1,10,10,10,30,0,15,0,0,,7026213, +M28090912174,M280909-12174,0,0,5,10,10,10,10,30,0,15,0,0,,M28090912174, +M28O90912174ECL,,0,0,1,1,10,10,1,0,0,0,0,0,,, +5802815391,,0,0,5,10,10,10,10,30,0,15,0,0,,5802815391, +5803101541,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803101541, +5803101542,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803101542, +5803406514,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803406514, +5803108310,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803108310, +5803101537,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803101537, +5803101538,,2,5000,5,10,10,10,10,30,0,15,0,0,,5803101538, +SY9Y-7F113AAM1,,10,7000,5,5,10,10,30,20,0,20,0,0,,SY9Y-7F113AAM1, +SY9Y-7F114AAM1,,10,7000,5,5,10,10,30,20,0,20,0,0,,SY9Y-7F114AAM1, +5803108305,,0,0,5,10,10,10,10,30,0,15,0,0,,5803108305, +5803108311,,0,0,5,10,10,10,10,30,0,15,0,0,,5803108311, +5802932524,,0,0,5,25,10,10,10,50,0,50,0,0,,5802932524, +200116-13-1610,,5,5000,10,10,10,10,10,30,0,0,0,0,,200116-13-1610, +5803108369,,0,0,5,10,10,10,10,30,0,15,0,0,,5803108369, + ENT.791.057.MT,,0,8000,5,5,10,10,10,30,0,32,0,0,,ENT.791.057.MT, + ENT.791.057.MR,,0,8000,5,5,10,10,10,30,0,32,0,0,,ENT.791.057.MR, +5803036736,,0,0,5,10,10,10,10,30,0,15,0,0,,5803036736, +5803036738,,0,0,5,10,10,10,10,30,0,15,0,0,,5803036738, +A46107017000,,0,0,10,10,10,10,15,10,0,15,0,0,,A46107017000, +000975406,,0,0,5,"5 +",10,10,30,20,0,20,0,0,,000975406, +000982127,,0,0,5,"5 +",10,10,30,20,0,20,0,0,,000982127, +98KA125CT,,0,0,5,"5 +",10,10,30,50,0,50,0,0,,98KA125CT, +000976097,,0,0,5,"5 +",10,10,10,30,0,30,0,0,,000976097, +000904357,,0,0,10,10,10,10,20,20,0,20,0,0,,000904357, +TEST F250,,0,0,10,10,10,10,30,10,0,0,0,0,,, +000779625,,0,0,5,5,10,10,30,20,0,20,0,0,,000779625, +000951611,,0,0,5,5,10,10,30,20,0,20,0,0,,000951611, +000748845,,0,0,5,5,10,10,30,20,0,20,0,0,,000748845, + 055034288,,0,6800,10,10,10,10,20,20,0,20,0,0,, 055034288, +5803223735,,0,0,5,10,10,10,10,30,0,15,0,0,,5803223735, +LIEBHERR R55240,,0,0,10,40,10,10,10,30,0,30,0,0,,, +000298261,,0,0,3,3,10,10,3,30,0,30,0,0,,000298261, +18LB033CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LB033CT, +18LA995CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LA995CT, +18LA994CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LA994CT, +5803120373,,0,0,5,10,10,10,10,30,0,15,0,0,,5803120373, +18LB034CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LB034CT, +18LB069CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LB069CT, +18LB032CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LB032CT, +5803025117,,0,0,5,10,10,10,10,30,0,15,0,0,,583025117, +5803025116,,5,2000,10,10,10,10,10,30,0,15,0,0,,5803025116, +000990688,,0,0,5,5,10,10,30,20,0,20,0,0,,000990688, +000990696,,0,0,5,5,10,10,30,20,0,20,0,0,,000990696, +000990684,,0,0,5,5,10,10,30,20,0,20,0,0,,000990684, +000990685,,0,0,5,5,10,10,30,20,0,20,0,0,,000990685, +000990679,,0,0,5,5,10,10,30,20,0,20,0,0,,000990679, +0000825276,,0,0,5,10,10,10,10,30,0,30,0,0,,0000825276, +000990691,,0,0,5,10,10,10,10,20,0,20,0,0,,000990691, +000990704,,0,0,5,10,10,10,10,20,0,20,0,0,,000990704, +000990700,,0,0,5,10,10,10,30,20,0,20,0,0,,000990700, +000990681,,0,0,5,10,10,10,30,20,0,20,0,0,,000990681, +000990703,,0,0,5,10,10,10,30,20,0,20,0,0,,000990703, +000990692,,0,0,5,10,10,10,30,20,0,20,0,0,,000990692, +000990690,,0,0,5,10,10,10,30,20,0,20,0,0,,000990690, +000990708,,0,0,10,10,10,10,30,20,0,20,0,0,,000990708, +055045415,,0,0,5,5,10,10,30,20,0,20,0,0,,055045415, +000990686,,0,0,5,5,10,10,30,20,0,20,0,0,,000990686, +18LB058CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LB058CT, +000990680,,0,0,5,10,10,10,30,20,0,20,0,0,,000990680, +000990687,,0,0,10,10,10,10,30,20,0,20,0,0,,000990687, +000907313,000907313,0,0,10,10,10,10,10,20,0,20,0,0,,000907313, +000987924,,5,0,10,10,10,10,10,20,0,20,0,0,,000987924, +18LB051CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LB051CT, +18LB044CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LB044CT, +000987923,,0,0,10,10,10,10,10,20,0,20,0,0,,000987923, +000987571,,0,0,10,10,10,10,10,20,0,20,0,0,,000987571, +000987572,,0,0,10,10,10,10,10,20,0,20,0,0,,000987572, +18LB027CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LB027CT, +18LA990CT,,0,0,30,30,10,10,30,20,0,20,0,0,,18LA990CT, +18LB561CT,,0,0,30,30,10,10,30,20,0,20,0,0,,18LB561CT, +000990702,,0,0,5,5,10,10,10,20,0,20,0,0,,000990702, +000991064,,0,0,5,5,10,10,10,20,0,20,0,0,,000991064, +000991211,,0,0,5,5,10,10,10,20,0,20,0,0,,000991211, +000990689,,0,0,5,5,10,10,30,20,0,20,0,0,,000990689, +000991211,,0,0,10,10,10,10,30,20,0,20,0,0,,000991211, +000991064,,0,0,10,10,10,10,30,20,0,20,0,0,,000991064, +000990689,,0,0,10,10,10,10,30,20,0,20,0,0,,000990689, +055000046,,0,0,5,10,10,10,30,20,0,20,0,0,,055000046, +000990701,,0,0,10,10,10,10,30,20,0,20,0,0,,000990701, +000990706,,0,0,10,10,10,10,30,20,0,20,0,0,,000990706, +000990697,,0,0,10,10,10,10,30,20,0,20,0,0,,000990697, +BUCHER 7076213,7076213,0,0,10,30,10,10,10,30,0,30,0,0,,7076213, +000990694,,0,0,5,10,10,10,30,20,0,20,0,0,,000990694, +000990699,,0,0,10,10,10,10,30,20,0,20,0,0,,000990699, +SP031.053-R2,,0,0,5,10,10,10,10,30,0,10,0,0,,SP031.053-R2, +SP031.051-R2,SP031.051-R2,0,0,5,10,10,10,10,30,0,10,0,0,,SP031.051-R2, +SP031.050-R3,,0,0,5,10,10,10,10,30,0,10,0,0,,SP031.050-R3, +SP031.052-R2,,0,0,5,10,10,10,10,30,0,10,0,0,,SP031.052-R2, +16JA603CP,,10,500,10,30,10,10,10,20,0,10,0,0,,16JA603CP, +16JA605CP,,10,500,10,30,10,10,10,20,0,10,0,0,,16JA605CP, +18LB348CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LB348CT, +18LB347CT,,0,0,10,10,10,10,30,20,0,20,0,0,,18LB347CT, +18LB349CT,,0,0,20,20,10,10,30,20,0,20,0,0,,18LB349CT, +18LB348CT,,0,0,30,30,10,10,30,20,0,20,0,0,,18LB348CT, +18LB349CT,,0,0,30,30,10,10,30,20,0,20,0,0,,18LB349CT, +18LB347CT,,0,0,30,30,10,10,30,20,0,20,0,0,,18LB347CT, +000990693,,0,0,5,10,10,10,30,20,0,20,0,0,,000990693, +18LB346CT,,0,0,30,30,10,10,30,20,0,20,0,0,,18LB346CT, +18LB350CT,,0,0,30,30,10,10,30,20,0,20,0,0,,18LB350CT, +000990698,,0,0,10,10,10,10,30,20,0,20,0,0,,000990698, +000990695,,0,0,10,10,10,10,30,20,0,20,0,0,,000990695, +000990707,,0,0,5,10,10,10,30,20,0,20,0,0,,000990707, + 055017119,,0,0,5,10,10,10,10,4,0,10,0,0,, 055017119, +3915370,,0,0,10,10,10,10,20,4,0,15,0,0,, 3915370, +055017118,,0,0,5,10,10,10,10,4,0,10,0,0,, 055017118, +055017120,,0,0,5,10,10,10,60,3,0,10,0,0,, 055017120, +055017125,,0,0,5,10,10,10,60,3,0,10,0,0,, 055017125, +000990705,,0,0,10,10,10,10,30,20,0,20,0,0,,000990705, +055024035,,0,0,5,10,10,10,20,5,0,10,0,0,, 055024035, +R56414,,0,0,5,10,10,10,10,10,0,10,0,0,,R56414, +R56418,,0,0,5,10,10,10,10,10,0,10,0,0,,R56418, +R56413,,0,0,5,10,10,10,10,10,0,10,0,0,,R56413, +R56405,,0,0,5,10,10,10,10,10,0,10,0,0,,R56405, +R56411,,0,0,5,10,10,10,10,10,0,10,0,0,,R56411, +R56410,,0,0,5,10,10,10,10,10,0,10,0,0,,R56410, +07N.131.597.A,,5,4000,10,10,10,10,10,30,0,10,0,0,,07N.131.597.A, +000784883,,0,0,5,5,10,10,10,30,0,10,0,0,, 000784883, +000985807,,0,0,5,5,10,10,10,30,0,10,0,0,, 000985807, +SP031.077R1,,0,0,7,15,10,10,5,30,0,30,0,0,,SP031.077-R1, +800.P.850.1A,,0,0,5,10,10,10,10,30,0,30,0,0,,800.P.850.1A, +800.P.851.1A,,0,0,5,10,10,10,10,30,0,30,0,0,,800.P.851.1A, +055018630,,0,200,5,5,10,10,10,50,0,50,1,0,,055018630, +5803229239,,0,0,5,10,10,10,10,30,0,15,0,0,,5803229239, +000952005,,0,0,5,10,10,10,10,30,0,15,0,0,,000952005, +92172962,,0,0,10,20,10,10,10,30,0,30,0,0,,92172962, +5803229240,,0,0,5,10,10,10,10,30,0,15,0,0,,5803229240, +PROVA VA0017,,0,0,2,3,10,10,5,0,0,5,0,0,,VA0017, +V04.030.057.AD,,0,0,5,10,10,10,10,20,0,20,0,0,,V04.030.057.AD, +5803184400,,0,0,5,10,10,10,10,20,0,20,0,0,,5803184400, +5803329396,,0,0,5,10,10,10,10,30,0,30,0,0,,5803329396, +5803329398,,0,0,5,10,10,10,10,30,0,30,0,0,,5803329398, +5803329442,,0,0,5,10,10,10,10,30,0,30,0,0,,5803329442, +5803329443,,0,0,5,10,10,10,10,30,0,30,0,0,,5803329443, +5803313275,,0,0,5,10,10,10,10,30,0,30,0,0,,5803313275, +5803330518,,0,0,5,10,10,10,10,30,0,30,0,0,,5803330518, +5803313274,,0,0,5,10,10,10,10,30,0,30,0,0,,5803313274, +000742336,,0,0,5,5,10,10,10,20,0,20,0,0,,000742336, +000742332,,0,0,5,5,10,10,10,20,0,20,0,0,,000742332, +5803293153,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293153, +5803293154,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293154, +5803293158,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293158, +5803293162,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293162, +5803293142,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293142, +5803293141,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293141, +5803293149,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293149, +5803293157,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293157, +5803229244,,0,0,5,10,10,10,10,30,0,15,0,0,,5803229244, +5803229245,,0,0,5,10,10,10,10,30,0,15,0,0,,5803229245, +5803293143,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293143, +5803293144,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293144, +5803293147,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293147, +5803293148,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293148, +5803293149,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293149, +PROVA RIMAC,,0,0,5,10,10,10,20,20,0,20,0,0,,PROVA RIMAC, +5803293151,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293151, +5803293150,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293150, +5803293155,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293155, +5803293159,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293159, +055019161,,0,0,5,10,10,10,10,20,0,20,0,0,,055019161, +5803293156,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293156, +5803293161,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293161, +5803293160,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293160, +5803328789,,0,0,5,10,10,10,10,30,0,15,0,0,,5803328789, +5803328788,,0,0,5,10,10,10,10,30,0,15,0,0,,5803328788, +5803439351,,0,0,5,10,10,10,10,30,0,15,0,0,,5803439351, +5803442534,,0,0,5,10,10,10,10,30,0,15,0,0,,5803442534, +5803439352,,0,0,5,10,10,10,10,30,0,15,0,0,,5803439352, +5803442535,,0,0,5,10,10,10,10,30,0,15,0,0,,5803442535, +5803328907,,0,0,5,10,10,10,10,30,0,15,0,0,,5803328907, +5803328906,,0,0,5,10,10,10,10,30,0,15,0,0,,5803328906, +5803293145,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293145, +5803293155,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293155, +5803293152,,0,0,5,10,10,10,10,30,0,15,0,0,,5803293152, +PT00044318,,0,0,5,10,10,10,10,30,0,15,0,0,,PT00044318, +PT00045408,,0,0,5,10,10,10,10,30,0,15,0,0,,PT00045408, +5803311633,,0,0,5,5,10,10,10,30,0,30,0,0,,5803311633, +5803312417,,0,0,5,5,10,10,10,30,0,30,0,0,,5803312417, +5803312373,,0,0,5,5,10,10,10,30,0,30,0,0,,5803312373, +5803312291,,0,0,5,5,10,10,10,30,0,30,0,0,,5803312291, +5803311634,,0,0,5,5,10,10,10,30,0,30,0,0,,5803311634, +5803311630,,0,0,5,5,10,10,10,30,0,30,0,0,,5803311630, +5803311632,,0,0,5,5,10,10,10,30,0,30,0,0,,5803311632, +5803311636,,0,0,5,5,10,10,10,30,0,30,0,0,,5803311636, +5803312839,,0,0,5,5,10,10,10,30,0,30,0,0,,5803312839, +5803312781,,0,0,5,5,10,10,10,30,0,30,0,0,,5803312781, +5803316610,,0,0,5,5,10,10,10,30,0,30,0,0,,5803316610, +5803316729,,0,0,5,5,10,10,10,30,0,30,0,0,,5803316729, +5803316718,,0,0,5,5,10,10,10,30,0,30,0,0,,5803316718, +5803317742,,0,0,5,5,10,10,10,30,0,30,0,0,,5803317742, +5803321O38,,0,0,5,5,10,10,10,30,0,30,0,0,,5803321038, +5803311635,,0,0,5,5,10,10,10,30,0,30,0,0,,5803311635, +5803311631,,0,0,5,5,10,10,10,30,0,30,0,0,,5803311631, +PT00049591,,0,0,5,10,10,10,10,30,0,15,0,0,,PT00049591, +PT00049590,,0,0,5,10,10,10,10,30,0,15,0,0,,PT00049590, +1636050157,,0,0,5,10,10,10,10,30,0,0,0,0,,1636050157, +580051500,,0,0,5,5,10,10,10,30,0,30,0,0,,580051500, +5803350485,,0,0,5,5,10,10,10,30,0,30,0,0,,5803350485, +5803315085,,0,0,5,5,10,10,10,30,0,30,0,0,,5803315085, +5803350411,,0,0,5,5,10,10,10,30,0,30,0,0,,5803350411, +5803350392,,0,0,5,5,10,10,10,30,0,30,0,0,,5803350392, +580051376,,0,0,5,10,10,10,10,30,0,30,0,0,,580051376, +055020340,,0,0,5,10,10,10,10,20,0,20,0,0,,055020340, +G04-030-057-BF,VO4-030-057-BF,0,0,5,5,10,10,10,30,0,30,0,0,,V04-030-057-BF, +5803350506,,0,0,5,10,10,10,10,30,0,15,0,0,,5803350506, +5803350485,,0,0,5,10,10,10,10,30,0,15,0,0,,5803350485, +1636050164,,0,0,5,10,10,10,10,30,0,15,0,0,,1636050164, +1636050159,,0,0,5,10,10,10,10,30,0,15,0,0,,1636050159, +1636050042,,0,0,5,10,10,10,10,30,0,15,0,0,,1636050042, +403/S2662,,0,0,10,10,10,10,10,10,0,10,0,0,,403/S2662, +1636050042,,0,0,5,1,10,10,10,30,0,15,0,0,,1636050042, +1636050162,,0,0,5,10,10,10,10,30,0,15,0,0,,1636050162, +1636050158,,0,0,5,10,10,10,10,30,0,15,0,0,,1636050158, +98FA186CP,98FA186CP,0,2000,5,5,10,10,20,15,0,15,0,0,,98FA186CP, +5803358645,,0,5000,5,10,10,10,10,30,0,30,0,0,,5803358646, +5803158291,CPL GASOLIO LP,5,2000,5,10,10,10,20,30,0,0,0,0,,5803158291,C9 CCM FPT +000784883,,0,0,5,5,10,10,30,20,0,20,0,0,,000784883, + FUGA CAL 7 BAR,24001,0,0,5,5,10,10,10,10,0,6,2,1,,FUGA 24001 8MBA, +5802814210 R.3,j5802814210 R.3,5,3000,5,10,20,20,20,30,3000,30,1,100,,5802814210 R.3, diff --git a/config/csv_import/ricette st-ten-8 19-09-2024.csv b/config/csv_import/manual_csv_import/ricette st-ten-8 19-09-2024.csv similarity index 100% rename from config/csv_import/ricette st-ten-8 19-09-2024.csv rename to config/csv_import/manual_csv_import/ricette st-ten-8 19-09-2024.csv diff --git a/config/csv_import/manual_csv_import/ricette.stten6csv.csv b/config/csv_import/manual_csv_import/ricette.stten6csv.csv new file mode 100644 index 0000000..2010777 --- /dev/null +++ b/config/csv_import/manual_csv_import/ricette.stten6csv.csv @@ -0,0 +1,291 @@ +codice_ricetta,cliente,codice_prodotto,dimensione_lotto_abilitata,dimensione_lotto,verifica_connettore_abilitata,connettore,verifica_codice_a_barre_abilitata,codice_a_barre,verifica_resistenza_connettore_abilitata,scala_resistenza,r nominale,tolleranza_resistenza_pos,tolleranza_resistenza_neg,avvitatura_abilitata,viti,prova_tenuta_abilitata,tempo_pre_riempimento,pressione_pre_riempimento,tempo_riempimento,tempo_assestamento,percentuale_minima_pressione_assestamento,percentuale_massima_pressione_assestamento,tempo_di_test,pressione_di_test_delta_minimo,pressione_di_test,pressione_di_test_delta_massimo,tempo_svuotamento,pressione_svuotamento,prova_tenuta_abilitata_2,tempo_pre_riempimento_2,pressione_pre_riempimento_2,tempo_riempimento_2,tempo_assestamento_2,percentuale_minima_pressione_assestamento_2,percentuale_massima_pressione_assestamento_2,tempo_di_test_2,pressione_di_test_delta_minimo_2,pressione_di_test_2,pressione_di_test_delta_massimo_2,tempo_svuotamento_2,pressione_svuotamento_2,test_visione_abilitato,ricetta_visione,stampa_etichetta_abilitata,modello_etichetta +5801615767,IRISBUS,5801615767,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801615768,IRISBUS,5801615768,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801616061,IRISBUS,5801616061,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802278738,IVECO,5802278738,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802307397,IVECO,5802307397,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802783283,IVECO,5802783283,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820557,IVECO,5802820557,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802981174,IVECO BUS,5802981174,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6614258A2,argo,6614258A2,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6645424A2,ARGO TRACTRORS,6645424A2,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6694527A1,ARGO-TRACTORS,6694527A1,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +8626311,ROSENBAUR,8626311,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +8626312,ROSENBAUR,8626312,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6671546A3,ARGO TRACTOR,6671546A3,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6703589A,AVONI,6703589A,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +BR5PLH3000,BIMOTOR,BR5PLH3000,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +BR5PLH2500,BIMOTOR,BR5PLH2500,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +BR5PLH1500,BIMOTOR,BR5PLH1500,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +BR5PLH1000,BIMOTOR,BR5PLH1000,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +BR5SLH1500,BIMOTOR,BR5SLH1500,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +BR5SLH1000,BIMOTOR,BR5SLH1000,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +BR5BLH2500,BIMOTOR,BR5BLH2500,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +BR5BLH1000,BIMOTOR,BR5BLH1000,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +BR5BLH3500,BIMOTOR,BR5BLH3500,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +BR5SLH345,BIMOTOR,BR5SLH345,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +BR5BLH345,BIMOTOR,BR5BLH345,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +7064710,BUCHER,7064710,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +7076215,BUCHER,7076215,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +POS.050-R53581,BUCHER,POS.050-R53581,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +CHF-6157,SUTPHEN,CHF-6157,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +CHF-6158,SUTPHEN,CHF-6158,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +47723585,CNH,47723585,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +47723590,CNH,47723590,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802866956,iveco BRASILE,5802866956,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802867195,IVECO-BRASILE,5802867195,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820701,IVECO BRESC,5802820701,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820711,iveco BRESC,5802820711,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802845278,IVECO,5802845278,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801363631,IVECO,5801363631,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820457,IVECO,5802820457,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820464,IVECO,5802820464,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820493,IVECO,5802820493,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820512,IVECO,5802820512,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820516,IVECO,5802820516,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820525,IVECO,5802820525,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820534,IVECO,5802820534,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820538,IVECO,5802820538,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820548,IVECO,5802820548,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820590,IVECO,5802820590,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820596,IVECO,5802820596,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820681,IVECO,5802820681,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820697,IVECO,5802820697,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802820732,IVECO,5802820732,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801364872,IVECO,5801364872,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801402694,IVECO,5801402694,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801457865,IVECO,5801457865,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801521202,IVECO,5801521202,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +53020608,MANITOU,53020608,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +53020610,MANITOU,53020610,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +53020612,MANITOU,53020612,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +80143869,MANITOWOC,80143869,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +80143870,MANITOWOC,80143870,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +80143871,MANITOWOC,80143871,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +117346,MERLO,117346,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +117347,MERLO,117347,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +117536,MERLO,117536,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +117537,MERLO,117537,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +13-2382,MULTIMATIC,13-2382,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +13-2384,MULTIMATIC,13-2384,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +13-2386,MULTIMATIC,13-2386,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +13-2388,MULTIMATIC,13-2388,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +B6336,MV AGUSTA,B6336,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +B8702,MV AGUSTA,B8702,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +32251,OTOKAR,32251,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +1B001316,PIAGGIO,1B001316,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +2B000116,PIAGGIO,2B000116,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +FUG CALIB3,TEST CIVETTA,FUG CALIB3,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802513111,PREGNANA,5802513111,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +CHF-6156,SUTPHEN,CHF-6156,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +CHF-6157-200,SUTPHEN,CHF-6157-200,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +CHF-6158-200,SUTPHEN,CHF-6158-200,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801919616,SUZZARA,5801919616,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +46628006,ANTONIO CARRARO,46628006,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +46628008,ANTONIO CARRARO,46628008,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6623494A4,argo,6623494A4,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6628897A3,argo,6628897A3,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6671549A3,ARGO TRACTOR,6671549A3,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6673612A2,ARGO-TRACTORS,6673612A2,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6688903A2,ARGO TRACTOR,6688903A2,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6688904A2,ARGO TRACTOR,6688904A2,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6693686A3,ARGO TRACTOR,6693686A3,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6693687A3,ARGO TRACTOR,6693687A3,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +16L0167CP,mclaren,16L0167CP,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +MY83-6B747-BA,ASTON MARTIN,MY83-6B747-BA,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +MY83-6B748-BA,ASTON MARTIN,MY83-6B748-BA,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +MY83-6L694-AB,ASTON MARTIN,MY83-6L694-AB,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +MY83-6L701-AB,ASTON MARTIN,MY83-6L701-AB,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +MY83-6L694-AA,ASTON MARTIN,MY83-6L694-AA,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +1636031851,ATLASCOPCO,1636031851,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +1636031854,ATLASCOPCO,1636031854,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +1636031855,ATLASCOPCO,1636031855,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53221,AUTOMARK,R53221,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +R53222,AUTOMARK,R53222,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +670053160,BEST HOSES,670053160,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +PR321.39-R1,BUGATTI,PR321.39-R1,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +PR499-33-R3,BUGATTI,PR499-33-R3,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +PR499-40-R3,BUGATTI,PR499-40-R3,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +PR499-41-R3,BUGATTI,PR499-41-R3,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +PR499-42-R3,BUGATTI,PR499-42-R3,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +PR499-73-R2,BUGATTI,PR499-73-R2,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +145-3810,CRANE CARRIER,145-3810,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +145-3811,CRANE CARRIER,145-3811,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +145-3812,CRANE CARRIER,145-3812,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +145-3813,CRANE CARRIER,145-3813,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +52607933,MANITOU,52607933,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +52607935,MANITOU,52607935,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +52607941,MANITOU,52607941,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +52631209,MANITOU,52631209,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +52631210,MANITOU,52631210,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +52631211,MANITOU,52631211,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +125584,MERLO,125584,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +128551,MERLO,128551,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +19P003_364,MERLO,19P003_364,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +19P003_365,MERLO,19P003_365,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R52444,MERLO,R52444,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R52445,MERLO,R52445,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +13M26-32252-AA,OTOKAR,13M26-32252-AA,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +13R00-32252-AA,OTOKAR,13R00-32252-AA,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802513100,PREGNANA,5802513100,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802513109,PREGNANA,5802513109,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802513113,PREGNANA,5802513113,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802513114,PREGNANA,5802513114,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +28026890,PRINOTH,28026890,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +28026891,PRINOTH,28026891,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +28026892,PRINOTH,28026892,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +28026893,PRINOTH,28026893,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +28026894,PRINOTH,28026894,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +28026895,PRINOTH,28026895,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +28026896,PRINOTH,28026896,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +28026897,PRINOTH,28026897,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +28026898,PRINOTH,28026898,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +28054871,PRINOTH,28054871,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +52706151,MANITOU,52706151,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +52706152,MANITOU,52706152,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +52706153,MANITOU,52706153,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +63403,MAGNI,63403,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +180.3.827,VENIERI,180.3.827,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +180.3.828,VENIERI,180.3.828,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +180.3.829,VENIERI,180.3.829,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +180.3.830,VENIERI,180.3.830,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +180.3.831,VENIERI,180.3.831,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +180.3.832,VENIERI,180.3.832,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +180.3.838,VENIERI,180.3.838,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +180.3.839,VENIERI,180.3.839,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +A89020507,TECNOGEN,A89020507,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +A89090500,TECNOGEN,A89090500,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +A89100500,TECNOGEN,A89100500,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11K0210CP,MCLAREN,11K0210CP,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11K0235RT,MCLAREN,11K0235RT,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11K0236RT,MCLAREN,11K0236RT,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11K0237RT,MCLAREN,11K0237RT,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +122109,MERLO,122109,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +128551-R54268,MERLO,128551-R54268,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +12970-13-8212,MULTIMATIC,12970-13-8212,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +12KO243CP,MCLAREN,12KO243CP,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +47723530,CNH,47723530,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +504385052,FPT,504385052,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801402690,IVECO,5801402690,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +5801283144,IVECO,5801283144,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +5801354164,Iveco,5801354164,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801355177,IVECO,5801355177,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +5801376020,IVECO,5801376020,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +5801372024,IVECO,5801372024,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +5801436969,IVECO,5801436969,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801503729,IVECO,5801503729,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801615766,IRISBUS,5801615766,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5E.R52814,DIECI,5E.R52814,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +5801668147,IVECO,5801668147,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801668141,IVECO,5801668141,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +117345,MERLO,117345,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +117344,MERLO,117344,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R55205,DEUTZ,R55205,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R55204,DEUTZ,R55204,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R54893,ATLAS COPCO,R54893,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R54822,BIMOTOR,R54822,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R54800,ANDREOLI,R54800,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R54762,ATLAS COPCO,R54762,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R54761/ECL4,ATLAS COPCO,R54761/ECL4,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +R54258,BIMOTOR,R54258,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R54026-1,AVONI,R54026-1,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R54026,ARGO TRACTOR,R54026,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R54021,ARGO TRACTOR,R54021,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R54020,ARGO TRACTOR,R54020,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53963,SOREMA,R53963,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53961,SOREMA,R53961,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53959,SOREMA,R53959,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53957,SOREMA,R53957,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53927,MERLO,R53927,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53861,ARGO TRACTOR,R53861,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53849,ARGO TRACTOR,R53849,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53848,ARGO TRACTOR,R53848,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53847,ARGO TRACTOR,R53847,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53390,DIECI,R53390,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53293,KAHA,R53293,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R53223,AUTOMARK,R53223,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +5802951920,IVECO,5802951920,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +5801690154,IVECO,5801690154,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801690155,IVECO,5801690155,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +B4901,MV AGUSTA,B4901,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +503146253,MAGIRUS,503146253,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +503146900 DX,MAGIRUS,503146900 DX,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +125637,MERLO,125637,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +13H30-32256-AA,OTOKAR,13H30-32256-AA,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +13M26-32256-AA,OTOKAR,13M26-32256-AA,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +503146256 SX,MAGIRUS,503146256 SX,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +6703586A1,ARGO,6703586A1,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +19901416000,INTERPUMP,19901416000,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,2000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +36001,TEREX,36001,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +36002,TEREX,36002,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801460021,IVECO,5801460021,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801460025,IVECO,5801460025,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802845277,IVECO,5802845277,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,10000,30,1,100,x,0,1000,10,10,5,5,10,30,10000,30,3,100,False,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R55145,DEUTZ,R55145,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5803018238,IVECO,5803018238,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,10,10,10,30,18000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +5803018239,IVECO,5803018239,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,10,10,10,30,18000,30,1,100,,0,1000,10,10,5,5,10,30,18000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +5803018244,IVECO,5803018244,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,10,10,10,30,18000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +7064708,BUCHER,7064708,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +7067082,BUCHER,7067082,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +7080623,BUCHER,7080623,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +53027246,MANITOU,53027246,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +53027247,MANITOU,53027247,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +53027248,MANITOU,53027248,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +53027252,MANITOU,53027252,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +53027253,MANITOU,53027253,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802527206,PREGNANA,5802527206,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +7081272-ECL3,BUCHER,7081272-ECL3,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_2prove.prn +11K0218CP,MCLAREN,11K0218CP,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +51513901,CNH-LECCE,51513901,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +51513904,CNH-LECCE,51513904,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5801395749,IVECO,5801395749,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +6603139A4,ARGO-TRACTORS,6603139A4,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,20,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802540646,IVECO,5802540646,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,10,10,10,10,10,10,10,3,4300,30,0,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +5802845274,IVECO,5802845274,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +5802915400,IVECO,5802915400,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +6658115A2,ARGO-TRACTORS,6658115A2,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +6658115A4,ARGO-TRACTORS,6658115A4,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,15,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +125583,MERLO,125583,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +6683267A2,ARGO-TRACTORS,6683267A2,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,15,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +47886643,CNH-LECCE,47886643,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,20,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +R56763,STERKI,R56763,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +R56759,STERKI,R56759,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +6703537A2,ARGO,6703537A2,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +5802752024,IVECO,5802752024,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5802754968,PREGNANA,5802754968,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +5802845275,IVECO,5802845275,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +131295,MERLO,131295,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,15,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +5803143177,IVECO,5803143177,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,2500,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +5802845276,IVECO FRANCE,5802845276,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +R52763,AUTOMARK,R52763,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +R52764,AUTOMARK,R52764,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +R52765,AUTOMARK,R52765,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_1prova.prn +5802892528,IVECO FRANCE,5802892528,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +5802892531,IVECO FRANCE,5802892531,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +19872.00.35,DELL ORTO,19872.00.35,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,20,30,9000,30,0,100,,0,1000,10,10,5,5,20,30,9000,5,1,100,False,000952054.ini,x,ETA30x16_203dpi.prn +19799.00.35,DELL ORTO,19799.00.35,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,20,30,9000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,ETA30x16_203dpi.prn +000746453,FERRARI,000746453,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,10500,30,1,100,,0,1000,10,10,5,5,10,30,10000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +10005330,CAPACITY TRUCKS,10005330,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +10006718,CAPACITY TRUCKS,10006718,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +112247,MERLO,112247,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +112248,MERLO,112248,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11519588,VAN HOOL,11519588,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11519589,VAN HOOL,11519589,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11519590,VAN HOOL,11519590,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11556236,VAN HOOL,11556236,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11556237,VAN HOOL,11556237,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11578030,VAN HOOL,11578030,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,000952054.ini,x,EtichettaR5_Montaggio_1prova.prn +11585242,VAN HOOL,11585242,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11604514,VAN HOOL,11604514,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,30,30,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11607305,VAN HOOL,11607305,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11627962,VAN HOOL,11627962,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,20,10,5,5,10,30,7000,30,1,100,x,0,1000,20,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11642860,VAN HOOL,11642860,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11642861,VAN HOOL,11642861,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11650475,VAN HOOL,11650475,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11650477,VAN HOOL,11650477,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11650478,VAN HOOL,11650478,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11650479,VAN HOOL,11650479,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11650481,VAN HOOL,11650481,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +11650484,VAN HOOL,11650484,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +117342,MERLO,117342,,,,SCRx,,,,500.0,1000000000.0,10.0,5.0,,,x,0,1000,10,10,5,5,10,30,7000,30,1,100,x,0,1000,10,10,5,5,10,30,15000,30,1,100,0,termorestringente_923578.ini,x,EtichettaR5_Montaggio_2prove.prn +117343,MERLO,117343,,,,SCRx,,,,500.0,9999999.99,10.0,5.0,,,x,0,1000,10,10,5,5,20,30,9000,30,1,100,,0,1000,10,10,5,5,10,30,15000,30,1,100,False,termorestringente_923578.ini,x,ETA30x16_203dpi.prn diff --git a/config/csv_import/st-ten-11.csv b/config/csv_import/manual_csv_import/st-ten-11.csv similarity index 100% rename from config/csv_import/st-ten-11.csv rename to config/csv_import/manual_csv_import/st-ten-11.csv diff --git a/config/csv_import/st-ten-8.csv b/config/csv_import/manual_csv_import/st-ten-8.csv similarity index 100% rename from config/csv_import/st-ten-8.csv rename to config/csv_import/manual_csv_import/st-ten-8.csv diff --git a/config/csv_import/st-ten-9.csv b/config/csv_import/manual_csv_import/st-ten-9.csv similarity index 100% rename from config/csv_import/st-ten-9.csv rename to config/csv_import/manual_csv_import/st-ten-9.csv diff --git a/config/csv_import/test_doppia_prova_tenuta.csv b/config/csv_import/manual_csv_import/test_doppia_prova_tenuta.csv similarity index 100% rename from config/csv_import/test_doppia_prova_tenuta.csv rename to config/csv_import/manual_csv_import/test_doppia_prova_tenuta.csv diff --git a/config/csv_import/test_import_himatic my24.csv b/config/csv_import/manual_csv_import/test_import_himatic my24.csv similarity index 100% rename from config/csv_import/test_import_himatic my24.csv rename to config/csv_import/manual_csv_import/test_import_himatic my24.csv diff --git a/config/csv_import/test_import_himatic.csv b/config/csv_import/manual_csv_import/test_import_himatic.csv similarity index 100% rename from config/csv_import/test_import_himatic.csv rename to config/csv_import/manual_csv_import/test_import_himatic.csv diff --git a/config/csv_import/test_import_himatic.xlsx b/config/csv_import/manual_csv_import/test_import_himatic.xlsx similarity index 100% rename from config/csv_import/test_import_himatic.xlsx rename to config/csv_import/manual_csv_import/test_import_himatic.xlsx diff --git a/config/csv_import/test_import_leak_only.csv b/config/csv_import/manual_csv_import/test_import_leak_only.csv similarity index 100% rename from config/csv_import/test_import_leak_only.csv rename to config/csv_import/manual_csv_import/test_import_leak_only.csv diff --git a/config/csv_import/test_tecna_upload.csv b/config/csv_import/manual_csv_import/test_tecna_upload.csv similarity index 100% rename from config/csv_import/test_tecna_upload.csv rename to config/csv_import/manual_csv_import/test_tecna_upload.csv diff --git a/config/csv_import/tst.csv b/config/csv_import/manual_csv_import/tst.csv similarity index 100% rename from config/csv_import/tst.csv rename to config/csv_import/manual_csv_import/tst.csv diff --git a/config/csv_import/test.py b/config/csv_import/test.py deleted file mode 100644 index cf35294..0000000 --- a/config/csv_import/test.py +++ /dev/null @@ -1,12 +0,0 @@ -import csv -import itertools - -# DOES NOT WORK -def lower_first(iterator): - return itertools.chain([next(iterator).lower()], iterator) - -with open("Tabella Tubi riscaldati - COMPLETA rev19_29-12-2022.csv", 'rU') as datafile: - csvDict = csv.DictReader(lower_first(datafile)) - for ucrow in csvDict: - row = dict((k.lower(), v) for k, v in ucrow.items()) # WORKS - print(row) \ No newline at end of file diff --git a/config/instruction_images/generic/DEFAULT.svg b/config/instruction_images/generic/DEFAULT.svg new file mode 100644 index 0000000..facc0bb --- /dev/null +++ b/config/instruction_images/generic/DEFAULT.svg @@ -0,0 +1,49 @@ + + + +DISEGNO NON DISPONIBILE diff --git a/config/instruction_images/st-ten-11/07N131628.svg b/config/instruction_images/st-ten-11/07N131628.svg index 332702c..b62724a 100644 --- a/config/instruction_images/st-ten-11/07N131628.svg +++ b/config/instruction_images/st-ten-11/07N131628.svg @@ -4,9 +4,9 @@ + + + + + diff --git a/config/instruction_images/st-ten-11/18JA708CP.svg b/config/instruction_images/st-ten-11/18JA708CP.svg new file mode 100644 index 0000000..ee32042 --- /dev/null +++ b/config/instruction_images/st-ten-11/18JA708CP.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + diff --git a/config/instruction_images/st-ten-11/18JA709CP.svg b/config/instruction_images/st-ten-11/18JA709CP.svg new file mode 100644 index 0000000..a91c6be --- /dev/null +++ b/config/instruction_images/st-ten-11/18JA709CP.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + diff --git a/config/instruction_images/st-ten-11/18JA710CP.svg b/config/instruction_images/st-ten-11/18JA710CP.svg new file mode 100644 index 0000000..2c2b0b9 --- /dev/null +++ b/config/instruction_images/st-ten-11/18JA710CP.svg @@ -0,0 +1,48 @@ + + + + + + + + + + diff --git a/config/instruction_images/st-ten-11/18JA712CP.svg b/config/instruction_images/st-ten-11/18JA712CP.svg new file mode 100644 index 0000000..8343eb1 --- /dev/null +++ b/config/instruction_images/st-ten-11/18JA712CP.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + diff --git a/config/instruction_images/st-ten-11/18JA713CP.svg b/config/instruction_images/st-ten-11/18JA713CP.svg new file mode 100644 index 0000000..7739628 --- /dev/null +++ b/config/instruction_images/st-ten-11/18JA713CP.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + diff --git a/config/instruction_images/st-ten-11/18JA718CP.svg b/config/instruction_images/st-ten-11/18JA718CP.svg new file mode 100644 index 0000000..3cf3f24 --- /dev/null +++ b/config/instruction_images/st-ten-11/18JA718CP.svg @@ -0,0 +1,48 @@ + + + + + + + + + + diff --git a/config/instruction_images/st-ten-11/18JA750CP.svg b/config/instruction_images/st-ten-11/18JA750CP.svg new file mode 100644 index 0000000..0b3bb27 --- /dev/null +++ b/config/instruction_images/st-ten-11/18JA750CP.svg @@ -0,0 +1,48 @@ + + + + + + + + + + diff --git a/config/instruction_images/st-ten-11/18JA757CP.svg b/config/instruction_images/st-ten-11/18JA757CP.svg new file mode 100644 index 0000000..ba538cb --- /dev/null +++ b/config/instruction_images/st-ten-11/18JA757CP.svg @@ -0,0 +1,48 @@ + + + + + + + + + + diff --git a/config/label_designs/FERRARI/ferrari_flag_qr_only.nlbl b/config/label_designs/FERRARI/ferrari_flag_qr_only.nlbl new file mode 100644 index 0000000..0975990 Binary files /dev/null and b/config/label_designs/FERRARI/ferrari_flag_qr_only.nlbl differ diff --git a/config/label_designs/LAMBORGHINI/Lamborghini_label.nlbl b/config/label_designs/LAMBORGHINI/Lamborghini_label.nlbl new file mode 100644 index 0000000..3644cb5 Binary files /dev/null and b/config/label_designs/LAMBORGHINI/Lamborghini_label.nlbl differ diff --git a/config/label_designs/LAMBORGHINI/Lamborghini_test.nlbl b/config/label_designs/LAMBORGHINI/Lamborghini_test.nlbl new file mode 100644 index 0000000..d2c10ba Binary files /dev/null and b/config/label_designs/LAMBORGHINI/Lamborghini_test.nlbl differ diff --git a/config/label_designs/MCLAREN/MCLAREN_TEMPLATE.nlbl b/config/label_designs/MCLAREN/MCLAREN_TEMPLATE.nlbl new file mode 100644 index 0000000..4343446 Binary files /dev/null and b/config/label_designs/MCLAREN/MCLAREN_TEMPLATE.nlbl differ diff --git a/config/label_designs/PROTOTIPI/ERRECINQUE_flag_qr_only.nlbl b/config/label_designs/PROTOTIPI/ERRECINQUE_flag_qr_only.nlbl new file mode 100644 index 0000000..447cfa9 Binary files /dev/null and b/config/label_designs/PROTOTIPI/ERRECINQUE_flag_qr_only.nlbl differ diff --git a/config/label_templates/ERRECINQUE_flag_qr_only.prn b/config/label_templates/ERRECINQUE_flag_qr_only.prn new file mode 100644 index 0000000..1bb6d79 --- /dev/null +++ b/config/label_templates/ERRECINQUE_flag_qr_only.prn @@ -0,0 +1,20 @@ +CT~~CD,~CC^~CT~ +^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR2,2~SD25^JUS^LRN^CI0^XZ +^XA +^MMT +^PW320 +^LL1039 +^LS0 +^FO32,128^GFA,06144,06144,00032,:Z64: +eJzt10Fr5DYUAGAZw+gSoj2mNKC/sF1f9lDQsX8jS6H9FyuHwM4lsNfCHvI39laXwOZimp+wDoXtsQ65qCD0+mTLHrl+stIuhbZEF8/4G9vvSU+Sh7Gn9i9opdl2nrl+x54lpPj9snq4/XDvdg/vPpSMA4D1p/EIw5OLyxcvW1694dXXwU1wF/zspD2u2HH1si2ZCF7Ofn/5rbltK3ZUPW93ay8eTr+/37dV4/147aw6/fRV3Vb26LvnrSPu//Dbr79ctWen4tOry/H6Prgdeubu529urk7OjuSbVz/smAw+5Tn2Qc3Y6QljJ0e0++8G/Qub9h4v/jLt//G2y7jYVM3kVT18KlZ1zMGV0AnoeS+vjQAGcNOrt52WQz+iW44Ihht0CXXw1wcXiPgrIy+MgmZyNbv0P3HcomvoBheNCy4Gl8Fx8AD2XeSssPInKy2g73vHe6b2nUbHIQ+uzq2yWjg1ea9Fh95NXlvlBr+3pXejRT97aby/VwLwQj/R1QUARs1EN8Zv/P2feefeNZz7LsOQZy+sZkp8/DF4icnErr1r8RGCY5eLtctbwCdyzB+D9ymPjpWPrka/M3gLnzyGxGQT4h/cyZvJ5egieK99ik7unbiz+IjRzXQ971+jXzt5ge5kx0DeWXU9OQ4zuh8idBy8a3D4RWHUMLnzbuS5k83gQ3JLx/pS3jVckM6h8yE2CnvWdy6WFEA9eufKvoBaMSsbYdCZNoWvk3qz6J/aqg2bCrYm4Tx4l3ARPLUZTu4yDjlPBCjGGxdhZVh7WPF1IkAeApOJAHkoKZEorTIEVqYCnJasVIDaLo9/bvKRAfJkgN3imAqQfXaAiSF8bIBFNsDEECq7PK4ChMcG2PzDASaGcApMJAIUmQDVdoDFPDs1OcR8fi1SZAJynp2C7GE1512SCR7mdkF5PDOoDoiz1oTHvabqtUu77SrqFNmsXXcZr7c9zkmsfdEnhJf285ybjPfbLmIn8htfif6+L04R45P1+JRe++ISor5iLyiPPlP1HTsn5kfskvC4pKkFxHs5bYLE/PXONzZJ7/MmWmc8d32XeX4i/uklg/r7FedP7XGL/s04OX51/LB624n6Wnqz8kX95eo754vJQpzKOf/rvpj/lJttL3Nut32x/uWcyH+5vhIejznpzeEztX6rbttl1AHU/hJvmkT94eQ5fKb2v+jNkqrveP+k5gfedD5LrT9+/4aN+Tvu/+n1J5r9iX8JxcEbyqMASN5cXhYR1gl/ak/t/9P+AGyhc1w=:83DC +^FT293,614^A0I,25,21^FH\^FD{DD}/{MO}/{YY}^FS +^FT145,614^A0I,25,21^FH\^FD{HH}:{MI}:{SS}^FS +^FT291,952^A0I,25,24^FH\^FDNumero Disegno^FS +^FT293,645^A0I,25,24^FH\^FDData/Ora Prova^FS +^FT293,691^A0I,25,24^FH\^FDN. Pezzo:^FS +^FT185,690^A0I,25,24^FH\^FD{SN5}^FS +^BY120,120^FT289,803^BXI,6,200,0,0,1,~ +^FH\^FD{PART}{MO}{YY}{SN5}^FS +^FT291,752^A0I,25,24^FH\^FD{PART}{MO}{YY}{SN5}^FS +^FT293,558^A0I,25,24^FH\^FDEsito : CONFORME^FS +^PQ1,0,1,Y^XZ diff --git a/config/label_templates/ETA30x16_203dpi.prn b/config/label_templates/ETA30x16_203dpi.prn new file mode 100644 index 0000000..4612fb0 --- /dev/null +++ b/config/label_templates/ETA30x16_203dpi.prn @@ -0,0 +1,14 @@ +CT~~CD,~CC^~CT~ +^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR2,2~SD20^JUS^LRN^CI0^XZ +^XA +^MMT +^PW256 +^LL0144 +^LS0 +^FT148,125^BQN,2,4 +^FH\^FDLA,{PART}^FS +^FT19,40^A0N,23,21^FH\^FD{PART}^FS +^FT19,71^A0N,23,21^FH\^FDNum:{SN5}^FS +^FT19,101^A0N,23,21^FH\^FD{DATE}^FS +^FT19,126^A0N,23,21^FH\^FD{TIME}^FS +^PQ1,0,1,Y^XZ diff --git a/config/label_templates/F164F169_203.prn b/config/label_templates/F164F169_203.prn new file mode 100644 index 0000000..e28cda1 --- /dev/null +++ b/config/label_templates/F164F169_203.prn @@ -0,0 +1,53 @@ +CT~~CD,~CC^~CT~ +^XA +~TA000 +~JSN +^LT0 +^MNW +^MTT +^PON +^PMN +^LH0,0 +^JMA +^PR2,2 +~SD15 +^JUS +^LRN +^CI27 +^PA0,1,1,0 +^XZ +^XA +^MMT +^PW320 +^LL1119 +^LS0 +^FT27,493^A0N,25,23^FH\^CI28^FD{DD}/{MO}/{YY}^FS^CI27 +^FT175,493^A0N,25,23^FH\^CI28^FD{HH}:{MI}:{SS}^FS^CI27 +^FT18,1013^A0N,31,30^FH\^CI28^FDESITO:^FS^CI27 +^FT144,1013^A0N,31,30^FH\^CI28^FDCONFORME^FS^CI27 +^FT29,87^A0N,25,25^FH\^CI28^FDNumero Disegno^FS^CI27 +^FT27,462^A0N,25,25^FH\^CI28^FDData/Ora Prova^FS^CI27 +^FT27,530^A0N,25,25^FH\^CI28^FDStazione: {STATION}^FS^CI27 +^FT27,416^A0N,25,25^FH\^CI28^FDN. Pezzo:^FS^CI27 +^FT135,417^A0N,25,25^FH\^CI28^FD{SN5}^FS^CI27 +^FT27,562^A0N,25,25^FH\^CI28^FDOPERATORE: {OPERATOR}^FS^CI27 +^FO52,649^GB215,0,8^FS +^FT19,705^A0N,25,25^FH\^CI28^FDP. prova:^FS^CI27 +^FT19,737^A0N,25,25^FH\^CI28^FDP. rilevata:^FS^CI27 +^FT145,737^A0N,25,25^FH\^CI28^FD{RESPSET}mbar^FS^CI27 +^FT19,764^A0N,25,25^FH\^CI28^FDCaduta ammessa:^FS^CI27 +^FT206,764^A0N,25,25^FH\^CI28^FD{PMIN} mbar^FS^CI27 +^FT19,797^A0N,25,25^FH\^CI28^FDCaduta rilevata:^FS^CI27 +^FT179,797^A0N,25,25^FH\^CI28^FD{RESLEAK} mbar^FS^CI27 +^FT19,908^A0N,25,25^FH\^CI28^FDT.Prova^FS^CI27 +^FT207,912^A0N,25,25^FH\^CI28^FD{TTEST} s^FS^CI27 +^FT18,864^A0N,25,25^FH\^CI28^FDT.Riempim.^FS^CI27 +^FT207,864^A0N,25,25^FH\^CI28^FD{TFILL} s^FS^CI27 +^FT19,886^A0N,25,25^FH\^CI28^FDT.Stabilizzazione^FS^CI27 +^FT207,888^A0N,25,25^FH\^CI28^FD{TSET} s^FS^CI27 +^FT145,705^A0N,25,25^FH\^CI28^FD{PTEST} mbar^FS^CI27 +^FT31,236^BXN,6,200,0,0,1,_,1 +^FH\^FD{PART}{MO}{YY}{SN5}^FS +^FT29,287^A0N,25,25^FH\^CI28^FD{PART}{MO}{YY}{SN5}^FS^CI27 +^PQ1,0,1,Y +^XZ diff --git a/config/label_templates/ferrari_flag_qr_only.prn b/config/label_templates/ferrari_flag_qr_only.prn new file mode 100644 index 0000000..bb80f3f --- /dev/null +++ b/config/label_templates/ferrari_flag_qr_only.prn @@ -0,0 +1,34 @@ +CT~~CD,~CC^~CT~ +^XA +~TA000 +~JSN +^LT0 +^MNW +^MTT +^PON +^PMN +^LH0,0 +^JMA +^PR2,2 +~SD15 +^JUS +^LRN +^CI27 +^PA0,1,1,0 +^XZ +^XA +^MMT +^PW320 +^LL1119 +^LS0 +^FT27,425^A0N,25,23^FH\^CI28^FD{DD}/{MO}/{YY}^FS^CI27 +^FT175,425^A0N,25,23^FH\^CI28^FD{HH}:{MI}:{SS}^FS^CI27 +^FT29,87^A0N,25,25^FH\^CI28^FDNumero Disegno^FS^CI27 +^FT27,394^A0N,25,25^FH\^CI28^FDData/Ora Prova^FS^CI27 +^FT27,348^A0N,25,25^FH\^CI28^FDN. Pezzo:^FS^CI27 +^FT135,349^A0N,25,25^FH\^CI28^FD{SN5}^FS^CI27 +^FT31,236^BXN,6,200,0,0,1,_,1 +^FH\^FD{PART}{MO}{YY}{SN5}^FS +^FT29,287^A0N,25,25^FH\^CI28^FD{PART}{MO}{YY}{SN5}^FS^CI27 +^PQ1,0,1,Y +^XZ diff --git a/config/label_templates/st-ten-11/Lamborghini_label.prn b/config/label_templates/st-ten-11/Lamborghini_label.prn new file mode 100644 index 0000000..fc7b766 --- /dev/null +++ b/config/label_templates/st-ten-11/Lamborghini_label.prn @@ -0,0 +1,29 @@ +CT~~CD,~CC^~CT~ +^XA +~TA000 +~JSN +^LT0 +^MNW +^MTT +^PON +^PMN +^LH0,0 +^JMA +^PR2,2 +~SD20 +^JUS +^LRN +^CI27 +^PA0,1,1,0 +^XZ +^XA +^MMT +^PW192 +^LL240 +^LS0 +^FT19,173^BXN,7,200,0,0,1,_,1 +^FH\^FD#{RECIPE}###{DD}{MO}{YY}*\0D\0A^FS +^FT20,205^A0N,25,25^FH\^CI28^FD#{RECIPE}###^FS^CI27 +^FT19,230^A0N,22,23^FH\^CI28^FD{DD}/{MO}/{YY}*^FS^CI27 +^PQ1,0,1,Y +^XZ diff --git a/config/label_templates/st-ten-11/Lamborghini_lable.prn b/config/label_templates/st-ten-11/Lamborghini_lable.prn new file mode 100644 index 0000000..7349e8b --- /dev/null +++ b/config/label_templates/st-ten-11/Lamborghini_lable.prn @@ -0,0 +1,34 @@ +CT~~CD,~CC^~CT~ +^XA +~TA000 +~JSN +^LT0 +^MNW +^MTT +^PON +^PMN +^LH0,0 +^JMA +^PR2,2 +~SD20 +^JUS +^LRN +^CI27 +^PA0,1,1,0 +^XZ +^XA +^MMT +^PW192 +^LL240 +^LS0 +^FT19,173^BXN,7,200,0,0,1,_,1 +^FH\^FD#{RECIPE}###{DD}{MO}{YY}*\0D\0A^FS +^FT9,204^A0N,24,23^FH\^CI28^FD#^FS^CI27 +^FT20,205^A0N,25,25^FH\^CI28^FD{RECIPE}^FS^CI27 +^FT118,204^A0N,24,23^FH\^CI28^FD#^FS^CI27 +^FT129,204^A0N,24,23^FH\^CI28^FD#^FS^CI27 +^FT141,204^A0N,24,23^FH\^CI28^FD#^FS^CI27 +^FT2,227^A0N,22,23^FH\^CI28^FD{DD}/{MO}/{YY}^FS^CI27 +^FT170,232^A0N,28,28^FH\^CI28^FD*^FS^CI27 +^PQ1,0,1,Y +^XZ diff --git a/config/label_templates/st-ten-11/Mclaren_label.prn b/config/label_templates/st-ten-11/Mclaren_label.prn new file mode 100644 index 0000000..df7df02 --- /dev/null +++ b/config/label_templates/st-ten-11/Mclaren_label.prn @@ -0,0 +1,29 @@ +CT~~CD,~CC^~CT~ +^XA +~TA000 +~JSN +^LT0 +^MNW +^MTT +^PON +^PMN +^LH0,0 +^JMA +^PR2,2 +~SD25 +^JUS +^LRN +^CI27 +^PA0,1,1,0 +^XZ +^XA +^MMT +^PW320 +^LL1039 +^LS0 +^FO73,37^GFA,329,672,24,:Z64:eJx10D2OhDAMBWBGKVLmCBwlR0s6rkXHNWC2SItEAVJM3jzzs6PVBhDNZ+I8u2lqj52r3ECq7B48oNTYoO7uwf2DA9V7zYO7aFCb63KzNTz1+nMSPXchauaft8IKfvih8b0vhhgi04oTg0U9hjHgcD0jXjyy+oQFGFjnWC9IEJy+YAUS0G86heD2zIm0NI6Mg50v+zN4hpOWPmkc/rJDcwbk4sSvEqZ4LG89XPsUrjiJfzNOSJebywfxo8YckHbEr3eHG3QYdo2Sv32OOBZdxZ2wIr9ub283W6yE0xcu7fbZcp8tdcO51DS3HOsDi7sZvg==:29D1 +^FT91,110^A0N,31,30^FH\^CI28^FD{PART}^FS^CI27 +^FT97,152^A0N,32,33^FH\^CI28^FD{YY} T {JJJ}^FS^CI27 +^FT12,222^A0N,32,25^FH\^CI28^FDLEAK RESULT {RESULT}^FS^CI27 +^PQ1,0,1,Y +^XZ diff --git a/config/label_templates/st-ten-11/ferrari_30x16_203.prn b/config/label_templates/st-ten-11/ferrari_30x16_203.prn new file mode 100644 index 0000000..53b6b78 --- /dev/null +++ b/config/label_templates/st-ten-11/ferrari_30x16_203.prn @@ -0,0 +1,30 @@ +CT~~CD,~CC^~CT~ +^XA +~TA000 +~JSN +^LT0 +^MNW +^MTT +^PON +^PMN +^LH0,0 +^JMA +^PR2,2 +~SD15 +^JUS +^LRN +^CI27 +^PA0,1,1,0 +^XZ +^XA +^MMT +^PW256 +^LL144 +^LS0 +^FT21,129^BQN,2,4 +^FH\^FDLA,{PART}{SN5}{MO}{YY}^FS +^FT234,104^A0I,23,23^FH\^CI28^FD{PART}^FS^CI27 +^FT234,50^A0I,23,23^FH\^CI28^FDN:{SN5}^FS^CI27 +^FT234,23^A0I,23,23^FH\^CI28^FD{DD}/{MO}/{YY}^FS^CI27 +^PQ1,0,1,Y +^XZ diff --git a/config/machine_settings/defaults.ini b/config/machine_settings/defaults.ini index 1182755..37534a4 100644 --- a/config/machine_settings/defaults.ini +++ b/config/machine_settings/defaults.ini @@ -50,6 +50,18 @@ minimum_disk_free_space_gb: 20 resize_resolution: 612x512 [archive_synchronizer] +portal_address: https://r5portal.it/ +archive_root:api/st-ten-save/ +status_root:api/device-info-update/ +download_root:media/uploads/ + +images_path: data/images +poll_time: 60 +hold_time: 30 +service_account_json: config/machine_settings/gcloud_default.json +bucket_id: st_ten_img + +[archive_synchronizer_extra] archive_endpoint: https://r5portal.it/api/st-ten-save/ images_path: data/images poll_time: 60 diff --git a/config/machine_settings/hostnames.ini b/config/machine_settings/hostnames.ini index dfdc1c7..481d08c 100644 --- a/config/machine_settings/hostnames.ini +++ b/config/machine_settings/hostnames.ini @@ -12,4 +12,6 @@ st-ten-10: st-ten-10 st-ten-11: st-ten-11 st-ten-12: st-ten-12 st-ten-13: st-ten-13 +st-ten-14: st-ten-14 +test-linux: test-linux diff --git a/config/machine_settings/st-ten-1-linux.ini b/config/machine_settings/st-ten-1-linux.ini index 7561095..b88254e 100644 --- a/config/machine_settings/st-ten-1-linux.ini +++ b/config/machine_settings/st-ten-1-linux.ini @@ -1,66 +1,107 @@ [machine] -description = ST-TEN-2 - COLLAUDO TUBI RISCALDATI VOLPIANO -instruction_folder = st-ten-2 -image_for_warning= st-ten-2 +description = ST-TEN-1 +instruction_folder = st-ten-1 +image_for_warning= st-ten-1 [hardware_config] archive_synchronizer: present +galaxy_camera: absent +uvc_camera: absent label_printer: present +neo_pixels: absent remote_api: absent tecna_t3: present - -[digital_io] -# OUTPUT MAP FOR EXTERNAL FLUSH/BLOW UNIT -id_flush_blow: USB-5860,BID#0 -blow_on: 0 # INPUT VALVE TO SERVICE AIR -flush_on: 1 # OUTPUT VALVE TO DIRT COLLECTOR -blow_led:2 # CLEAN INDICATOR -test_on_led:3 # LEAK TEST ACTIVE INDICATOR -flush_led:4 # FLUSH INDICATOR +vision_saver: absent +vision: absent +screwdriver: absent +fixture_id: absent +digital_io: present +external_flush_blow: absent [tecna_t3] port: /dev/ttyUSB0 +model: t3l + +[fixture_rfid] +port: COM5 + +[digital_io] +# OUTPUT MAP FOR FIXTURE CONNECTOR +id_fixture: USB-5862,BID#0 +discard_idx:12 # BIT NUMBER OF THE I/0 MODULE USED FOR DISCARD SENSING [recipe] -recipe_name_field: cod finito cliente -part_number_field: cod finito r5 -barcode_enable_field: verifica_codice_a_barre_abilitata -barcode_serial_field: codice_a_barre -label_template_field: etichetta -description_field: cod semilavorato costampato +recipe_name_field: codice_ricetta +part_number_field: codice_prodotto +label_template_field: modello_etichetta +description_field: descrizione + +[label_printer] +platform: windows +printer: zd420 [recipes_defaults] -prova_tenuta_abilitata: x +tester_discharge_enable: yes +codice_ricetta: specificare ricetta +cliente: IVECO +part_number: specificare part number +canale_di_prova: 0 warning_img: + +dimensione_lotto_abilitata: n_componenti:1 +istruzione_abilitata: x +numero nastri (n):0 +numero sensori anello (sa):0 +numero sensori presenza (sp):0 + +prova_tenuta_abilitata: x tempo_pre_riempimento: 0 -pressione_pre_riempimento: 1000 -tempo_riempimento: 10 +pressione_pre_riempimento: 5000 +tempo_riempimento: 5 tempo_assestamento: 10 percentuale_minima_pressione_assestamento: 5 percentuale_massima_pressione_assestamento: 5 tempo_di_test: 10 pressione_di_test_delta_minimo: 30 -pressione_di_test: 15000 +pressione_di_test: 5000 pressione_di_test_delta_massimo: 30 tempo_svuotamento: 1 pressione_svuotamento: 100 -canale_di_prova: 0 -tester_discharge_enable: yes + +prova_tenuta_abilitata_2: +tempo_pre_riempimento_2: 0 +pressione_pre_riempimento_2: 1000 +tempo_riempimento_2: 5 +tempo_assestamento_2: 5 +percentuale_minima_pressione_assestamento_2: 5 +percentuale_massima_pressione_assestamento_2: 5 +tempo_di_test_2: 5 +pressione_di_test_delta_minimo_2: 200 +pressione_di_test_2: 1000 +pressione_di_test_delta_massimo_2: 200 +tempo_svuotamento_2: 1 +pressione_svuotamento_2: 100 + +stampa_etichetta_abilitata: x +modello_etichetta: ETA30x16_203dpi.prn +descrizione: inserire descrizione ricetta [autotest_leak] enabled: true pre_filling_time: 0 pre_filling_pressure: 1000 -filling_time: 5 +filling_time: 10 settling_time: 10 settling_pressure_min_percent: 5 settling_pressure_max_percent: 5 +test_pressure: 7000 test_time: 10 -test_pressure_qneg: 5 -test_pressure: 9000 -test_pressure_qpos: 5 +test_pressure_qpos: 10 #Q+ Upper test leak limit +test_pressure_qneg: 30 #Q- Lower test leak limit +test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube) +test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube) flush_time: 1 flush_pressure: 100 relay_config: 1 \ No newline at end of file diff --git a/config/machine_settings/st-ten-1.ini b/config/machine_settings/st-ten-1.ini index 034f829..063f5c1 100644 --- a/config/machine_settings/st-ten-1.ini +++ b/config/machine_settings/st-ten-1.ini @@ -14,7 +14,7 @@ tecna_t3: present vision_saver: absent vision: absent screwdriver: absent -fixture_id: present +#fixture_id: present digital_io: present external_flush_blow: absent diff --git a/config/machine_settings/st-ten-10.ini b/config/machine_settings/st-ten-10.ini index da5870c..f33dd28 100644 --- a/config/machine_settings/st-ten-10.ini +++ b/config/machine_settings/st-ten-10.ini @@ -83,18 +83,3 @@ tester_discharge_enable: yes [autotest_leak] enabled: false -pre_filling_time: 0 -pre_filling_pressure: 0 -filling_time: 10 -settling_time: 10 -settling_pressure_min_percent: 5 -settling_pressure_max_percent: 5 -test_pressure: 5000 -test_time: 10 -test_pressure_qpos: 10 #Q+ Upper test leak limit -test_pressure_qneg: 30 #Q- Lower test leak limit -test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube) -test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube) -flush_time: 1 -flush_pressure: 100 -relay_config: 1 diff --git a/config/machine_settings/st-ten-14.ini b/config/machine_settings/st-ten-14.ini new file mode 100644 index 0000000..c30cbc9 --- /dev/null +++ b/config/machine_settings/st-ten-14.ini @@ -0,0 +1,93 @@ +[machine] +description = ST-TEN-14 +instruction_folder = st-ten-14 +image_for_warning= st-ten-14 + +[hardware_config] +archive_synchronizer: present +uvc_camera: absent +label_printer: present +neo_pixels: absent +remote_api: absent +tecna_t3: present +vision_saver: absent +vision: absent +screwdriver: absent +digital_io: absent +barcode_recipe_selection: absent +fixture_id: absent +discard_box: absent +enforce_piece_removal: no + +[tecna_t3] +port: /dev/ttyUSB0 +model: t3l + +[label_printer] +platform: linux +printer: ZTC-ZD421-203dpi-ZPL + +[digital_io] +# OUTPUT MAP FOR FIXTURE CONNECTOR +id: USB-5860,BID#0 + +[fixture_rfid] +port: dev/ttyUSB1 + +[recipe] +recipe_name_field: codice_ricetta +part_number_field: codice_prodotto +label_template_field: modello_etichetta +description_field: descrizione + +[recipes_defaults] +tester_discharge_enable: yes +dimensione_lotto_abilitata: x +tempo_pre_riempimento: 0 +pressione_pre_riempimento: 1000 +tempo_riempimento: 15 +tempo_assestamento: 15 +tempo_di_test: 10 +n_componenti:1 +percentuale_minima_pressione_assestamento: 5 +percentuale_massima_pressione_assestamento: 5 +pressione_di_test_delta_minimo: 30 +pressione_di_test: 7000 +pressione_di_test_delta_massimo: 30 +tempo_svuotamento: 0 +pressione_svuotamento: 100 +canale_di_prova: 1 +prova_tenuta_abilitata_2: +tempo_pre_riempimento_2: 0 +pressione_pre_riempimento_2: 1000 +tempo_riempimento_2: 20 +tempo_assestamento_2: 20 +tempo_di_test_2: 10 +percentuale_minima_pressione_assestamento_2: 5 +percentuale_massima_pressione_assestamento_2: 5 +pressione_di_test_delta_minimo_2: 30 +pressione_di_test_2: 15000 +pressione_di_test_delta_massimo_2: 30 +tempo_svuotamento_2: 0 +pressione_svuotamento_2: 100 +canale_di_prova_2: 2 +modello_etichetta: EtichettaR5_Montaggio_1prova.prn +pid_pressure_correction: 100 + +[autotest_leak] +enabled: true +pre_filling_time: 0 +pre_filling_pressure: 1000 +filling_time: 10 +settling_time: 10 +settling_pressure_min_percent: 5 +settling_pressure_max_percent: 5 +test_pressure: 5000 +test_time: 10 +test_pressure_qpos: 3 #Q+ Upper test leak limit +test_pressure_qneg: 10 #Q- Lower test leak limit +test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube) +test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube) +flush_time: 1 +flush_pressure: 100 +relay_config: 1 \ No newline at end of file diff --git a/config/machine_settings/st-ten-6.ini b/config/machine_settings/st-ten-6.ini index fb9a248..4e3807f 100644 --- a/config/machine_settings/st-ten-6.ini +++ b/config/machine_settings/st-ten-6.ini @@ -13,22 +13,31 @@ tecna_t3: present vision_saver: absent vision: absent screwdriver: absent +#digital_io: present digital_io_flush_blow: present second_leak_test: present external_flush_blow: present # EXTERNAL BOX CONTROLLING MULTI-CHANNEL TEST (IF PRESENT), BLOW-CLEANING AND EXTERNAL FLUSH dual_channel: present +#fixture_id: present [tecna_t3] port: COM4 model: t3l [neo_pixels] +port: COM6 + +[fixture_rfid] port: COM5 [label_printer] platform: windows printer: zd421 +[digital_io] +# OUTPUT MAP FOR FIXTURE CONNECTOR +id: USB-5860,BID#0 + [digital_io_flush_blow] id: USB-5860,BID#0 # OUTPUT MAP FOR EXTERNAL FLUSH/BLOW UNIT @@ -79,6 +88,7 @@ tempo_svuotamento_2: 1 pressione_svuotamento_2: 100 canale_di_prova_2: 1 modello_etichetta: EtichettaR5_Montaggio_1prova.prn +pid_pressure_correction: 0 [autotest_leak] enabled: true diff --git a/config/machine_settings/test-linux.ini b/config/machine_settings/test-linux.ini new file mode 100644 index 0000000..01e148a --- /dev/null +++ b/config/machine_settings/test-linux.ini @@ -0,0 +1,113 @@ +[machine] +description = TEST-LINUX +#instruction_folder = st-ten-1 +image_for_warning= st-ten-1 + + +[hardware_config] +archive_synchronizer: present +galaxy_camera: absent +uvc_camera: absent +label_printer: present +neo_pixels: absent +remote_api: absent +tecna_t3: present +vision_saver: absent +vision: absent +screwdriver: absent +fixture_id: absent +digital_io: present +external_flush_blow: absent + +[archive_synchronizer] +archive_endpoint: https://dev.r5portal.it/api/st-ten-save/ +status_endpoint: https://dev.r5portal.it/api/device-info-update/ +poll_time: 10 +hold_time: 10 + +[tecna_t3] +port: /dev/ttyUSB0 +model: t3p + +[fixture_rfid] +port: COM5 + +[digital_io] +# OUTPUT MAP FOR VALVE CONTROL UNITS +id: USB-5862,BID#0 +discard_idx:12 # BIT NUMBER OF THE I/0 MODULE USED FOR DISCARD SENSING + +[recipe] +recipe_name_field: codice_ricetta +part_number_field: codice_prodotto +label_template_field: modello_etichetta +description_field: descrizione + +[label_printer] +platform: linux +printer: Zebra_Technologies_ZTC_ZD421-203dpi_ZPL + +[recipes_defaults] +tester_discharge_enable: yes +codice_ricetta: specificare ricetta +cliente: IVECO +part_number: specificare part number +canale_di_prova: 0 +warning_img: +pid_pressure_correction: 105 +dimensione_lotto_abilitata: +n_componenti:1 +istruzione_abilitata: x +numero nastri (n):0 +numero sensori anello (sa):0 +numero sensori presenza (sp):0 + +prova_tenuta_abilitata: x +tempo_pre_riempimento: 0 +pressione_pre_riempimento: 5000 +tempo_riempimento: 5 +tempo_assestamento: 10 +percentuale_minima_pressione_assestamento: 5 +percentuale_massima_pressione_assestamento: 5 +tempo_di_test: 10 +pressione_di_test_delta_minimo: 30 +pressione_di_test: 5000 +pressione_di_test_delta_massimo: 30 +tempo_svuotamento: 1 +pressione_svuotamento: 100 + +prova_tenuta_abilitata_2: +tempo_pre_riempimento_2: 0 +pressione_pre_riempimento_2: 1000 +tempo_riempimento_2: 5 +tempo_assestamento_2: 5 +percentuale_minima_pressione_assestamento_2: 5 +percentuale_massima_pressione_assestamento_2: 5 +tempo_di_test_2: 5 +pressione_di_test_delta_minimo_2: 200 +pressione_di_test_2: 1000 +pressione_di_test_delta_massimo_2: 200 +tempo_svuotamento_2: 1 +pressione_svuotamento_2: 100 + +stampa_etichetta_abilitata: x +modello_etichetta: ETA30x16_203dpi.prn +descrizione: inserire descrizione ricetta + +[autotest_leak] +enabled: true +pre_filling_time: 0 +pre_filling_pressure: 1000 +filling_time: 10 +settling_time: 10 +settling_pressure_min_percent: 5 +settling_pressure_max_percent: 5 +test_pressure: 7000 +test_time: 10 +test_pressure_qpos: 10 #Q+ Upper test leak limit +test_pressure_qneg: 30 #Q- Lower test leak limit +test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube) +test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube) +flush_time: 1 +flush_pressure: 100 +relay_config: 1 \ No newline at end of file diff --git a/config/machine_settings/test-windows.ini b/config/machine_settings/test-windows.ini new file mode 100644 index 0000000..6a5d5e9 --- /dev/null +++ b/config/machine_settings/test-windows.ini @@ -0,0 +1,107 @@ +[machine] +description = TEST-WINDOWS +instruction_folder = st-ten-1 +image_for_warning= st-ten-1 + + +[hardware_config] +archive_synchronizer: absent +galaxy_camera: absent +uvc_camera: absent +label_printer: present +neo_pixels: absent +remote_api: absent +tecna_t3: present +vision_saver: absent +vision: absent +screwdriver: absent +fixture_id: absent +digital_io: absent +external_flush_blow: absent + +[tecna_t3] +port: COM4 +model: t3p + +[fixture_rfid] +port: COM5 + +[digital_io] +# OUTPUT MAP FOR FIXTURE CONNECTOR +id_fixture: USB-5862,BID#0 +discard_idx:12 # BIT NUMBER OF THE I/0 MODULE USED FOR DISCARD SENSING + +[recipe] +recipe_name_field: codice_ricetta +part_number_field: codice_prodotto +label_template_field: modello_etichetta +description_field: descrizione + +[label_printer] +platform: windows +printer: zd421 + +[recipes_defaults] +tester_discharge_enable: yes +codice_ricetta: specificare ricetta +cliente: IVECO +part_number: specificare part number +canale_di_prova: 0 +warning_img: + +dimensione_lotto_abilitata: +n_componenti:1 +istruzione_abilitata: x +numero nastri (n):0 +numero sensori anello (sa):0 +numero sensori presenza (sp):0 + +prova_tenuta_abilitata: x +tempo_pre_riempimento: 0 +pressione_pre_riempimento: 5000 +tempo_riempimento: 5 +tempo_assestamento: 10 +percentuale_minima_pressione_assestamento: 5 +percentuale_massima_pressione_assestamento: 5 +tempo_di_test: 10 +pressione_di_test_delta_minimo: 30 +pressione_di_test: 5000 +pressione_di_test_delta_massimo: 30 +tempo_svuotamento: 1 +pressione_svuotamento: 100 + +prova_tenuta_abilitata_2: +tempo_pre_riempimento_2: 0 +pressione_pre_riempimento_2: 1000 +tempo_riempimento_2: 5 +tempo_assestamento_2: 5 +percentuale_minima_pressione_assestamento_2: 5 +percentuale_massima_pressione_assestamento_2: 5 +tempo_di_test_2: 5 +pressione_di_test_delta_minimo_2: 200 +pressione_di_test_2: 1000 +pressione_di_test_delta_massimo_2: 200 +tempo_svuotamento_2: 1 +pressione_svuotamento_2: 100 + +stampa_etichetta_abilitata: x +modello_etichetta: ETA30x16_203dpi.prn +descrizione: inserire descrizione ricetta + +[autotest_leak] +enabled: true +pre_filling_time: 0 +pre_filling_pressure: 1000 +filling_time: 10 +settling_time: 10 +settling_pressure_min_percent: 5 +settling_pressure_max_percent: 5 +test_pressure: 7000 +test_time: 10 +test_pressure_qpos: 10 #Q+ Upper test leak limit +test_pressure_qneg: 30 #Q- Lower test leak limit +test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube) +test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube) +flush_time: 1 +flush_pressure: 100 +relay_config: 1 \ No newline at end of file diff --git a/designer.sh b/designer.sh index 1fdd748..4062f94 100755 --- a/designer.sh +++ b/designer.sh @@ -1 +1,14 @@ -pyqt5-tools designer +#!/bin/bash + +# Path to your virtual environment +VENV_PATH=/home/edo-neo/PycharmProjects/st-ten-1/venv + +# Set environment variables +export LD_LIBRARY_PATH=$VENV_PATH/lib/python3.11/site-packages/PyQt5/Qt5/lib:/usr/lib/x86_64-linux-gnu +export PYQTDESIGNERPATH=$VENV_PATH/lib/python3.11/site-packages +export PYTHONPATH=$VENV_PATH/bin:$PYTHONPATH +export PATH=$VENV_PATH/bin:$PATH +export QT_PLUGIN_PATH=$VENV_PATH/lib/python3.11/site-packages/PyQt5/Qt5/plugins + +# Execute Qt Designer +$VENV_PATH/lib/python3.11/site-packages/qt5_applications/Qt/bin/designer \ No newline at end of file diff --git a/init.sh b/init.sh index 9b612e6..dc2528c 100755 --- a/init.sh +++ b/init.sh @@ -2,6 +2,7 @@ set -x here="$(realpath "$(dirname "$0")")" cd "$here" +mkdir -p "$here/tmp" echo "---------- initialize venv ----------" sudo apt-get install python3 python3-venv python-is-python3 python3-pip @@ -30,8 +31,6 @@ source "./venv/bin/activate" || source "./venv/Scripts/activate" || : # # echo "deb [arch=amd64 signed-by=/usr/share/keyrings/bazel-archive-keyring.gpg] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list # # sudo apt-get update # sudo apt install -y build-essential docker # bazel libusb-1.0-0-dev libabsl-dev libflatbuffers-dev -# mkdir -p "$here/tmp" -# cd "$here/tmp" # # git clone https://github.com/tensorflow/tensorflow || : # # cd tensorflow # # git pull @@ -61,4 +60,11 @@ source "./venv/bin/activate" || source "./venv/Scripts/activate" || : #python3 setup.py install #cd "$here" +echo "---------- INSTALL ADVANTECH DAQNAVI DRIVER ----------" +cd "$here/tmp" +wget --continue "https://advdownload.advantech.com/productfile/Downloadfile5/1-2MULY66/DAQ_Linux_4.0.11.0_64bit.run" +chmod +x DAQ_Linux_4.0.11.0_64bit.run +sudo ./DAQ_Linux_4.0.11.0_64bit.run + +echo "---------- INIT DONE ----------" cd "$here" diff --git a/make_desktop_file.sh b/make_desktop_file.sh new file mode 100644 index 0000000..14a4fdc --- /dev/null +++ b/make_desktop_file.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Define the temporary file name for the .desktop file +SCRIPT="/tmp/shortcut-$(date +%s).desktop" + +# Create the .desktop file with the required content +echo "[Desktop Entry]" >> $SCRIPT +echo "Version=1.0" >> $SCRIPT +echo "Name=AVVIO PROGRAMMA COLLAUDO" >> $SCRIPT +echo "Comment=Shortcut to AVVIO PROGRAMMA COLLAUDO" >> $SCRIPT +echo "Exec=$HOME/PycharmProjects/st-ten-1/runme.sh" >> $SCRIPT +echo "Icon=$HOME/PycharmProjects/st-ten-1/src/ui/imgs/neo.ico" >> $SCRIPT +echo "Terminal=false" >> $SCRIPT +echo "Type=Application" >> $SCRIPT +echo "Categories=Utility;" >> $SCRIPT + +# Prompt for sudo password and copy the .desktop file to the user's Desktop +sudo cp $SCRIPT "$HOME/Desktop/AVVIO PROGRAMMA COLLAUDO.desktop" + +# Make the .desktop file executable +sudo chmod +x "$HOME/Desktop/AVVIO PROGRAMMA COLLAUDO.desktop" + +# Remove the temporary .desktop file +rm $SCRIPT + +echo "Shortcut created on Desktop" \ No newline at end of file diff --git a/make_desktop_file_noautotest.sh b/make_desktop_file_noautotest.sh new file mode 100644 index 0000000..fccb42f --- /dev/null +++ b/make_desktop_file_noautotest.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Define the temporary file name for the .desktop file +SCRIPT="/tmp/shortcut-$(date +%s).desktop" + +# Create the .desktop file with the required content +echo "[Desktop Entry]" >> $SCRIPT +echo "Version=1.0" >> $SCRIPT +echo "Name=AVVIO PROGRAMMA COLLAUDO" >> $SCRIPT +echo "Comment=Shortcut to AVVIO PROGRAMMA COLLAUDO" >> $SCRIPT +echo "Exec=$HOME/PycharmProjects/st-ten-1/runmenoautotest.sh" >> $SCRIPT +echo "Icon=$HOME/PycharmProjects/st-ten-1/src/ui/imgs/neo_red.ico" >> $SCRIPT +echo "Terminal=false" >> $SCRIPT +echo "Type=Application" >> $SCRIPT +echo "Categories=Utility;" >> $SCRIPT + +# Prompt for sudo password and copy the .desktop file to the user's Desktop +sudo cp $SCRIPT "$HOME/Desktop/AVVIO PROGRAMMA COLLAUDO NO AUTOTEST.desktop" + +# Make the .desktop file executable +sudo chmod +x "$HOME/Desktop/AVVIO PROGRAMMA COLLAUDO NO AUTOTEST.desktop" + +# Remove the temporary .desktop file +rm $SCRIPT + +echo "Shortcut created on Desktop" \ No newline at end of file diff --git a/runmenoautotest.sh b/runmenoautotest.sh new file mode 100755 index 0000000..c0b63c8 --- /dev/null +++ b/runmenoautotest.sh @@ -0,0 +1,4 @@ +#!/bin/bash -e +cd "$(dirname "$0")" +source "./venv/bin/activate" || source "./venv/Scripts/activate" || : +python -O "./src/main.py" --no-edgetpu --no-tflite --no-autotest $* diff --git a/src/components/archive_synchronizer.py b/src/components/archive_synchronizer.py index f68a693..6e22717 100644 --- a/src/components/archive_synchronizer.py +++ b/src/components/archive_synchronizer.py @@ -4,12 +4,15 @@ import re import sys import threading import time +from pathlib import Path + import requests import traceback - import requests from google.api_core.exceptions import Forbidden from google.cloud import storage +from requests import JSONDecodeError + from lib.db import Archive, db from PyQt5.QtCore import QThread from requests.adapters import HTTPAdapter, Retry @@ -18,21 +21,26 @@ from urllib3.exceptions import InsecureRequestWarning from .component import Component # Suppress insecure request warning requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning) + + class ArchiveSynchronizer(Component): - machine_status = "offline" def __init__(self, config=None, name=None, period=1, lazy=True, paused=False, threaded=True): super().__init__(config=config, name=name, period=period, lazy=lazy, paused=paused, threaded=threaded) self.simulate = "--sim-archiver" in sys.argv - self.status= ArchiveSynchronizer.machine_status + self.machine_status = "logged-in" + self.machine_id = None def config_changed(self): self.machine_id = self.config.machine_id if "--dev-portal" in sys.argv: - self.archive_endpoint =f"https://dev.r5portal.it/api/st-ten-save/" + self.archive_endpoint = f"https://dev.r5portal.it/api/st-ten-save/" + self.status_endpoint = f"https://dev.r5portal.it/api/device-info-update/" + self.download_endpoint = f"https://dev.r5portal.it/media/uploads/" else: - self.archive_endpoint = self.config[self.name]["archive_endpoint"] - #self.status_endpoint = f"https://dev.r5portal.it/api/device-info-update?machine-id={self.machine_id_endpoint}&status={self.status}" - # self.images_path = self.config[self.name]["images_path"] + self.download_endpoint = self.config[self.name]["portal_address"] + self.config[self.name]["download_root"] + self.archive_endpoint = self.config[self.name]["portal_address"] + self.config[self.name]["archive_root"] + self.status_endpoint = self.config[self.name]["portal_address"] + self.config[self.name]["status_root"] + self._do_set_period({"period": float(self.config[self.name]["poll_time"])}) self.hold_time = round(float(self.config[self.name]["hold_time"]) * 1000) self.gcs_client = storage.Client.from_service_account_json(self.config[self.name]["service_account_json"]) @@ -55,46 +63,69 @@ class ArchiveSynchronizer(Component): if self.hold_time > 0: QThread.msleep(self.hold_time) self.gcs_bucket = None - if "--dev-portal" in sys.argv: - self.update_machine_status() + + # UPDATE MACHINE STATUS + self.machine_status="working" + super()._get() + self.update_machine_status() def update_machine_status(self): - self.status = ArchiveSynchronizer.machine_status - #print(f"machine_status_global: {ArchiveSynchronizer.machine_status}") # TESTING - self.status_endpoint = f"https://dev.r5portal.it/api/device-info-update?machine-id={self.machine_id.upper()}&status={self.status}" - - if self.status not in ["working", "logged-in", "logged-out"]: - status_dict = {"last_status": "offline"} - else: - status_dict = {"last_status": self.status} + status_call = f"{self.status_endpoint}?machine-id={self.machine_id.upper()}&status={self.machine_status}" response = None try: if not self.simulate: with requests.Session() as s: s.mount("", HTTPAdapter(max_retries=Retry(total=0))) # this disables retries - response = requests.post(self.status_endpoint, json=status_dict, timeout=5, verify=False) + response = s.post(status_call, timeout=5, verify=False) if response.status_code != 200: raise AssertionError("bad status response") + else: + self.parse_response_and_execute(response) except AssertionError as e: self.log.warning( - f"Status: {self.status}: failed to update machine status: {str(e)}: {response.status_code if response else 'no response'}: {response.content if response else 'no response'}" + f"Status: {self.machine_status}: failed to update machine status: {str(e)}: {response.status_code if response else 'no response'}: {response.content if response else 'no response'}" ) return False except (requests.ConnectionError, requests.Timeout) as e: self.log.warning( - f"Status: {self.status}: failed to update machine status, archive_endpoint might be unreachable: {str(e)}" + f"Status: {self.machine_status}: failed to update machine status, archive_endpoint might be unreachable: {str(e)}" ) return False except Exception: self.log.error( - f"Status: {self.status}: failed to update machine status:\n{traceback.format_exc()}:\n{response.status_code if response else 'no response'}: {response.content if response else 'no response'}" + f"Status: {self.machine_status}: failed to update machine status:\n{traceback.format_exc()}:\n{response.status_code if response else 'no response'}: {response.content if response else 'no response'}" ) return False - self.log.info(f"Status: {self.status}: Machine Status Updated Successfully") + self.log.info(f"Status: {self.machine_status}: Machine Status Updated Successfully") return True + + def parse_response_and_execute(self, response): + try: + data = response.json() + if not isinstance(data, dict): + raise ValueError("Parsed response is not a dictionary") + + actions = data.get("ACTIONS_TO_DO", []) + + # Ensure actions is a list + if isinstance(actions, dict): + actions = [actions] + + for action in actions: + remote_path = action.get("remote_path") + local_path = action.get("local_path") + self.log.info(f"Executing remote fetch with remote_path: {remote_path} and local_path: {local_path}") + result = self.remote_fetch(remote_path=remote_path, local_path=local_path) + self.log.info(f"Remote fetch result: {result}") + + except json.JSONDecodeError: + self.log.error("Failed to decode JSON response") + except Exception as e: + self.log.error(f"An unexpected error occurred while parsing response: {str(e)}") + def remote_archive(self, record): r = None try: @@ -153,3 +184,63 @@ class ArchiveSynchronizer(Component): self.log.error(f"id: {record.id}: failed to store remotely:\n{traceback.format_exc()}") self.log.info(f"id: {record.id}: stored remotely") return True + + def remote_fetch(self, remote_path=None, local_path=None): + """ + download a single file from the server. + + :param remote_path: path of where to download the file from + :param local_path: path of where to save the file to + :return: a dictionary with errors if any occur. + """ + if remote_path is None: + raise ValueError("remote_path cannot be None") + if local_path is None: + raise ValueError("local_path cannot be None") + + call_url = f"https://dev.r5portal.it/{remote_path}" + try: + if not self.simulate: + with requests.Session() as s: + self.log.info(f"Fetching file from: {call_url}") + + # Make the HTTP GET request to fetch the file + response = s.get(call_url, timeout=5, verify=False) + + # Log response details + self.log.info(f"HTTP Status Code: {response.status_code}") + #self.log.info(f"Response Headers: {response.headers}") + #self.log.info(f"Response Content: {response.content}") + + # Handle HTTP errors + if response.status_code == 404: + self.log.warning(f"File not found: {call_url}. Please check the URL path.") + return {"error": "File not found"} + elif response.status_code == 403 or response.status_code == 401: + self.log.warning(f"Access forbidden or not logged in for file: {call_url}") + return {"error": "Access forbidden or not logged in"} + elif response.status_code != 200: + self.log.error(f"Unexpected HTTP response status: {response.status_code} for URL: {call_url}") + return {"error": "Unexpected HTTP response status"} + + # Ensure the directory exists + os.makedirs(local_path, exist_ok=True) + + # Save the file to the local path + local_file_path = os.path.join(local_path, os.path.basename(remote_path)) + with open(local_file_path, "wb") as f: + f.write(response.content) + + self.log.info(f"File downloaded successfully: {local_file_path}") + return {"downloaded_file": local_file_path} + + except requests.ConnectionError as e: + self.log.error(f"Connection error occurred while fetching the file: {str(e)}") + return {"error": "Connection error"} + except requests.Timeout as e: + self.log.error(f"Timeout error occurred while fetching the file: {str(e)}") + return {"error": "Timeout error"} + except Exception as e: + self.log.error(f"An unexpected error occurred: {str(e)}") + return {"error": "Unexpected error"} + diff --git a/src/components/modbus_component.py b/src/components/modbus_component.py index 1c34453..a4cbe35 100644 --- a/src/components/modbus_component.py +++ b/src/components/modbus_component.py @@ -1,5 +1,8 @@ import sys import traceback +import warnings + +from PyQt5.QtWidgets import QMessageBox if "--sim-serial" in sys.argv: from components.dummies.serial import serial @@ -48,7 +51,10 @@ class ModbusComponent(Component): strict=False, ) if not self.client.connect(): - raise ConnectionError("device not reachable (could not connect): {} ({})".format(self.name, self.port)) + QMessageBox.critical(None, "ERRORE", f"ERRORE TECNA - VERIFICARE CONNESSIONE USB") + exit(-1) + #raise ConnectionError("device not reachable (could not connect): {} ({})".format(self.name, self.port)) + if not self.client.is_socket_open(): raise ConnectionError("device not reachable (socket not open): {} ({})".format(self.name, self.port)) self.lock.unlock() diff --git a/src/components/tecna_marposs_provaset_t3.py b/src/components/tecna_marposs_provaset_t3.py index 201e681..617f7a6 100644 --- a/src/components/tecna_marposs_provaset_t3.py +++ b/src/components/tecna_marposs_provaset_t3.py @@ -1,4 +1,4 @@ -from lib.db import Recipes, Steps, db +from lib.db import Recipes, db from PyQt5.QtCore import QSemaphore, pyqtSignal from PyQt5.QtWidgets import QMessageBox @@ -333,7 +333,7 @@ class TecnaMarpossProvasetT3(ModbusComponent): recipes = [] for recipe in list(Recipes.select().order_by(Recipes.name.asc())): # if recipe.spec["leak_1"]: - recipes.append([recipe, Steps.get_by_id(recipe.spec["available_steps"]["leak_1"])]) + recipes.append([recipe, recipe.spec["steps"]["leak_1"]]) # reverve last for our recipe control if len(recipes) > max(self.max_program_number - 1, 0): self.log.warning(f"too many recipes ({len(recipes)}), saving only first {max(self.max_program_number - 1, 0)}") @@ -360,3 +360,89 @@ class TecnaMarpossProvasetT3(ModbusComponent): self.write_recipe(recipe, step, table=i) self.log.info(f"saved {min(len(recipes), max(self.max_program_number - 1, 0))} recipes") self._store_recipes_lock.release(1) + + # SELECT & READ RECIPE FROM TECNA MEMORY + + def read_recipe(self, recipe_number): + spec = { + **{(719 - 1 + i) : f"R{i}" for i in range(8)}, + **{(727 - 1 + i) : f"C{i}" for i in range(12)}, + **{(761 - 1 + i) : f"F1_{i}" for i in range(8)}, + **{(769 - 1 + i) : f"F2_{i}" for i in range(8)}, + "T0 - Pre-filling time": "pre_filling_time", + "P0 - Pre-filling pressure": "pre_filling_pressure", + "T1 - Filling time": "filling_time", + "T2 - Settling time": "settling_time", + "PR- - Min pressure tolerance %": "settling_pressure_min_percent", + "PR+ - Max pressure tolerance % (P+)": "settling_pressure_max_percent", + "T3 - Measure time": "test_time", + "Q- Lower test leak limit": "test_pressure_qneg", + "Q+ Upper test leak limit": "test_pressure_qpos", + "FST - Discharge time": "flush_time", + "FSL - Discharge limit": "flush_pressure", + "Print options": "print_options" + } + if self.model == "t3p": + spec.update({ + "PREL - Nominal test pressure": "test_pressure", + }) + elif self.model == "t3l": + spec.update({ + "PREL - Nominal test pressure": "test_pressure", + }) + else: + raise NotImplementedError(f"tecna t3 model {self.model!r} not implemented.") + + # SET RECIPE NUMBER + #self.write("Source of test program number selection", "FROM PARAMETER (SET BY LCD OR SERIAL LINE)") + #self.write("Selected program", recipe_number) + self.write("Test program for read/write operation", recipe_number) + + recipe_data = {} + # READ ALL PARAMETERS + for register_name, field_name in spec.items(): + recipe_data[field_name] = self.read(register_name) + recipe_name=self.int_array_to_str([recipe_data[f"R{wn}"] for wn in range(8)]) + recipe_code=self.int_array_to_str([recipe_data[f"C{wn}"] for wn in range(12)]) + recipe_f1=self.int_array_to_str([recipe_data[f"F1_{wn}"] for wn in range(8)]) + recipe_f2=self.int_array_to_str([recipe_data[f"F2_{wn}"] for wn in range(8)]) + recipe_data["recipe_name"]=recipe_name + recipe_data["recipe_code"]=recipe_code + recipe_data["recipe_f1"]=recipe_f1 + recipe_data["recipe_f2"]=recipe_f2 + recipe_data["print_template"] = int(recipe_data["print_options"] & 0xFF) + if self.model == "t3p": + recipe_data["test_time"]=int(recipe_data["test_time"]/10) + recipe_data["pre_filling_time"] = int(recipe_data["pre_filling_time"] / 10) + recipe_data["filling_time"] = int(recipe_data["filling_time"] / 10) + recipe_data["settling_time"] = int(recipe_data["settling_time"] / 10) + recipe_data["test_pressure_qneg"] = int(recipe_data["test_pressure_qneg"] / 100) + recipe_data["test_pressure_qpos"] = int(recipe_data["test_pressure_qpos"] / 100) + + return recipe_data + + @staticmethod + def int_array_to_str(arr): + """ + Translates an array of 16-bit integers, where each integer contains 2 ASCII characters, + into a string. + + Args: + arr: The array of 16-bit integers. + + Returns: + The translated string. + """ + result = "" + for value in arr: + char1 = chr(value & 0xFF) + char2 = chr(value >> 8) + + # Stop if we encounter a null byte + if char1 == '\0': + break + result+=char1 + if char2 == '\0': + break + result+=char2 + return result diff --git a/src/components/usb_586x.py b/src/components/usb_586x.py index c4a954b..93d0272 100644 --- a/src/components/usb_586x.py +++ b/src/components/usb_586x.py @@ -9,21 +9,14 @@ from PyQt5.QtWidgets import QMessageBox, QApplication from .component import Component -is_win = platform.system().lower() == "windows" - if "--sim-io" not in sys.argv: - if is_win: - from components.Automation.BDaq import * - from components.Automation.BDaq.InstantDoCtrl import InstantDoCtrl - from components.Automation.BDaq.InstantDiCtrl import InstantDiCtrl - else: - libbiodaq = ctypes.CDLL("/opt/advantech/libs/libbiodaq.so") + from components.Automation.BDaq import * + from components.Automation.BDaq.InstantDoCtrl import InstantDoCtrl + from components.Automation.BDaq.InstantDiCtrl import InstantDiCtrl else: from components.dummies.Automation.BDaq import * from components.dummies.Automation.BDaq.InstantDoCtrl import InstantDoCtrl from components.dummies.Automation.BDaq.InstantDiCtrl import InstantDiCtrl - #is_win=False - #import components.dummies.libbiodaq as libbiodaq from components.dummies.libbiodaq import ErrorCode class USB_586x(Component): @@ -44,7 +37,7 @@ class USB_586x(Component): self.mutex = QMutex() self.simulate="--sim-io" in sys.argv # DEVICE INFORMATION - self.id=config["digital_io"]["id"] + self.id=config[self.name]["id"] if "5860" in self.id: self.type = "5860" self.in_size = 1 @@ -77,52 +70,19 @@ class USB_586x(Component): # DIGITAL I/O CLASS if not self.simulate: self.log.info("OPENING USB MODULE...") - if is_win: - try: - self.di_ctrl = InstantDiCtrl(self.info.Description) - self.do_ctrl = InstantDoCtrl(self.info.Description) - self.di_read = self.di_ctrl.readAny - self.do_write_bit = self.do_ctrl.writeBit - self.buffer = ctypes.create_string_buffer(2) - self.io_ok=True - except ValueError: - QMessageBox.critical(None, "ERRORE", f"ERRORE I/O DIGITALE - VERIFICARE CONNESSIONE USB") - exit(-1) - self.io_ok = False - - time.sleep(1) - else: - self.di_create = libbiodaq.AdxInstantDiCtrlCreate - self.di_create.restype = ctypes.c_void_p - self.di_setSelectedDevice = libbiodaq.InstantDiCtrl_setSelectedDevice - self.di_setSelectedDevice.argtypes = [ctypes.c_void_p, ctypes.POINTER(self.DeviceInformation)] - self.di_setSelectedDevice.restype = ctypes.c_uint32 - # DIGITAL INPUTS READ FUNCTION - self.di_read = libbiodaq.InstantDiCtrl_ReadAny - self.di_read.argtypes = [ctypes.c_void_p, ctypes.c_int32, ctypes.c_int32, ctypes.c_char_p] - self.di_read.restype = ctypes.c_int32 - # DIGITAL OUTPUTS CLASS - self.do_create = libbiodaq.AdxInstantDoCtrlCreate - self.do_create.restype = ctypes.c_void_p - # SET SELECTED DEVICE - self.do_setSelectedDevice = libbiodaq.InstantDoCtrl_setSelectedDevice - self.do_setSelectedDevice.argtypes = [ctypes.c_void_p, ctypes.POINTER(self.DeviceInformation)] - self.do_setSelectedDevice.restype = ctypes.c_uint32 - # get ports - self.get_ports = libbiodaq.InstantDoCtrl_getPortDirection - self.get_ports.argtypes = [ctypes.c_void_p] - self.get_ports.restype = ctypes.POINTER(ctypes.c_void_p) - # DIGITAL OUTPUTS WRITE FUNCTION - self.do_write_bit = libbiodaq.InstantDoCtrl_WriteBit - self.do_write_bit.argtypes = [ctypes.c_void_p, ctypes.c_int32, ctypes.c_int32, ctypes.c_char] - self.do_write_bit.restype = ctypes.c_int32 + try: + self.di_ctrl = InstantDiCtrl(self.info.Description) + self.do_ctrl = InstantDoCtrl(self.info.Description) + self.di_read = self.di_ctrl.readAny + self.do_write_bit = self.do_ctrl.writeBit self.buffer = ctypes.create_string_buffer(2) - # INIT OBJECTS - self.di_ctrl = self.di_create() - self.do_ctrl = self.do_create() - self.di_init_status = self.di_setSelectedDevice(self.di_ctrl, ctypes.byref(self.info)) - self.do_init_status = self.do_setSelectedDevice(self.do_ctrl, ctypes.byref(self.info)) - self.io_ok = True + self.io_ok=True + except ValueError: + QMessageBox.critical(None, "ERRORE", f"ERRORE I/O DIGITALE - VERIFICARE CONNESSIONE USB") + exit(-1) + self.io_ok = False + + time.sleep(1) else: self.di_ctrl = InstantDiCtrl(self.info.Description) self.do_ctrl = InstantDoCtrl(self.info.Description) @@ -177,38 +137,30 @@ class USB_586x(Component): max_retry = 3 while retry < max_retry: - if is_win or self.simulate: - if self.simulate: - read = self.sim_in + if self.simulate: + read = self.sim_in + break + else: + if self.io_ok: + ret = self.di_read(0, self.in_size) + if ret[0].value == ErrorCode.Success.value: + self.buffer = ret[1] + for byte_num in range(len(self.buffer)): + byte = self.buffer[byte_num] + read.append([bool(byte & m) for m in self.masks]) + else: + self.buffer = None + self.log.error(f"READ ERROR") + self.di_ctrl.dispose() + self.do_ctrl.dispose() + self.io_ok = False + + + if self.io_ok: break else: - if self.io_ok: - ret = self.di_read(0, self.in_size) - if ret[0].value == ErrorCode.Success.value: - self.buffer = ret[1] - for byte_num in range(len(self.buffer)): - byte = self.buffer[byte_num] - read.append([bool(byte & m) for m in self.masks]) - else: - self.buffer = None - self.log.error(f"READ ERROR") - self.di_ctrl.dispose() - self.do_ctrl.dispose() - self.io_ok = False - - - if self.io_ok: - break - else: - time.sleep(1) - self.open_device() - else: - self.di_read(self.di_ctrl, 0, self.in_size, self.buffer) - - for byte_num in range(len(self.buffer)): - byte = int.from_bytes(self.buffer[byte_num], "little") - read.append([bool(byte & m) for m in self.masks]) - + time.sleep(1) + self.open_device() self.mutex.unlock() return read @@ -239,10 +191,7 @@ class USB_586x(Component): # print("set", byte, bit, not val, flush=True) if self.io_ok: if not self.simulate: - if is_win: - ret=self.do_write_bit(byte, bit, int(val)) - else: - ret=self.do_write_bit(self.do_ctrl, byte, bit, int(val)) + ret=self.do_write_bit(byte, bit, int(val)) else: ret = ErrorCode.Success diff --git a/src/lib/db/__init__.py b/src/lib/db/__init__.py index fb0510d..bad5971 100644 --- a/src/lib/db/__init__.py +++ b/src/lib/db/__init__.py @@ -6,13 +6,12 @@ import re from playhouse.sqlite_ext import JSONField -from .models import Archive, Log, Recipes, Session, Steps, Users, db +from .models import Archive, Log, Recipes, Session, Users, db models_reference = { "archive": Archive, "log": Log, "recipes": Recipes, - "steps": Steps, "users": Users, } @@ -49,57 +48,6 @@ def init_db(): except FileNotFoundError: pass - # try: - # with open("src/lib/db/imports/connectors.csv", "r") as f: - # log.info("importing connectors") - # reader = csv.DictReader(f) - # count = 0 - # for row in reader: - # steps = {} - # for step_type, step_spec in { - # "connector": {"connector": row["connector"]}, - # "barcodes": {"serial": ""}, - # "resistance": {"scale": 500, "expected": float(row["resistance_expected"]), "tolerance": float(row["resistance_tolerance"])}, - # "leak_1": {"pre_filling_time": 1, "pre_filling_pressure": 1000, "filling_time": 1, "settling_time": 1, "settling_pressure_min_percent": 5, "settling_pressure_max_percent": 5, "test_time": 5, "test_pressure_qneg": 100, "test_pressure": 1000, "test_pressure_qpos": 100, "flush_time": 1, "flush_pressure": 100}, - # "leak_2": {"pre_filling_time": 1, "pre_filling_pressure": 1000, "filling_time": 1, "settling_time": 1, "settling_pressure_min_percent": 5, "settling_pressure_max_percent": 5, "test_time": 5, "test_pressure_qneg": 100, "test_pressure": 1000, "test_pressure_qpos": 100, "flush_time": 1, "flush_pressure": 100}, - # "vision": {"recipe": "termorestringente_923578.ini"}, - # "print": {"template": "EtichettaR5.prn", }, - # }.items(): - # steps[step_type] = Steps( - # type=re.sub(r"^(.*)_[0-9]+$", r"\1", step_type), - # spec=step_spec, - # ) - # steps[step_type].save(force_insert=True) - # recipe = Recipes( - # name=row["name"], - # client=row["client"], - # part_number=row["part_number"], - # spec={ - # "connector": True, - # "barcodes": True, - # "resistance": True, - # "leak_1": False, - # "leak_2": False, - # "vision": False, - # "print": True, - # "steps": [steps["connector"].name, steps["resistance"].name, steps["print"].name, ], # pks of the enabled steps - # "available_steps": { - # "connector": steps["connector"].name, - # "barcodes": steps["barcodes"].name, - # "resistance": steps["resistance"].name, - # "leak_1": steps["leak_1"].name, - # "leak_2": steps["leak_2"].name, - # "vision": steps["vision"].name, - # "print": steps["print"].name, - # }, - # }, - # ) - # recipe.save(force_insert=True) - # count += 1 - # log.info(f"connectors: imported {count} rows.") - # except FileNotFoundError: - # pass - init_db() diff --git a/src/lib/db/models/__init__.py b/src/lib/db/models/__init__.py index ee3118a..d26cab3 100644 --- a/src/lib/db/models/__init__.py +++ b/src/lib/db/models/__init__.py @@ -2,5 +2,4 @@ from .archive import Archive from .base_model import db from .log import Log from .recipes import Recipes -from .steps import Steps from .users import Session, Users diff --git a/src/lib/db/models/recipes.py b/src/lib/db/models/recipes.py index 14c7ccc..fb0e37a 100644 --- a/src/lib/db/models/recipes.py +++ b/src/lib/db/models/recipes.py @@ -1,49 +1,40 @@ +import json from uuid import uuid4 as uuid from peewee import BooleanField, TextField from playhouse.sqlite_ext import JSONField from .base_model import BaseModel -from .steps import Steps +from ...helpers.step import Step class Recipes(BaseModel): name = TextField(primary_key=True, unique=True, null=False, default=lambda: uuid().hex) client = TextField(null=True) part_number = TextField(null=False) - spec = JSONField(null=False) # keys inside spec must not overlap withthe model + spec = JSONField(null=False) description = TextField(null=True) archived = BooleanField(null=False, default=False) def get_steps(self): steps = [] - for step_pk in self.spec.get("steps", []): - steps.append(Steps.get_by_id(step_pk)) + for step_name, enabled in self.spec.items(): + if enabled in (True, 1): + steps.append(Step(step_type=step_name,spec=self.spec["steps"][step_name])) return steps - def delete_associated_steps(self): - return Steps.delete().where(Steps._meta.primary_key << list(self.spec.get("available_steps", {}).values())).execute() - def get_steps_map(self): steps = {} - for step_name, step_pk in self.spec.get("available_steps", {}).items(): - steps[step_name] = Steps.get_by_id(step_pk) + for step_name, step_pk in self.spec.get("steps", {}).items(): + steps[step_name] = Step(step_type=step_name,spec=self.spec["steps"][step_name]) return steps @classmethod def crud_delete(cls, deleted_rows): - # return cls.delete().where(self._meta.primary_key << deleted_rows).execute() recipes = list(cls.select().where(cls._meta.primary_key << deleted_rows).execute()) for recipe in recipes: - recipe.delete_associated_steps() recipe.delete_instance() return len(recipes) - # @classmethod - # def delete(cls, *args, **kwargs): - # # OVERRIDE DELETION - # # so that deleting a user will only archive it - # return cls.update(archived=True) - class Meta: table_name = "recipes" diff --git a/src/lib/db/models/steps.py b/src/lib/db/models/steps.py deleted file mode 100644 index 4baa839..0000000 --- a/src/lib/db/models/steps.py +++ /dev/null @@ -1,23 +0,0 @@ -from uuid import uuid4 as uuid - -from peewee import BooleanField, TextField -from playhouse.sqlite_ext import JSONField - -from .base_model import BaseModel - - -class Steps(BaseModel): - name = TextField(primary_key=True, unique=True, null=False, default=lambda: uuid().hex) - type = TextField(null=False) - spec = JSONField(null=False) # keys inside spec must not overlap withthe model - description = TextField(null=True) - archived = BooleanField(null=False, default=False) - - # @classmethod - # def delete(cls, *args, **kwargs): - # # OVERRIDE DELETION - # # so that deleting a user will only archive it - # return cls.update(archived=True) - - class Meta: - table_name = "steps" diff --git a/src/lib/helpers/step.py b/src/lib/helpers/step.py new file mode 100644 index 0000000..9429943 --- /dev/null +++ b/src/lib/helpers/step.py @@ -0,0 +1,8 @@ + + +class Step(object): + step_type = None + spec = {} + def __init__(self,step_type=None,spec=dict): + self.step_type = step_type + self.spec = spec diff --git a/src/main.py b/src/main.py index 90c30a0..5ae3806 100644 --- a/src/main.py +++ b/src/main.py @@ -279,7 +279,7 @@ try: app = QApplication(sys.argv) with SingleProcess() as single_process_lock: - if not single_process_lock: + if not single_process_lock and "--no-lock" not in sys.argv: logging.error(f"Program already opened, exiting...") QMessageBox.critical(None, "ERRORE", "IL PROGRAMMA E' GIA' IN ESECUZIONE") exit(0) diff --git a/src/requirements.txt b/src/requirements.txt index 214557b..72f5f29 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -10,9 +10,9 @@ opencv-python-headless peewee pillow pycoral -pymodbus +pymodbus~=3.6.8 pyqt5 -pyqt5-tools +#pyqt5-tools pyserial pyserial-asyncio qrcode diff --git a/src/scripts/print_labels.py b/src/scripts/print_labels.py index 0c39fb0..da03acc 100644 --- a/src/scripts/print_labels.py +++ b/src/scripts/print_labels.py @@ -6,24 +6,24 @@ from PyQt5.QtWidgets import QApplication from src.components.os_label_printer import * from src.lib.helpers import ConfigReader -SYSTEM_ID = "ST-TEN-1" +SYSTEM_ID = "test-windows" START_SN=1 -STOP_SN=40 -TEMPLATE="ferrari_30x16_203.prn" -PRINTER_NAME="Zebra_Technologies_ZTC_ZD421-203dpi_ZPL" - +STOP_SN=6 +TEMPLATE="ferrari_flag_qr_only.prn" +PRINTER_NAME="zd421" +PN="055015378" config = ConfigReader(system_id=SYSTEM_ID) -config["label_printer"]["printer"] = PRINTER_NAME printer=Os_Label_Printer(config=config,name="label_printer") -timenow = datetime.now() +# timenow = datetime.now() app = QApplication(sys.argv) for sn in range(START_SN,STOP_SN+1): + timenow = datetime.now() print(f"PRINTING LABEL # {sn}") context = { # RECIPE DATA - "PART": "000825276", + "PART": PN, # SERIAL DEFINITION "SN": str(sn), "SN4": f"{sn:0>4}", diff --git a/src/scripts/print_labels_csv.py b/src/scripts/print_labels_csv.py new file mode 100644 index 0000000..e126191 --- /dev/null +++ b/src/scripts/print_labels_csv.py @@ -0,0 +1,54 @@ +import csv +import time +from datetime import datetime + +from PyQt5.QtWidgets import QApplication + +from src.components.os_label_printer import * +from src.lib.helpers import ConfigReader + +SYSTEM_ID = "test-linux" +CSV_PATH="tmp/ferrari_labels5.csv" +TEMPLATE="ferrari_flag_qr_only.prn" +config = ConfigReader(system_id=SYSTEM_ID) +printer=Os_Label_Printer(config=config,name="label_printer") + + +# timenow = datetime.now() +app = QApplication(sys.argv) + +with open(CSV_PATH, "r", encoding="utf-8-sig") as f: + reader = csv.DictReader(f) + for row in reader: + START_SN = 1 + STOP_SN = int(row["quantity"]) + PN = row["part_number"] + print(f"PART NUMBER # {PN}") + input("Press Enter to continue...") + for sn in range(START_SN,STOP_SN+2): + timenow = datetime.now() + print(f"PRINTING LABEL # {sn}") + context = { + # RECIPE DATA + "PART": PN, + # SERIAL DEFINITION + "SN": str(sn), + "SN4": f"{sn:0>4}", + "SN5": f"{sn:0>5}", + "SN6": f"{sn:0>6}", + # TIME DEFINITION + "DATETIME": timenow.strftime("%d/%m/%Y %H:%M:%S"), + "DATE": timenow.strftime("%d/%m/%Y"), + "TIME": timenow.strftime("%H:%M:%S"), + "YYYY": timenow.strftime("%Y"), + "YY": timenow.strftime("%y"), + "MO": timenow.strftime("%m"), + "DD": timenow.strftime("%d"), + "HH": timenow.strftime("%H"), + "MI": timenow.strftime("%M"), + "SS": timenow.strftime("%S"), + "JJJ": timenow.strftime("%j"), + } + printer.print_label(TEMPLATE,context) + + time.sleep(1) \ No newline at end of file diff --git a/src/scripts/save_tecna_recipes_to_csv.py b/src/scripts/save_tecna_recipes_to_csv.py new file mode 100644 index 0000000..2d41a96 --- /dev/null +++ b/src/scripts/save_tecna_recipes_to_csv.py @@ -0,0 +1,211 @@ +#!/usr/bin/env python3 +import argparse +import csv +import faulthandler +import logging +import os +import platform +import signal +import sys +sys.argv.append("--sim-io") +#sys.argv.append("--system-id=test-windows") + +if platform.system().lower() == "windows": + sys.path.append(f"{os.getcwd()}\src\components") + sys.path.append(f"{os.getcwd()}\src") +else: + sys.path.append(f"{os.getcwd()}/src/components") + +import traceback +import weakref +from datetime import datetime +from pathlib import Path +from ui.diagnostics import Diagnostics +from lib.helpers.single_process import SingleProcess + + +app = None + +parser = argparse.ArgumentParser(prog='ST-TEN', description='Leak test system') +parser.add_argument('-s', '--system-id') +args, unspec = parser.parse_known_args() + +def quit_app(signalnum=None, handler=None): + logging.info(f"quitting app. signal: {signalnum!r}, handler: {handler!r}") + global app + if app is not None: + app.quit() + quit() + + +# SETUP QUITTING ON CTRL+C +signal.signal(signal.SIGINT, quit_app) + +# SETUP FAULTHANDLER +faulthandler.enable(file=sys.stderr, all_threads=True) + +# SETUP LOGS +logs_dir = Path(".") / "data" / "logs" +os.makedirs(logs_dir, exist_ok=True) +logging.basicConfig( + format="{asctime}:{name}:{levelname}:{message}", + datefmt="%Y-%m-%d_%H-%M-%S", + style="{", + level="DEBUG" if "--debug" in sys.argv else "INFO", + handlers=[ + logging.StreamHandler(stream=sys.stderr), + logging.FileHandler( + logs_dir / f"{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log", + mode="a", + encoding="utf-8", + delay=False, + **({"errors": "surrogateescape"} if sys.version_info.major >= 3 and sys.version_info.minor >= 10 else {}), + ), + ], + force=True, + **({"encoding": "utf-8"} if sys.version_info.major >= 3 and sys.version_info.minor >= 10 else {}), + **({"errors": "surrogateescape"} if sys.version_info.major >= 3 and sys.version_info.minor >= 10 else {}), +) + +try: + # IMPORT PROJECT ONLY AFTER SETTING UP SIGNAL, FAULTHANDLER AND LOGGING + from components import TecnaMarpossProvasetT3 + from lib.db import Users + from lib.helpers import ConfigReader + from PyQt5.QtCore import QObject, QThread, pyqtSignal, pyqtSlot + from PyQt5.QtWidgets import QApplication, QMessageBox, QFileDialog + from ui import About, Archive, Login, Main_Window, Test, Users_Management, Recipe_Selection, \ + Barcode_Recipe_Selection + + + + class Main(QObject): + + def __init__(self, parent=None): + # print(f"MAIN {int(QThread.currentThreadId())}", flush=True) + super().__init__() + self.recipes = None + try: + # READ CONFIG + + system_id = args.system_id if "system_id" in args else None + + self.config = ConfigReader(system_id=system_id) + logging.info(f"STARTING SESSION ON MACHINE {self.config['machine']['description']}") + # INIT COMPONENT + self.components_specs = { + "tecna_t3": {"c": TecnaMarpossProvasetT3, "k": {"paused": True}}, + } + + self.components = {} + self.threads = {} + for component_name, spec in self.components_specs.items(): + self.components[component_name] = spec["c"](*spec.get("a", []), config=self.config, + name=component_name, **spec.get("k", {})) + if spec.get("t", True): + self.threads[component_name] = QThread() + self.threads[component_name].setTerminationEnabled(True) + self.components[component_name].moveToThread(self.threads[component_name]) + + for component_name, thread in self.threads.items(): + component = self.components[component_name] + thread.started.connect(component.start) + thread.start() + # DEBUGGER WORKAROUND + QApplication.processEvents() + QThread.msleep(1000) + QApplication.processEvents() + component.wait_completion() + + except Exception as e: + logging.exception(traceback.format_exc()) + QMessageBox.critical(None, "Errore", f"Errore di avvio del programma di collaudo:\n\n{e}") + quit() + + def read_recipes(self): + self.recipes = {} + max_num_recipes=self.components["tecna_t3"].max_program_number + max_num_recipes=300 + logging.info(f"NUMBER OF RECIPES TO BE READ: {max_num_recipes}") + for recipe_num in range(1, max_num_recipes+1): + logging.info(f"READING RECIPE #{recipe_num}") + self.recipes[recipe_num] = self.components["tecna_t3"].read_recipe(recipe_num) + + def export_recipes(self, csv_path=None): + if csv_path is None: + csv_path, _ = QFileDialog.getSaveFileName( + None, + "Esportazione ricette", + "ricette.csv", + "CSV data (*.csv);;All Files (*)", + ) + csv_path = str(csv_path) + if not len(csv_path): + return + if not csv_path.lower().endswith(".csv"): + csv_path += ".csv" + csv_dir = os.path.dirname(csv_path) + if len(csv_dir): + os.makedirs(csv_dir, exist_ok=True) + data = [] + fieldnames = [ + "codice_ricetta", + "part_number", + "tempo_pre_riempimento", + "pressione_pre_riempimento", + "tempo_riempimento", + "tempo_assestamento", + "percentuale_minima_pressione_assestamento", + "percentuale_massima_pressione_assestamento", + "tempo_di_test", + "pressione_di_test_delta_minimo", + "pressione_di_test", + "pressione_di_test_delta_massimo", + "tempo_svuotamento", + "pressione_svuotamento", + "template_di_stampa", + "campo1", + "campo2" + ] + for num,recipe in self.recipes.items(): + exportable = { + "codice_ricetta": recipe["recipe_name"], + "part_number": recipe["recipe_code"], + "campo1": recipe["recipe_f1"], + "campo2": recipe["recipe_f2"], + "tempo_pre_riempimento": recipe["pre_filling_time"], + "pressione_pre_riempimento": recipe["pre_filling_pressure"], + "tempo_riempimento": recipe["filling_time"], + "tempo_assestamento": recipe["settling_time"], + "percentuale_minima_pressione_assestamento": recipe["settling_pressure_min_percent"], + "percentuale_massima_pressione_assestamento": recipe["settling_pressure_max_percent"], + "tempo_di_test": recipe["test_time"], + "pressione_di_test_delta_minimo": recipe["test_pressure_qneg"], + "pressione_di_test": recipe["test_pressure"], + "pressione_di_test_delta_massimo": recipe["test_pressure_qpos"], + "tempo_svuotamento": recipe["flush_time"], + "pressione_svuotamento": recipe["flush_pressure"], + "template_di_stampa": recipe["print_template"], + } + data.append(exportable) + if len(data): + logging.info(f"recipes: exporting recipes to {csv_path}") + with open(csv_path, "w", newline="") as f: + w = csv.DictWriter(f, fieldnames, extrasaction="ignore") + w.writeheader() + w.writerows(data) + logging.info(f"recipes: exported {len(data)} rows.") + + + if __name__ == "__main__": + app = QApplication(sys.argv) + + with SingleProcess() as single_process_lock: + + main = Main() + main.read_recipes() + main.export_recipes() + + +except Exception: + logging.exception(traceback.format_exc()) diff --git a/src/test/data/database/sqlite.db b/src/test/data/database/sqlite.db new file mode 100644 index 0000000..e0b04d9 Binary files /dev/null and b/src/test/data/database/sqlite.db differ diff --git a/src/test/label_printer_ferrari.py b/src/test/label_printer_ferrari.py new file mode 100644 index 0000000..e598921 --- /dev/null +++ b/src/test/label_printer_ferrari.py @@ -0,0 +1,50 @@ +import sys +from datetime import datetime +from PyQt5.QtWidgets import QApplication + +from components import Os_Label_Printer +from lib.helpers import ConfigReader + +config = ConfigReader(system_id="test-windows") +time =datetime.now() +context = { + # RECIPE DATA + "RECIPE": "000948653", + "PART": "000948653", + "TFILL": "5", + "TSET": "10", + "TTEST": "10", + "PSETMINP_A": "4750", + "PSETMAXP_A": "5250", + "PTEST": "1500", + "PMIN": "30", + "RESPSET": "1512", + "RESLEAK": "12.34", + "SN4": "1234", + "SN5": "12345", + # TIME DEFINITION + "DATETIME": time.strftime("%d/%m/%Y %H:%M:%S"), + "DATE": time.strftime("%d/%m/%Y"), + "TIME": time.strftime("%H:%M:%S"), + "YYYY": time.strftime("%Y"), + "YY": time.strftime("%y"), + "MO": time.strftime("%m"), + "DD": time.strftime("%d"), + "HH": time.strftime("%H"), + "MI": time.strftime("%M"), + "SS": time.strftime("%S"), + "JJJ": time.strftime("%j"), + # EXTRA DATA + "SHIFT": "1", + "STATION": "ST-TEN-1", + "OPERATOR": "MARIO", + "BADGE_NUM": "999", + +} + +app = QApplication(sys.argv) + +# TEST STANDARD PRINTER +printer = Os_Label_Printer(config=config, name="label_printer") +printer.config_changed() +printer.print_label("ferrari_30x16_203.prn", context=context) diff --git a/src/test/remote_fetch_test.py b/src/test/remote_fetch_test.py new file mode 100644 index 0000000..c9db1f3 --- /dev/null +++ b/src/test/remote_fetch_test.py @@ -0,0 +1,150 @@ +import unittest +from unittest.mock import patch, Mock +import requests +import json +import os + +from components import ArchiveSynchronizer + + +class TestArchiveSynchronizer(unittest.TestCase): + def setUp(self): + self.synchronizer = ArchiveSynchronizer(config=Mock(), name=None) + self.synchronizer.archive_endpoint = "https://dev.r5portal.it/api/st-ten-save/" + self.synchronizer.status_endpoint = "https://dev.r5portal.it/api/device-info-update/" + self.synchronizer.download_endpoint = "https://dev.r5portal.it/media/uploads/" + self.synchronizer.machine_id = "st-ten-1" + self.synchronizer.log = Mock() + + @patch('requests.Session') + @patch('os.makedirs') + @patch('builtins.open', new_callable=unittest.mock.mock_open) + def test_remote_fetch_success(self, mock_open, mock_makedirs, mock_session): + remote_path = "img-025.png" + local_path = "config/warning_images" + + mock_response = Mock() + mock_response.status_code = 200 + mock_response.content = b'Test content' + mock_session.return_value.__enter__.return_value.get.return_value = mock_response + + result = self.synchronizer.remote_fetch(remote_path, local_path) + + self.assertEqual(result, {"downloaded_file": f"{local_path}/{remote_path}"}) + mock_open.assert_called_with(f"{local_path}/{remote_path}", "wb") + mock_open().write.assert_called_with(b'Test content') + + @patch('requests.Session') + def test_remote_fetch_not_found(self, mock_session): + remote_path = "img-025.png" + local_path = "config/warning_images" + + mock_response = Mock() + mock_response.status_code = 404 + mock_session.return_value.__enter__.return_value.get.return_value = mock_response + + result = self.synchronizer.remote_fetch(remote_path, local_path) + self.assertEqual(result, {"error": "File not found"}) + + @patch('requests.Session') + def test_remote_fetch_forbidden(self, mock_session): + remote_path = "img-025.png" + local_path = "config/warning_images" + + mock_response = Mock() + mock_response.status_code = 403 + mock_session.return_value.__enter__.return_value.get.return_value = mock_response + + result = self.synchronizer.remote_fetch(remote_path, local_path) + self.assertEqual(result, {"error": "Access forbidden or not logged in"}) + + @patch('requests.Session') + @patch('requests.Session.get', side_effect=requests.ConnectionError("Connection error")) + def test_remote_fetch_connection_error(self, mock_get, mock_session): + remote_path = "img-025.png" + local_path = "config/warning_images" + + result = self.synchronizer.remote_fetch(remote_path, local_path) + self.assertEqual(result, {"error": "Connection error"}) + self.synchronizer.log.error.assert_called_with( + "Connection error occurred while fetching the file: Connection error") + + @patch('requests.Session') + @patch('requests.Session.get', side_effect=requests.Timeout("Timeout error")) + def test_remote_fetch_timeout_error(self, mock_get, mock_session): + remote_path = "img-025.png" + local_path = "config/warning_images" + + result = self.synchronizer.remote_fetch(remote_path, local_path) + self.assertEqual(result, {"error": "Timeout error"}) + self.synchronizer.log.error.assert_called_with("Timeout error occurred while fetching the file: Timeout error") + + @patch('requests.Session') + def test_parse_response_and_execute_success(self, mock_session): + mock_response = Mock() + mock_response.json.return_value = { + "STATUS": "OK", + "ACTIONS_TO_DO": [ + {"remote_path": "img-025.png", "local_path": "config/warning_images"} + ] + } + + with patch.object(self.synchronizer, 'remote_fetch', + return_value={"downloaded_file": "config/warning_images/img-025.png"}) as mock_rf: + self.synchronizer.parse_response_and_execute(mock_response) + mock_rf.assert_called_once_with(remote_path="img-025.png", local_path="config/warning_images") + + def test_parse_response_and_execute_json_error(self): + mock_response = Mock() + mock_response.json.side_effect = json.JSONDecodeError("Expecting value", "doc", 0) + + self.synchronizer.parse_response_and_execute(mock_response) + self.synchronizer.log.error.assert_called_with("Failed to decode JSON response") + + @patch('requests.Session') + @patch.object(ArchiveSynchronizer, 'parse_response_and_execute') + def test_update_machine_status_success(self, mock_parse_response, mock_session): + mock_response = Mock() + mock_response.status_code = 200 + mock_session.return_value.__enter__.return_value.post.return_value = mock_response + + self.synchronizer.machine_status = "running" + result = self.synchronizer.update_machine_status() + self.assertTrue(result) + mock_parse_response.assert_called_once_with(mock_response) + self.synchronizer.log.info.assert_called_with("Status: running: Machine Status Updated Successfully") + + @patch('requests.Session') + def test_update_machine_status_bad_status_response(self, mock_session): + mock_response = Mock() + mock_response.status_code = 500 + mock_session.return_value.__enter__.return_value.post.return_value = mock_response + + self.synchronizer.machine_status = "idle" + result = self.synchronizer.update_machine_status() + self.assertFalse(result) + self.synchronizer.log.warning.assert_called_with( + "Status: idle: failed to update machine status: bad status response: 500: no response" + ) + + @patch('requests.Session', side_effect=requests.ConnectionError("Connection error")) + def test_update_machine_status_connection_error(self, mock_session): + self.synchronizer.machine_status = "offline" + result = self.synchronizer.update_machine_status() + self.assertFalse(result) + self.synchronizer.log.warning.assert_called_with( + "Status: offline: failed to update machine status, archive_endpoint might be unreachable: Connection error" + ) + + @patch('requests.Session', side_effect=requests.Timeout("Timeout error")) + def test_update_machine_status_timeout_error(self, mock_session): + self.synchronizer.machine_status = "offline" + result = self.synchronizer.update_machine_status() + self.assertFalse(result) + self.synchronizer.log.warning.assert_called_with( + "Status: offline: failed to update machine status, archive_endpoint might be unreachable: Timeout error" + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/src/test_usb586x.py b/src/test_usb586x.py index 0d55c44..b055474 100644 --- a/src/test_usb586x.py +++ b/src/test_usb586x.py @@ -9,7 +9,7 @@ from src.components.usb_586x import USB_586x from lib.helpers import ConfigReader -test_config = ConfigReader() +test_config = ConfigReader(system_id="test-linux") if "USB-5862" in test_config["digital_io"]["id"]: out_size = in_size = 16 diff --git a/src/ui/barcodes_step_editor/barcodes_step_editor.ui b/src/ui/barcodes_step_editor/barcodes_step_editor.ui index c65c4b8..8a09e06 100644 --- a/src/ui/barcodes_step_editor/barcodes_step_editor.ui +++ b/src/ui/barcodes_step_editor/barcodes_step_editor.ui @@ -6,8 +6,8 @@ 0 0 - 538 - 234 + 1004 + 300 @@ -29,102 +29,102 @@ - 10 - 33 - 52 - 16 + 20 + 50 + 81 + 20 - Seriale-1 + Barcode 1 - 68 - 33 - 133 - 22 + 100 + 40 + 321 + 36 - 68 - 68 - 133 - 22 + 100 + 80 + 321 + 36 - 10 - 68 - 52 - 16 + 20 + 90 + 81 + 20 - Seriale-2 + Barcode 2 - 68 - 103 - 133 - 22 + 100 + 120 + 321 + 36 - 10 - 103 - 52 - 16 + 20 + 130 + 81 + 20 - Seriale-3 + Barcode 3 - 68 - 138 - 133 - 22 + 100 + 160 + 321 + 36 - 10 - 138 - 52 - 16 + 20 + 170 + 81 + 20 - Seriale-4 + Barcode 4 - 297 - 33 - 133 - 22 + 610 + 40 + 321 + 36 @@ -134,9 +134,9 @@ - 207 - 33 - 84 + 480 + 50 + 131 16 @@ -147,10 +147,10 @@ - 68 - 173 - 133 - 22 + 100 + 200 + 321 + 36 @@ -160,14 +160,14 @@ - 10 - 173 - 52 - 16 + 20 + 210 + 81 + 20 - Seriale-4 + Barcode 5 diff --git a/src/ui/crud/crud.py b/src/ui/crud/crud.py index 6eb3e3d..583bf4b 100755 --- a/src/ui/crud/crud.py +++ b/src/ui/crud/crud.py @@ -1,5 +1,6 @@ import ast import json +import logging import traceback import weakref from datetime import datetime @@ -40,6 +41,7 @@ class Cell: modified = pyqtSignal(bool) def __init__(self, action=None, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None): + self.log = logging.getLogger(f"{self.__class__.__name__} ({id(self)})") self.readonly = readonly self.autocomplete = autocomplete self.field_name = field_name @@ -73,7 +75,7 @@ class Cell: self.render(data, *args, **kwargs) if not self.connected_modified: # only connect after first render - # to avoid false modified signals trigghered by autocomplete + # to avoid false modified signals triggered by autocomplete self.connect_modified() self.connected_modified = True @@ -221,11 +223,6 @@ class Json_External_Dialog_Editor_Cell_Widget(QPushButton, Cell): def render(self, data, field_name=None, row_number=None, crud=None): self.editor.render(data, field_name=field_name, row_number=row_number, crud=crud) - # def _parse(self, action=None, row_number=None, crud=None): - # if action != "commit" and self.connected_modified and not self.is_modified: - # return self.value - # return self.editor.parse(action=action, row_number=row_number, crud=crud) - def parse(self, action=None, row_number=None, crud=None): return self.editor.parse(row_number=row_number, crud=crud) @@ -275,7 +272,7 @@ class Crud(Widget): self.filter_delay = QTimer() self.filter_delay.setSingleShot(True) self.filter_delay.setInterval(500) - self.filter_delay.timeout.connect(lambda self=weakref.ref(self): self().do_filter(self().filter_cn)) + self.filter_delay.timeout.connect(lambda selfi=weakref.ref(self): selfi().do_filter(selfi().filter_cn)) self.db_tw.crud = self self.refresh("init") self.db_tw.horizontalHeader().sectionClicked.connect(self.toggle_sort) @@ -288,13 +285,13 @@ class Crud(Widget): else: self.db_tw.setSelectionMode(QAbstractItemView.ExtendedSelection) self.db_tw.itemSelectionChanged.connect(self.show_selection) - self.revert_b.clicked.connect(lambda checked, self=weakref.ref(self): self().refresh("revert")) + self.revert_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().refresh("revert")) if self.pagination is not False: - self.start_b.clicked.connect(lambda checked, self=weakref.ref(self): self().refresh("pagination", page=0)) - self.previous_b.clicked.connect(lambda checked, self=weakref.ref(self): self().refresh("pagination", page=max(self().page - 1, 0))) - self.page_n_sb.valueChanged.connect(lambda page, self=weakref.ref(self): self().refresh("pagination", page=page - 1)) - self.next_b.clicked.connect(lambda checked, self=weakref.ref(self): self().refresh("pagination", page=self().page + 1)) - self.end_b.clicked.connect(lambda checked, self=weakref.ref(self): self().refresh("pagination", page=-1)) + self.start_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().refresh("pagination", page=0)) + self.previous_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().refresh("pagination", page=max(selfi().page - 1, 0))) + self.page_n_sb.valueChanged.connect(lambda page, selfi=weakref.ref(self): selfi().refresh("pagination", page=page - 1)) + self.next_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().refresh("pagination", page=selfi().page + 1)) + self.end_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().refresh("pagination", page=-1)) else: self.next_b.setHidden(True) self.previous_b.setHidden(True) @@ -473,8 +470,8 @@ class Crud(Widget): if fn in self.db.table_fields: w.setPlaceholderText("Filtro") w.setText(self.filters.get(fn, None)) - w.editingFinished.connect(lambda cn=cn, self=weakref.ref(self): self().do_filter(cn)) - w.textChanged.connect(lambda text, cn=cn, self=weakref.ref(self): self().filter_edited(cn)) + w.editingFinished.connect(lambda cni=cn, selfi=weakref.ref(self): selfi().do_filter(cni)) + w.textChanged.connect(lambda text, cni=cn, selfi=weakref.ref(self): selfi().filter_edited(cni)) else: w.setPlaceholderText("Non filtrabile") w.setEnabled(False) diff --git a/src/ui/login/login.py b/src/ui/login/login.py index dbded52..f101a71 100755 --- a/src/ui/login/login.py +++ b/src/ui/login/login.py @@ -21,8 +21,7 @@ class Login(Widget): super().__init__() self.welcome_l.setText("BENVENUTO, PER INIZIARE IL COLLAUDO, EFFETTUA L'ACCESSO:") self.user_cb.addItems(Users.get_usernames()) - - ArchiveSynchronizer.machine_status = "logged-in" + self.archive_synch= ArchiveSynchronizer() QShortcut(QKeySequence("Return"), self).activated.connect(self.login_b.click) QShortcut(QKeySequence("Enter"), self).activated.connect(self.login_b.click) @@ -59,7 +58,6 @@ class Login(Widget): login_count += 1 # /TESTING self.successful_login.emit() - ArchiveSynchronizer.machine_status = "logged-in" def show_osk(self): self.password_le.setFocus() diff --git a/src/ui/recipe_selection/recipe_selection.py b/src/ui/recipe_selection/recipe_selection.py index 94791ec..9fc4f1b 100755 --- a/src/ui/recipe_selection/recipe_selection.py +++ b/src/ui/recipe_selection/recipe_selection.py @@ -5,15 +5,17 @@ import sys import weakref from glob import glob -from lib.db import Recipes, Steps, Users, db +from lib.db import Recipes, Users, db from PyQt5.QtCore import QTimer, pyqtSignal from PyQt5.QtGui import QKeySequence from PyQt5.QtWidgets import QFileDialog, QMessageBox, QShortcut +import shutil from ui.crud import Crud, Json_External_Dialog_Editor_Cell_Widget from ui.helpers import replace_widget from ui.recipe_spec_and_step_editor import Recipe_Spec_And_Step_Editor from ui.widget import Widget +from datetime import datetime class Noner: def __getitem__(self, key): @@ -33,8 +35,6 @@ class Recipe_Selection(Widget): self.second_leak_test_enabled = self.config["hardware_config"]["second_leak_test"] == "present" self.defaults = self.config.get("recipes_defaults", noner) self.unsupported_steps = unsupported_steps - if not self.second_leak_test_enabled: - self.unsupported_steps.add("leak_2") session = Users.get_session() if session.is_admin: readonly = False @@ -94,7 +94,6 @@ class Recipe_Selection(Widget): self.config.get("recipes_defaults", noner)["verifica_resistenza_connettore_abilitata"]) and "resistance" not in self.unsupported_steps, "screws": len(self.config.get("recipes_defaults", noner)["avvitatura_abilitata"]) and "screws" not in self.unsupported_steps, "instruction": len(self.config.get("recipes_defaults", noner)["istruzione_abilitata"]) and "instruction" not in self.unsupported_steps, - "instruction_extra": len(self.config.get("recipes_defaults", noner)["istruzione_abilitata_extra"]) and "instruction_extra" not in self.unsupported_steps, "leak_1": len(self.config.get("recipes_defaults", noner)["prova_tenuta_abilitata"]) and "leak_1" not in self.unsupported_steps, "leak_2": len(self.config.get("recipes_defaults", noner)["prova_tenuta_abilitata_2"]) and "leak_2" not in self.unsupported_steps, "vision": len(self.config.get("recipes_defaults", noner)["test_visione_abilitato"]) and "vision" not in self.unsupported_steps, @@ -137,6 +136,7 @@ class Recipe_Selection(Widget): self.import_b.setVisible(False) self.export_b.setVisible(False) self.delete_all_b.setVisible(False) + # TESTING if "--auto-select" in sys.argv: recipe = "R56738/1" @@ -181,6 +181,7 @@ class Recipe_Selection(Widget): val = dict.get(key, self.defaults[key]) return val if val != "" else self.defaults[key] + # READ RECIPE STEPS FROM CSV ROW def read_steps(self, row, defaults=None): if defaults is None: global noner @@ -272,26 +273,27 @@ class Recipe_Selection(Widget): }, } + # IMPORT RECIPES FROM CSV FILE TO DATABASE def import_recipes(self, csv_path=None, defaults=None): if defaults is None: global noner defaults = self.config.get("recipes_defaults", noner) - - if 'codice_prodotto' not in defaults: - defaults['codice_prodotto'] = "VALORE_PREDEFINITO" if csv_path is None: + options = QFileDialog.Options() + options |= QFileDialog.DontUseNativeDialog csv_path, _ = QFileDialog.getOpenFileName( - None, - "Esportazione ricette", + self, + "Importazione ricette", "ricette.csv", "CSV data (*.csv);;All Files (*)", + options=options, ) csv_path = str(csv_path) if not len(csv_path): return self.log.info(f"recipes: importing recipes from {csv_path}") recipe_name_field = self.config.get("recipe", {}).get("recipe_name_field", "codice_ricetta").strip() - part_number_field = self.config.get("recipe", {}).get("part_number_field", "part number").strip() + part_number_field = self.config.get("recipe", {}).get("part_number_field", "part_number").strip() description_field = self.config.get("recipe", {}).get("description_field", "descrizione").strip() barcode_enable_field = self.config.get("recipe", {}).get("barcode_enable_field", "verifica_codice_a_barre_abilitata").strip() @@ -302,6 +304,8 @@ class Recipe_Selection(Widget): row = dict((k.lower(), v) for k, v in ucrow.items()) recipe_name = row.get(recipe_name_field, defaults["codice_ricetta"]) steps_specs = self.read_steps(row, defaults=defaults) + + # create recipe or update existing one in DB try: recipe = Recipes.get_by_id(recipe_name) steps = recipe.get_steps_map() @@ -309,21 +313,12 @@ class Recipe_Selection(Widget): except Recipes.DoesNotExist: recipe = Recipes(name=recipe_name, part_number="TEMPORARY") steps = {} - for step_type, step_spec in steps_specs.items(): - step = Steps() - steps[step_type] = step + for step_name, step_spec in steps_specs.items(): + if step_name not in self.unsupported_steps: + steps[step_name] = step_spec recipe_is_new = True - for step_name, step_spec in steps_specs.items(): - step = steps[step_name] - # step.type = re.sub(r"^(.*)_[0-9]+$", r"\1", step_name) - step.type = step_name - step.spec = step_spec - if recipe_is_new: - step.save(force_insert=True) - else: - step.save() recipe.client = row.get("cliente", defaults["cliente"]) - recipe.part_number = row.get(part_number_field, defaults["codice_prodotto"]) + recipe.part_number = row.get(part_number_field, defaults["part_number"]) recipe.description = row.get(description_field, defaults["descrizione"]) recipe.spec = { "count": len(row.get("dimensione_lotto_abilitata", defaults["dimensione_lotto_abilitata"])) and "count" not in self.unsupported_steps, @@ -338,23 +333,9 @@ class Recipe_Selection(Widget): "leak_2": len(row.get("prova_tenuta_abilitata_2", defaults["prova_tenuta_abilitata_2"])) and "leak_2" not in self.unsupported_steps, "vision": len(row.get("test_visione_abilitato", defaults["test_visione_abilitato"])) and "vision" not in self.unsupported_steps, "print": len(row.get("stampa_etichetta_abilitata", defaults["stampa_etichetta_abilitata"])) and "print" not in self.unsupported_steps, - "steps": [], # should be pks of the enabled steps - "available_steps": { - "count": steps["count"].get_id(), - "connector": steps["connector"].get_id(), - "barcodes": steps["barcodes"].get_id(), - "resistance": steps["resistance"].get_id(), - "screws": steps["screws"].get_id(), - "instruction": steps["instruction"].get_id(), - "leak_1": steps["leak_1"].get_id(), - "leak_2": steps["leak_2"].get_id(), - "vision": steps["vision"].get_id(), - "print": steps["print"].get_id(), - }, + "steps": steps, } - for step_name, step in recipe.spec["available_steps"].items(): - if recipe.spec[step_name]: - recipe.spec["steps"].append(step) + recipe.spec["steps"]=steps_specs if recipe_is_new: recipe.save(force_insert=True) else: @@ -364,13 +345,17 @@ class Recipe_Selection(Widget): self.log.info(f"recipes: imported {count} rows.") self.crud.refresh() + # EXPORT RECIPES TABLE TO CSV FILE def export_recipes(self, csv_path=None): if csv_path is None: + options = QFileDialog.Options() + options |= QFileDialog.DontUseNativeDialog csv_path, _ = QFileDialog.getSaveFileName( - None, + self, "Esportazione ricette", "ricette.csv", "CSV data (*.csv);;All Files (*)", + options=options, ) csv_path = str(csv_path) if not len(csv_path): @@ -381,121 +366,135 @@ class Recipe_Selection(Widget): if len(csv_dir): os.makedirs(csv_dir, exist_ok=True) recipe_name_field = self.config.get("recipe", {}).get("recipe_name_field", "codice_ricetta").strip() - part_number_field = self.config.get("recipe", {}).get("part_number_field", "codice_prodotto").strip() - description_field = self.config.get("recipe", {}).get("description_field", "descrizione").strip() barcode_enable_field = self.config.get("recipe", {}).get("barcode_enable_field", "verifica_codice_a_barre_abilitata").strip() barcode_serial_field = self.config.get("recipe", {}).get("barcode_serial_field", "codice_a_barre").strip() print_template_field = self.config.get("recipe", {}).get("label_template_field", "modello_etichetta").strip() data = [] - fieldnames = [ - recipe_name_field, - "cliente", - part_number_field, - description_field, - "dimensione_lotto_abilitata", - "dimensione_lotto", - "verifica_connettore_abilitata", - "connettore", - barcode_enable_field, - barcode_serial_field, - "verifica_resistenza_connettore_abilitata", - "scala_resistenza", - "r nominale", - "tolleranza_resistenza_pos", - "tolleranza_resistenza_neg", - "avvitatura_abilitata", - "viti", - "prova_tenuta_abilitata", - "tempo_pre_riempimento", - "pressione_pre_riempimento", - "tempo_riempimento", - "tempo_assestamento", - "percentuale_minima_pressione_assestamento", - "percentuale_massima_pressione_assestamento", - "tempo_di_test", - "pressione_di_test_delta_minimo", - "pressione_di_test", - "pressione_di_test_delta_massimo", - "tempo_svuotamento", - "pressione_svuotamento", - "prova_tenuta_abilitata_2", - "tempo_pre_riempimento_2", - "pressione_pre_riempimento_2", - "tempo_riempimento_2", - "tempo_assestamento_2", - "percentuale_minima_pressione_assestamento_2", - "percentuale_massima_pressione_assestamento_2", - "tempo_di_test_2", - "pressione_di_test_delta_minimo_2", - "pressione_di_test_2", - "pressione_di_test_delta_massimo_2", - "tempo_svuotamento_2", - "pressione_svuotamento_2", - "test_visione_abilitato", - "ricetta_visione", - "stampa_etichetta_abilitata", - print_template_field, - ] + fieldnames = set() # Use a set to avoid duplicates for recipe in list(Recipes.select()): steps = recipe.get_steps_map() exportable = { + # BASE SECTION recipe_name_field: recipe.name, "cliente": recipe.client, - part_number_field: recipe.part_number, - description_field: recipe.description, - # "dimensione_lotto_abilitata": "x" if recipe.spec["count"] else "", - # "dimensione_lotto": steps["count"].spec["amount"], - "verifica_connettore_abilitata": "x" if recipe.spec["connector"] else "", - "connettore": steps["connector"].spec["connector"], - barcode_enable_field: "x" if recipe.spec["barcodes"] else "", - barcode_serial_field: steps["barcodes"].spec["serial"], - "verifica_resistenza_connettore_abilitata": "x" if recipe.spec["resistance"] else "", - "scala_resistenza": steps["resistance"].spec["scale"], - "r nominale": steps["resistance"].spec["expected"], - "tolleranza_resistenza_pos": steps["resistance"].spec["tolerance_pos"], - "tolleranza_resistenza_neg": steps["resistance"].spec["tolerance_neg"], - # "avvitatura_abilitata": "x" if recipe.spec["screws"] else "", - # "viti": steps["screws"].spec["quantity"], - "prova_tenuta_abilitata": "x" if recipe.spec["leak_1"] else "", - "tempo_pre_riempimento": steps["leak_1"].spec["pre_filling_time"], - "pressione_pre_riempimento": steps["leak_1"].spec["pre_filling_pressure"], - "tempo_riempimento": steps["leak_1"].spec["filling_time"], - "tempo_assestamento": steps["leak_1"].spec["settling_time"], - "percentuale_minima_pressione_assestamento": steps["leak_1"].spec["settling_pressure_min_percent"], - "percentuale_massima_pressione_assestamento": steps["leak_1"].spec["settling_pressure_max_percent"], - "tempo_di_test": steps["leak_1"].spec["test_time"], - "pressione_di_test_delta_minimo": steps["leak_1"].spec["test_pressure_qneg"], - "pressione_di_test": steps["leak_1"].spec["test_pressure"], - "pressione_di_test_delta_massimo": steps["leak_1"].spec["test_pressure_qpos"], - "tempo_svuotamento": steps["leak_1"].spec["flush_time"], - "pressione_svuotamento": steps["leak_1"].spec["flush_pressure"], - "prova_tenuta_abilitata_2": "x" if recipe.spec["leak_2"] else "", - "tempo_pre_riempimento_2": steps["leak_2"].spec["pre_filling_time"], - "pressione_pre_riempimento_2": steps["leak_2"].spec["pre_filling_pressure"], - "tempo_riempimento_2": steps["leak_2"].spec["filling_time"], - "tempo_assestamento_2": steps["leak_2"].spec["settling_time"], - "percentuale_minima_pressione_assestamento_2": steps["leak_2"].spec["settling_pressure_min_percent"], - "percentuale_massima_pressione_assestamento_2": steps["leak_2"].spec["settling_pressure_max_percent"], - "tempo_di_test_2": steps["leak_2"].spec["test_time"], - "pressione_di_test_delta_minimo_2": steps["leak_2"].spec["test_pressure_qneg"], - "pressione_di_test_2": steps["leak_2"].spec["test_pressure"], - "pressione_di_test_delta_massimo_2": steps["leak_2"].spec["test_pressure_qpos"], - "tempo_svuotamento_2": steps["leak_2"].spec["flush_time"], - "pressione_svuotamento_2": steps["leak_2"].spec["flush_pressure"], - "test_visione_abilitato": recipe.spec["vision"], - "ricetta_visione": steps["vision"].spec["recipe"], - "stampa_etichetta_abilitata": "x" if recipe.spec["print"] else "", - print_template_field: steps["print"].spec["template"], + "part_number": recipe.part_number, } + + # Add base fields to the fieldnames + fieldnames.update([recipe_name_field, "cliente", "part_number"]) + + # Check and add fields conditionally for each section + if "connector" in steps: + exportable.update({ + "verifica_connettore_abilitata": "x", + "connettore": steps["connector"].spec["connector"] + }) + fieldnames.update(["verifica_connettore_abilitata", "connettore"]) + + if "resistance" in steps: + exportable.update({ + "verifica_resistenza_connettore_abilitata": "x", + "scala_resistenza": steps["resistance"].spec["scale"], + "r nominale": steps["resistance"].spec["expected"], + "tolleranza_resistenza_pos": steps["resistance"].spec["tolerance_pos"], + "tolleranza_resistenza_neg": steps["resistance"].spec["tolerance_neg"] + }) + fieldnames.update(["verifica_resistenza_connettore_abilitata", "scala_resistenza", "r nominale", + "tolleranza_resistenza_pos", "tolleranza_resistenza_neg"]) + + if "barcodes" in steps: + exportable.update({ + barcode_enable_field: "x", + barcode_serial_field: steps["barcodes"].spec["serial"] + }) + fieldnames.update([barcode_enable_field, barcode_serial_field]) + + if recipe.spec.get("steps", {}).get("screws") and "screws" in steps: + exportable.update({ + "avvitatura_abilitata": "x", + "viti": steps["screws"].spec["quantity"] + }) + fieldnames.update(["avvitatura_abilitata", "viti"]) + + if "leak_1" in steps: + exportable.update({ + "prova_tenuta_abilitata": "x", + "tempo_pre_riempimento": steps["leak_1"].spec["pre_filling_time"], + "pressione_pre_riempimento": steps["leak_1"].spec["pre_filling_pressure"], + "tempo_riempimento": steps["leak_1"].spec["filling_time"], + "tempo_assestamento": steps["leak_1"].spec["settling_time"], + "percentuale_minima_pressione_assestamento": steps["leak_1"].spec["settling_pressure_min_percent"], + "percentuale_massima_pressione_assestamento": steps["leak_1"].spec["settling_pressure_max_percent"], + "tempo_di_test": steps["leak_1"].spec["test_time"], + "pressione_di_test_delta_minimo": steps["leak_1"].spec["test_pressure_qneg"], + "pressione_di_test": steps["leak_1"].spec["test_pressure"], + "pressione_di_test_delta_massimo": steps["leak_1"].spec["test_pressure_qpos"], + "tempo_svuotamento": steps["leak_1"].spec["flush_time"], + "pressione_svuotamento": steps["leak_1"].spec["flush_pressure"], + }) + fieldnames.update(["prova_tenuta_abilitata", "tempo_pre_riempimento", "pressione_pre_riempimento", + "tempo_riempimento", "tempo_assestamento", + "percentuale_minima_pressione_assestamento", + "percentuale_massima_pressione_assestamento", "tempo_di_test", + "pressione_di_test_delta_minimo", + "pressione_di_test", "pressione_di_test_delta_massimo", "tempo_svuotamento", + "pressione_svuotamento"]) + + if "leak_2" in steps: + exportable.update({ + "prova_tenuta_abilitata_2": "x", + "tempo_pre_riempimento_2": steps["leak_2"].spec["pre_filling_time"], + "pressione_pre_riempimento_2": steps["leak_2"].spec["pre_filling_pressure"], + "tempo_riempimento_2": steps["leak_2"].spec["filling_time"], + "tempo_assestamento_2": steps["leak_2"].spec["settling_time"], + "percentuale_minima_pressione_assestamento_2": steps["leak_2"].spec[ + "settling_pressure_min_percent"], + "percentuale_massima_pressione_assestamento_2": steps["leak_2"].spec[ + "settling_pressure_max_percent"], + "tempo_di_test_2": steps["leak_2"].spec["test_time"], + "pressione_di_test_delta_minimo_2": steps["leak_2"].spec["test_pressure_qneg"], + "pressione_di_test_2": steps["leak_2"].spec["test_pressure"], + "pressione_di_test_delta_massimo_2": steps["leak_2"].spec["test_pressure_qpos"], + "tempo_svuotamento_2": steps["leak_2"].spec["flush_time"], + "pressione_svuotamento_2": steps["leak_2"].spec["flush_pressure"], + }) + fieldnames.update(["prova_tenuta_abilitata_2", "tempo_pre_riempimento_2", "pressione_pre_riempimento_2", + "tempo_riempimento_2", "tempo_assestamento_2", + "percentuale_minima_pressione_assestamento_2", + "percentuale_massima_pressione_assestamento_2", "tempo_di_test_2", + "pressione_di_test_delta_minimo_2", "pressione_di_test_2", + "pressione_di_test_delta_massimo_2", + "tempo_svuotamento_2", "pressione_svuotamento_2"]) + + if "vision" in steps: + exportable.update({ + "test_visione_abilitato": recipe.spec["vision"], + "ricetta_visione": steps["vision"].spec["recipe"] + }) + fieldnames.update(["test_visione_abilitato", "ricetta_visione"]) + + if "print" in steps: + exportable.update({ + "stampa_etichetta_abilitata": "x", + print_template_field: steps["print"].spec["template"], + "etichette_supplementari": steps["print"].spec["extra_label"] + }) + fieldnames.update(["stampa_etichetta_abilitata", print_template_field, "etichette_supplementari"]) + + # Append the exportable dictionary to the data list data.append(exportable) + + # Convert the set to a list for CSV writing + fieldnames = list(fieldnames) + + # Export to CSV if there is data if len(data): self.log.info(f"recipes: exporting recipes to {csv_path}") with open(csv_path, "w", newline="") as f: - w = csv.DictWriter(f, fieldnames, extrasaction="ignore") + w = csv.DictWriter(f, fieldnames=fieldnames, extrasaction="ignore") w.writeheader() w.writerows(data) self.log.info(f"recipes: exported {len(data)} rows.") - def delete_recipes(self): ret = QMessageBox.warning( None, @@ -506,5 +505,41 @@ class Recipe_Selection(Widget): ) if ret == QMessageBox.Ok: Recipes.delete().execute() - Steps.delete().execute() self.crud.refresh() + def backup_current_recipes(self): + # Define the backup directory and file name + backup_dir = os.path.join('config', 'csv_import', 'backup_csv') + timestamp = datetime.now().strftime("%d%m%y%H%M%S") + backup_file = f"backup_{timestamp}.csv" + backup_path = os.path.join(backup_dir, backup_file) + + # Ensure the backup directory exists + os.makedirs(backup_dir, exist_ok=True) + + # Export current recipes to backup file + self.export_recipes(csv_path=backup_path) + + def move_imported_csv(self, csv_path): + # Move the imported CSV to the 'imported_csv' directory + imported_dir = os.path.join('config', 'csv_import', 'imported_csv') + os.makedirs(imported_dir, exist_ok=True) + imported_path = os.path.join(imported_dir, os.path.basename(csv_path)) + shutil.move(csv_path, imported_path) + self.log.info(f"Imported CSV moved to {imported_path}") + return imported_path + + def check_and_import_auto_csv(self): + # Define the directory to check + auto_import_dir = os.path.join('config', 'csv_import', 'auto_csv_import') + + # Check if the directory exists and is not empty + if os.path.exists(auto_import_dir) and os.listdir(auto_import_dir): + # Perform backup + self.backup_current_recipes() + + # Move and import each CSV file in the directory + for csv_file in os.listdir(auto_import_dir): + csv_path = os.path.join(auto_import_dir, csv_file) + if os.path.isfile(csv_path) and csv_file.endswith(".csv"): + self.import_recipes(csv_path=csv_path) + self.move_imported_csv(csv_path) diff --git a/src/ui/recipe_spec_and_step_editor/recipe_spec_and_step_editor.py b/src/ui/recipe_spec_and_step_editor/recipe_spec_and_step_editor.py index c42b30d..006c17c 100644 --- a/src/ui/recipe_spec_and_step_editor/recipe_spec_and_step_editor.py +++ b/src/ui/recipe_spec_and_step_editor/recipe_spec_and_step_editor.py @@ -1,4 +1,3 @@ -from lib.db import Steps from peewee import IntegrityError from ui.barcodes_step_editor import Barcodes_Step_Editor from ui.connector_step_editor import Connector_Step_Editor @@ -16,7 +15,8 @@ from ui.instruction_step_editor import Instruction_Step_Editor class Recipe_Spec_And_Step_Editor(Editor): def __init__(self, action=None, cell_widget=None, unsupported_steps=None): super().__init__(action=action, cell_widget=cell_widget) - self.map = { + self.crud = None + self.steps_map = { "count": { "type": "count", "enable": self.count_enabled_cb, @@ -97,20 +97,20 @@ class Recipe_Spec_And_Step_Editor(Editor): }, } for step_name in unsupported_steps: - self.map.get(step_name, {})["hidden"] = True - self.spec.update({step_name: map["enable"] for step_name, map in self.map.items()}) - for map in self.map.values(): + self.steps_map.get(step_name, {})["hidden"] = True + self.spec.update({step_name: map["enable"] for step_name, map in self.steps_map.items()}) + for map in self.steps_map.values(): editor = map.get("editor", None) if editor is not None: replace_widget(self, map["widget"], editor) self.steps_tw.setTabVisible(self.steps_tw.indexOf(map["tab"]), not map.get("hidden", False)) self.save_steps_b.clicked.connect(self.save_steps) self.reset_steps_b.clicked.connect(self.reset_steps) - self.available_steps = {} + self.recipe = None def set_readonly(self, readonly=True): super().set_readonly(readonly=readonly) - for map in self.map.values(): + for map in self.steps_map.values(): editor = map.get("editor", None) if editor is not None: editor.set_readonly(readonly=readonly) @@ -123,84 +123,58 @@ class Recipe_Spec_And_Step_Editor(Editor): step_editors_autocomplete = autocomplete.get("step_editors", None) super().do_autocomplete(autocomplete) if step_editors_autocomplete is not None: - for step_name, map in self.map.items(): + for step_name, map in self.steps_map.items(): editor = map.get("editor", None) if editor is not None: editor.do_autocomplete(step_editors_autocomplete.get(step_name, None)) - def init(self, action=None): - self.get_steps() - if action == "add": - self.save_steps() - def showing_dialog(self): self.reset_steps() - # def connect_modified(self, check_modified): - # super().connect_modified(check_modified) - # for map in self.map.values(): - # editor = map.get("editor", None) - # if editor is not None: - # editor.connect_modified(check_modified) - def render(self, data, field_name=None, row_number=None, crud=None): super().render(data, field_name=field_name, row_number=row_number, crud=crud) - self.available_steps = data.get("available_steps", None) - self.get_steps() - steps = set(data.get("steps", set())) - for map in self.map.values(): - step = map.get("step", None) - if step is not None: - map["enable"].setChecked(step.name in steps and not map.get("hidden", False)) + self.crud = crud + steps_data = data.get("steps", {}) + + for step_name, step_def in self.steps_map.items(): + if not step_def.get("hidden", False): + step_enabled = data.get(step_name, {}) in (True, 1, "x") + step_def["enable"].setChecked(step_enabled) + step_def["spec"] = steps_data.get(step_name, {}) + self.render_steps() def parse(self, action=None, row_number=None, crud=None): - # if action == "commit": - # self.save_steps() ret = super().parse(row_number=row_number, crud=crud) - ret["steps"] = [] - ret["available_steps"] = {} - for step_name, map in self.map.items(): - ret["available_steps"][step_name] = map["step"].name - if map["enable"].isChecked() and not map.get("hidden", False): - ret["steps"].append(map["step"].name) + ret["steps"] = {} + #self.save_steps() + for step_name, step_map in self.steps_map.items(): + if not step_map.get("hidden", False): + ret["steps"][step_name]=self.steps_map[step_name]["spec"] return ret - def get_steps(self): - for step_name, map in self.map.items(): - if step_name in self.available_steps: - try: - map["step"] = Steps.get_by_id(self.available_steps[step_name]) - map["step_is_new"] = False - except Steps.DoesNotExist: - map["step"] = Steps(name=self.available_steps[step_name], type=map["type"], spec={}) - map["step_is_new"] = True - elif map.get("step", None) is None: - map["step"] = Steps(type=map["type"], spec={}) - map["step_is_new"] = True - def render_steps(self): - for step_name, map in self.map.items(): - step = map.get("step", None) - if step is not None: - editor = map.get("editor", None) + for step_name, step_map in self.steps_map.items(): + spec = step_map.get("spec", None) + if spec is not None: + editor = step_map.get("editor", None) if editor is not None: - editor.render(step.spec) + editor.render(spec) def reset_steps(self): - self.get_steps() self.render_steps() def save_steps(self): - for map in self.map.values(): - step = map.get("step", None) - if step is not None: - editor = map.get("editor", None) + for step_name,step_map in self.steps_map.items(): + if not step_map.get("hidden", False): + editor = step_map.get("editor", None) if editor is not None: - step.spec = editor.parse() - if map["step_is_new"]: - step.save(force_insert=True) + step_dict = editor.parse() + self.steps_map[step_name]["spec"]=step_dict else: - step.save() - map["step_is_new"] = False + self.steps_map[step_name]["spec"] = {} + if self.crud is not None: + self.crud.set_modified() + parsed_value=self.parse() + self.cell_widget().value = parsed_value self.reset_steps() diff --git a/src/ui/test/test.py b/src/ui/test/test.py index 1c08976..1107316 100755 --- a/src/ui/test/test.py +++ b/src/ui/test/test.py @@ -4,11 +4,11 @@ import os import sys import weakref from datetime import datetime, timedelta -from components import ArchiveSynchronizer from PyQt5.QtCore import QTimer, pyqtSlot from PyQt5.QtWidgets import QMessageBox -from lib.db import Archive, Steps, Users +from lib.db import Archive, Recipes, Users from lib.helpers import get_shift +from lib.helpers.step import Step from playhouse.shortcuts import model_to_dict from ui.barcode_recipe_selection import Barcode_Recipe_Selection from ui.helpers import replace_widget @@ -26,6 +26,7 @@ from ui.test_screws import Test_Screws from ui.test_vision import Test_Vision from ui.test_warning_img import Test_Warning_Img from ui.widget import Widget +from components import ArchiveSynchronizer class Test(Widget): @@ -50,6 +51,8 @@ class Test(Widget): self.refresh_time(init=True) # INIT RECIPE self.recipe = None + self.auto_import = Recipe_Selection + self.archive_synch = ArchiveSynchronizer(config=config) if self.config["hardware_config"]["barcode_recipe_selection"] == "present": @@ -181,6 +184,7 @@ class Test(Widget): self.next_timer.timeout.connect(self.next) self.next() + def refresh_time(self, init=False): if init: self.time_timer = QTimer() @@ -236,7 +240,13 @@ class Test(Widget): if self.autotest_period is not None: self.autotest_timer.start(self.autotest_period) reason = "boot" - self.autotest_request = reason + + if self.config["autotest_leak"]["enabled"] == "true": + self.autotest_request = reason + else: + self.autotest_request = False + else: + self.log.info(f"Autotest request ignored (reason: {reason!r}) --no-autotest flag detected") if reason == "logout": self.next(action="abort") @@ -245,13 +255,10 @@ class Test(Widget): def next(self, action=None): if self.step is not None: - self.log.info(f"cycle step: {model_to_dict(self.step)!r} action: {action!r} current index:{self.cycle_index}") + self.log.info(f"cycle step: {self.step.step_type!r} action: {action!r} current index:{self.cycle_index}") else: self.log.info(f"cycle step: {self.step!r} action: {action!r} current index:{self.cycle_index}") - ArchiveSynchronizer.machine_status = "working" - # print(f"{ArchiveSynchronizer.machine_status}")#testing - current_w = self.centralWidget if hasattr(current_w, "stop"): current_w.stop() @@ -261,7 +268,7 @@ class Test(Widget): if self.config["hardware_config"]["tecna_t3"] == "present" or self.config["hardware_config"]["furness_controls"] == "present": self.cycle_available_steps["leak_1"].widget.recipe_written = False self.cycle_available_steps["leak_2"].widget.recipe_written = False - self.step = Steps(type="select_recipe") + self.step = Step(step_type="select_recipe") self.cycle_index = -1 self.recipe = None self.cycle_steps = None @@ -271,7 +278,7 @@ class Test(Widget): elif action in ("fail", "abort"): self.log.info(f"cycle next: action: {action!r}") # FAIL AND RESTART TEST - self.step = Steps(type="fail") + self.step = Step(step_type="fail") self.cycle_index = -1 # COUNT FAIL if action == "fail": @@ -284,10 +291,11 @@ class Test(Widget): # if recipe not set: select_recipe if self.recipe_selection_mode == "barcode": self.log.info(f"returning to barcode recipe selection") - self.step = Steps(type="barcode_recipe_selection") + self.step = Step(step_type="barcode_recipe_selection") else: self.log.info(f"returning to recipe selection table") - self.step = Steps(type="select_recipe") + self.step = Step(step_type="select_recipe") + elif action is None: if self.autotest_request is not False and self.autotest_cycle_steps is not None and not self.autotesting and (self.cycle_index == -1 or self.cycle_index + 1 >= len(self.cycle_steps)): # if autotest was requested @@ -295,6 +303,7 @@ class Test(Widget): self.autotesting = True self.autotesting_reason = self.autotest_request self.autotest_request = False + self.log.info(f"Autotest requested (reason: {self.autotesting_reason})") if self.autotest_period is not None: # reset periodic autotest timer self.time_timer.start(self.autotest_period) self.require_discard_piece = False @@ -326,25 +335,25 @@ class Test(Widget): else: self.cycle_index = -1 - self.step = Steps(type=None) + self.step = Step(step_type=None) # enable/disable cycle controls self.change_recipe_b.setEnabled(self.recipe is not None) - self.cancel_b.setEnabled(self.step.type is not None and self.step.type not in { + self.cancel_b.setEnabled(self.step.step_type is not None and self.step.step_type not in { "emergency", "fail", "select_recipe", "wait", }) - self.log.info(f"next cycle step: {model_to_dict(self.step)!r}") + self.log.info(f"next cycle step: {self.step.step_type!r}") # INIT TEST DATA IF STARTING CYCLE LOOP OR IF RESET IS NEEDED if self.cycle_index == 0: self.data = {"ok": True, "overridden": False} self.archived = None if self.recipe is not None and "recipe" not in self.data: self.data["recipe"] = model_to_dict(self.recipe) - w = self.cycle_available_steps[self.step.type] + w = self.cycle_available_steps[self.step.step_type] show = None - if self.step.type == "leak_2": + if self.step.step_type == "leak_2": self.setCentralWidget(w) # NEED TO PRESHOW UI if hasattr(w, "start"): show = w.start(recipe=self.recipe, step=self.step, pieces=self.pieces) @@ -352,16 +361,16 @@ class Test(Widget): self.setCentralWidget(w) elif show is False: self.next_timer.start(0) - if self.step.type == "done": + if self.step.step_type == "done": self.archived = self.done() self.last_label = copy.deepcopy(self.archived) self.next_timer.start(500) - elif self.step.type == "print": + elif self.step.step_type == "print": compiled_label = self.print(self.archived, self.step.spec.get("template", "EtichettaR5")) self.archived.label = compiled_label self.archived.save() self.next_timer.start(500) - elif self.step.type == "wait": + elif self.step.step_type == "wait": self.next_timer.start(500) # UPDATE COUNT DISPLAY self.update_count_display() @@ -390,7 +399,7 @@ class Test(Widget): # create step sequence list barcode_names = ['serial', 'barcode_input_2', 'barcode_input_3', 'barcode_input_4', 'barcode_input_5'] for i, step in enumerate(steps): - if step.type == "barcodes": + if step.step_type == "barcodes": n_pieces = int(step.spec.get("n_pieces", 1)) n_pieces_adapted = n_pieces if n_pieces_adapted == 1: @@ -403,63 +412,63 @@ class Test(Widget): steps.insert(i + 1, new_barcode_step) if i in skip: continue - if step.type == "vision": + if step.step_type == "vision": self.components["vision"].config_changed(vision_recipe=self.recipe.name) - if step.type == "count": + if step.step_type == "count": count_found = True if "warning_img" in step.spec: if step.spec["warning_img"]: - steps.insert(i, Steps(type="warning_img", spec={"warning_img": step.spec["warning_img"]})) + steps.insert(i, Step(step_type="warning_img", spec={"warning_img": step.spec["warning_img"]})) skip.add(i + 1) if "assembly" in step.spec: if step.spec["assembly"]: - steps.insert(i, Steps(type="instructions", spec={})) + steps.insert(i, Step(step_type="instructions", spec={})) skip.add(i + 1) if "require_discard_piece" in step.spec: if step.spec["require_discard_piece"]: self.require_discard_piece = True - if step.type == "resistance": # ADD STEP TO ENSURE REMOVAL OF CONNECTOR - steps.insert(i + 1, Steps(type="resistance", spec={ + if step.step_type == "resistance": # ADD STEP TO ENSURE REMOVAL OF CONNECTOR + steps.insert(i + 1, Step(step_type="resistance", spec={ "scale": 500, "expected": float("+inf"), "tolerance_pos": 0, "tolerance_neg": 0, })) skip.add(i + 1) - if step.type == "print": + if step.step_type == "print": if print_found: continue - steps.insert(i, Steps(type="done")) + steps.insert(i, Step(step_type="done")) print_found = True self.print_step = step if self.config["hardware_config"].get("enforce_piece_removal", "no") == "yes": - steps.append(Steps(type="piece_removal")) + steps.append(Step(step_type="piece_removal")) if count_found: - steps.append(Steps(type="count_end")) - if step.type in ("leak_1", "leak_2"): + steps.append(Step(step_type="count_end")) + if step.step_type in ("leak_1", "leak_2"): self.leak_step = step - step_types = [step.type for step in steps] + step_types = [step.step_type for step in steps] if "leak_1" in step_types and "leak_2" in step_types: leak1_index = step_types.index("leak_1") leak2_index = step_types.index("leak_2") if leak1_index + 1 == leak2_index: # Ensure 'leak_1' is immediately followed by 'leak_2' - steps.insert(leak2_index, Steps(type="instruction_extra", spec={})) + steps.insert(leak2_index, Step(step_type="instruction_extra", spec={})) inserted_instruction = True # Insert 'instruction_extra' after the first 'instructions' if not inserted between leaks if not inserted_instruction: for i, step in enumerate(steps): - if step.type == "instructions": - steps.insert(i + 1, Steps(type="instruction_extra", spec={})) + if step.step_type == "instructions": + steps.insert(i + 1, Step(step_type="instruction_extra", spec={})) inserted_instruction = True break if not print_found: - steps.append(Steps(type="done")) + steps.append(Step(step_type="done")) if count_found: - steps.append(Steps(type="count_end")) - steps.append(Steps(type="wait")) + steps.append(Step(step_type="count_end")) + steps.append(Step(step_type="wait")) self.cycle_steps = steps self.check_steps_dependencies(self.cycle_steps) leak_autotest_steps = [] @@ -475,32 +484,32 @@ class Test(Widget): l_at_2["test_pressure_qneg"] = l_at_2["test_pressure_tt_qneg"] l_at_2["test_pressure_qpos"] = l_at_2["test_pressure_tt_qpos"] l_at_2["autotest"] = "ok_check" - leak_autotest_steps = [Steps(type="leak_1", spec=l_at_1), Steps(type="leak_1", spec=l_at_2)] + leak_autotest_steps = [Step(step_type="leak_1", spec=l_at_1), Step(step_type="leak_1", spec=l_at_2)] self.autotest_cycle_steps = [ *([ - Steps(type="resistance", spec={ + Step(step_type="resistance", spec={ "scale": 500, "expected": 1, "tolerance_pos": 5, "tolerance_neg": 5, "autotest": True, }), - Steps(type="resistance", spec={ + Step(step_type="resistance", spec={ "scale": 500, "expected": float("+inf"), "tolerance_pos": 0, "tolerance_neg": 0, "autotest": True, }), - Steps(type="resistance", spec={ + Step(step_type="resistance", spec={ "scale": 500, "expected": 10, "tolerance_pos": 1, "tolerance_neg": 1, "autotest": True, }), - Steps(type="resistance", spec={ + Step(step_type="resistance", spec={ "scale": 500, "expected": float("+inf"), "tolerance_pos": 0, @@ -509,15 +518,15 @@ class Test(Widget): }), ] if "resistance" not in self.unsupported_steps else []), *(leak_autotest_steps), - Steps(type="done"), - Steps(type="wait"), + Step(step_type="done"), + Step(step_type="wait"), ] for w in self.cycle_available_steps.values(): if hasattr(w, "reset"): w.reset() # UPDATE RECIPE DISPLAY if self.recipe is not None: - self.log.info(f"set recipe: {model_to_dict(self.recipe)!r} cycle steps: {[model_to_dict(s) for s in self.cycle_steps]}") + self.log.info(f"set recipe: {model_to_dict(self.recipe)!r} cycle steps: {[s.step_type for s in self.cycle_steps]}") self.recipe_l.setText(self.recipe.name) self.recipe_l.setStyleSheet("") self.cycle_index = -1 @@ -531,13 +540,13 @@ class Test(Widget): unsupported_steps = set() missing_components = set() for step in steps: - if step.type in self.unsupported_steps or step.type not in self.cycle_available_steps: - unsupported_steps.add(step.type) + if step.step_type in self.unsupported_steps or step.step_type not in self.cycle_available_steps: + unsupported_steps.add(step.step_type) else: - for dependency in self.steps_dependencies.get(step.type, []): + for dependency in self.steps_dependencies.get(step.step_type, []): if isinstance(dependency, tuple): if all([d not in self.components for d in dependency]): - unsupported_steps.add(step.type) + unsupported_steps.add(step.step_type) else: unready = set() for d in dependency: @@ -552,7 +561,7 @@ class Test(Widget): missing_components.add(" or ".join(dependency)) else: if dependency not in self.components: - unsupported_steps.add(step.type) + unsupported_steps.add(step.step_type) else: if not self.components[dependency].ready: self.components[dependency].reconfigure() @@ -571,7 +580,7 @@ class Test(Widget): if step_name not in self.data: self.data[step_name] = {} if data is not None: - data["step"] = model_to_dict(self.step) + data["step"] = self.step.spec data["step"].pop("name", None) # MAKE ARRAY ONLY IF MORE THAN ONE TEST OF SAME TYPE @@ -589,7 +598,6 @@ class Test(Widget): # remove useless info self.data.get("recipe", {}).get("spec", {}).pop("steps", None) - self.data.get("recipe", {}).get("spec", {}).pop("available_steps", None) for leak in ["leak_1", "leak_2"]: if leak in self.data.keys(): results = {k: self.data[leak]["results"][self.tester_component][k] for k in ["Running test: result"]} @@ -680,31 +688,31 @@ class Test(Widget): "DESCRIPTION": self.labellify(recipe.get("description", "-")), "RECIPE_TO_PRINT": self.labellify(self.print_step.spec.get("labeltxt_5", "-").replace('{N11}', '')), # STEP SPEC - "TPREFILL": self.labellify(leak_test_1_step_spec.get("pre_filling_time", "-")), - "PPREFILL": self.labellify(leak_test_1_step_spec.get("pre_filling_pressure", "-")), - "TFILL": self.labellify(leak_test_1_step_spec.get("filling_time", "-")), - "TSET": self.labellify(leak_test_1_step_spec.get("settling_time", "-")), - "TPREFILL2": self.labellify(leak_test_2_step_spec.get("pre_filling_time", "-")), - "PPREFILL2": self.labellify(leak_test_2_step_spec.get("pre_filling_pressure", "-")), - "TFILL2": self.labellify(leak_test_2_step_spec.get("filling_time", "-")), - "TSET2": self.labellify(leak_test_2_step_spec.get("settling_time", "-")), - "PSETMINP": self.labellify(leak_test_1_step_spec.get("settling_pressure_min_percent", " -")), - "PSETMAXP": self.labellify(leak_test_1_step_spec.get("settling_pressure_max_percent", " -")), - "PSETMINP2": self.labellify(leak_test_2_step_spec.get("settling_pressure_min_percent", " -")), - "PSETMAXP2": self.labellify(leak_test_2_step_spec.get("settling_pressure_max_percent", " -")), + "TPREFILL": self.labellify(leak_test_1_step.get("pre_filling_time", "-")), + "PPREFILL": self.labellify(leak_test_1_step.get("pre_filling_pressure", "-")), + "TFILL": self.labellify(leak_test_1_step.get("filling_time", "-")), + "TSET": self.labellify(leak_test_1_step.get("settling_time", "-")), + "TPREFILL2": self.labellify(leak_test_2_step.get("pre_filling_time", "-")), + "PPREFILL2": self.labellify(leak_test_2_step.get("pre_filling_pressure", "-")), + "TFILL2": self.labellify(leak_test_2_step.get("filling_time", "-")), + "TSET2": self.labellify(leak_test_2_step.get("settling_time", "-")), + "PSETMINP": self.labellify(leak_test_1_step.get("settling_pressure_min_percent", " -")), + "PSETMAXP": self.labellify(leak_test_1_step.get("settling_pressure_max_percent", " -")), + "PSETMINP2": self.labellify(leak_test_2_step.get("settling_pressure_min_percent", " -")), + "PSETMAXP2": self.labellify(leak_test_2_step.get("settling_pressure_max_percent", " -")), "PSETMINP_A": self.labellify(psetminp_a), "PSETMAXP_A": self.labellify(psetmaxp_a), "PSETMINP2_A": self.labellify(psetminp2_a), "PSETMAXP2_A": self.labellify(psetmaxp2_a), - "TTEST": self.labellify(leak_test_1_step_spec.get("test_time", "-")), - "TTEST2": self.labellify(leak_test_2_step_spec.get("test_time", "-")), - "PMIN": self.labellify(leak_test_1_step_spec.get("test_pressure_qneg", "-")), - "PMIN2": self.labellify(leak_test_2_step_spec.get("test_pressure_qneg", "-")), - "PTEST": self.labellify(leak_test_1_step_spec.get("test_pressure", "-")), - "PTEST2": self.labellify(leak_test_2_step_spec.get("test_pressure", "-")), - "PMAX": self.labellify(leak_test_1_step_spec.get("test_pressure_qpos", "-")), - "TFLUSH": self.labellify(leak_test_1_step_spec.get("flush_time", "-")), - "PFLUSH": self.labellify(leak_test_1_step_spec.get("flush_pressure", "-")), + "TTEST": self.labellify(leak_test_1_step.get("test_time", "-")), + "TTEST2": self.labellify(leak_test_2_step.get("test_time", "-")), + "PMIN": self.labellify(leak_test_1_step.get("test_pressure_qneg", "-")), + "PMIN2": self.labellify(leak_test_2_step.get("test_pressure_qneg", "-")), + "PTEST": self.labellify(leak_test_1_step.get("test_pressure", "-")), + "PTEST2": self.labellify(leak_test_2_step.get("test_pressure", "-")), + "PMAX": self.labellify(leak_test_1_step.get("test_pressure_qpos", "-")), + "TFLUSH": self.labellify(leak_test_1_step.get("flush_time", "-")), + "PFLUSH": self.labellify(leak_test_1_step.get("flush_pressure", "-")), # ACTUAL TESTED VALUES "RESPFILL": self.labellify(leak_test_1_results.get("Running test: filling pressure", "-")), "RESPFILL2": self.labellify(leak_test_2_results.get("Running test: filling pressure", "-")), @@ -742,7 +750,7 @@ class Test(Widget): # RESULT "RESULT": str("CONFORME" if leak_test_1.get("ok", False) else "SCARTO") + str(" FORZATO" if self.data.get("overridden", False) else ""), "RESULT_L1": "ESITO" + str(" FORZATO" if self.data.get("overridden", False) else ""), - "RESULT_L2": str("CONFORME" if leak_test_1_results.get("ok", False) else "SCARTO"), + "RESULT_L2": str("CONFORME" if leak_test_1.get("ok", False) else "SCARTO"), } #TESTING BROTHER label_brother = context.get("RECIPE_TO_PRINT", "-") + context.get("DD","-") + context.get("MO","-") + context.get("YY","-") + context.get("SN5","-") @@ -775,7 +783,7 @@ class Test(Widget): def load_recipe_from_rfid(self, data): if data not in(None,''): self.tag_loaded_recipe = data - if self.step.type == "barcode_recipe_selection": + if self.step.step_type == "barcode_recipe_selection": if data is not None: self.cycle_available_steps["barcode_recipe_selection"].widget.get(data) else: diff --git a/src/ui/test_instructions/test_instructions.py b/src/ui/test_instructions/test_instructions.py index f87bce7..4b58ec7 100644 --- a/src/ui/test_instructions/test_instructions.py +++ b/src/ui/test_instructions/test_instructions.py @@ -28,7 +28,7 @@ class Test_Instructions(Test_Test): self.layout = QVBoxLayout() self.layout.addWidget(self.svg_widget) self.svg_w.setLayout(self.layout) - self.svg_path=os.path.join("config","instruction_images",self.config["machine"]["instruction_folder"],"") + self.svg_path=os.path.join("config","instruction_images",self.config["machine"].get("instruction_folder","generic"),"") self.timer = QTimer() self.timer.timeout.connect(self.toggle_icons) self.expected_input_state=True @@ -48,9 +48,9 @@ class Test_Instructions(Test_Test): self.get_connection = self.components["digital_io"].out.connect(self.get) if step is not None: - if step.type == "instruction": + if step.step_type == "instruction": svg_path = f"{self.svg_path}{self.recipe}.svg" - elif step.type == "instruction_extra": + elif step.step_type == "instruction_extra": svg_path = f"{self.svg_path}{self.recipe}-extra.svg" if not os.path.exists(svg_path): @@ -58,7 +58,7 @@ class Test_Instructions(Test_Test): self.svg_root = etree.parse(svg_path) self.svg_str = etree.tostring(self.svg_root) self.svg_str=etree.tostring(self.svg_root) - self.expected_input_state = True if step.type == "instruction" else False + self.expected_input_state = True if step.step_type == "instruction" else False self.monitored_ids=self.svg_root.xpath(f'''.//*[starts-with(@id, 'sensor_')]''') @@ -156,7 +156,7 @@ class Test_Instructions(Test_Test): QApplication.processEvents() def get(self, data=None, override=False): - if self.parent_assembly_widget().parent().step.type == "select_recipe": + if self.parent_assembly_widget().parent().step.step_type == "select_recipe": self.stop() return if self.done: # avoid proccessing if completed diff --git a/src/ui/test_leak/test_leak.py b/src/ui/test_leak/test_leak.py index 4fc8bd1..992727a 100644 --- a/src/ui/test_leak/test_leak.py +++ b/src/ui/test_leak/test_leak.py @@ -44,7 +44,7 @@ class Test_Leak(Test_Test): def start_test(self): # print extra labels - if self.step.type == "leak_1": + if self.step.step_type == "leak_1": self.parent.print_extra_labels() # SELECT TEST CHANNEL @@ -94,8 +94,8 @@ class Test_Leak(Test_Test): if show is False: return show - if "leak_2" in [s.type for s in self.parent.cycle_steps]: - if self.step.type=="leak_1": + if "leak_2" in [s.step_type for s in self.parent.cycle_steps]: + if self.step.step_type=="leak_1": self.test_num_l.setText("1/2") else: self.test_num_l.setText("2/2") @@ -144,8 +144,8 @@ class Test_Leak(Test_Test): time.sleep(2) # AUTO START SECOND TEST - if step.type == "leak_2": - if self.config["hardware_config"].get("dual_chanel","absent") == "present": + if step.step_type == "leak_2": + if self.config["hardware_config"].get("dual_chanel", "absent") == "present": self.recipe_written = False time.sleep(1) self.start_b.setEnabled(True)