====== 2802 - ULL IKEA con NiceLabel ====== [[..:faber:comm-1110|Link al progetto originale Messersì]] ==== ANALISI AgentStampa ==== **AGENTPRINTMSI** Richieste che effettua ad AGENTSTAMPA: 1) recprint -> ottiene il rec da stampare e lo salva sul database 2) printRecFromId -> ottiene il rec da stampare tramite query a etichetw 3) stampamanu -> effettua la stampa **AGENTSTAMPA** //(/code/cpp/module/service/palctrl/stampa/agentstampa.cpp)// L'agente si occupa di eseguire la stampa di etichette IKEA. Puo' stampare in due modalita': - stampa automatica: richiesta dall'agente java - stampa manuale: richiesta dall'interfaccia Il p.to 1) e 2) sono eseguiti attraverso la tell, rispettivamente: - request=**stampaauto**, p1=rec(codlotp), ritorna true se la stampa e' avvenuta correttamente - request=**stampamanu**, p1=rec(codart,peso,npz,yyww,codlotp,codsup,barcode,npzfmt), ove codart=codice articolo Ikea, peso=peso del bancale, npz=numero pezzi, yyww=anno/settimana, codlotp=codice lotto bancale; il nome del rec (rec.name=path_file) e' il path completo del file del layout da stampare; nel nume va indicato il numero di etichette da stampare Il rec da utilizzare per la stampa manuale puo' essere richiesto all'agente stesso attraverso la ask con: - request=**recprint**, p1=rec(codart,peso,npz,codlotp,codsup), p2=path_del_file l'agente restituisce il rec con tutti i dati compilati ==== RECPRINT ==== if(smsg->request=="recprint"){ rv = recprint(IREC_GETVALUE(p1, "codart"), IREC_GETVALUE(p1, "codsup"), atof(IREC_GETVALUE(p1, "pesotot")), atof(IREC_GETVALUE(p1, "peso")), atoi(IREC_GETVALUE(p1, "npz")), IREC_GETVALUE(p1, "codlotp"), p2->value(), atoi(IREC_GETVALUE(p1, "xinterfa")), atoi(IREC_GETVALUE(p1, "yinterfa")), atof(IREC_GETVALUE(p1, "stackcap"))); } **P1(REC):** codart, codsup, pesotot, peso, npz, codlotp, xinterfa, yinterfa, stackcap **P2 (String):** layout - Ottiene il numeratore attraverso una getnume della tabella 'ikeapiano' sul campo 'codice' per ottenere un codice per il PIANO del pallet - Prepara un REC con i seguenti campi: * 0, "codart" * 1, "peso" * 2, "npzfmt" * 3, "yyww" * 4, "codlotp" * 5, "codsup" * 6, "barcode" * 7, "npz" * 8, "idetic" * 9, "layout" * 10, "tm" * 11, "pesotot" * 12, "xinterfa" * 13, "yinterfa" * 14, "stackcap" - Popola il REC con i valori ottenuti da parametro. Aggiunge 'npzfmt' con il npz formattato a 3 cifre e 'yyww' basata sulla data odierna - Elabora il codice del piano nel seguente modo: char copas[51]; int totlen=17; int bcforlen=m_bcforinfo->size(); char fmt[51]; sprintf(fmt, "%%0%dd", totlen-bcforlen); sprintf(copas, fmt, copa); - "identic" -> numeratore ottenuto nel punto 1 - Prepara il codice a barre in questo modo: sprintf(s, "%s%s", m_bcforinfo->value(), copas); dove 'm_bcforinfo' -> dato fisso del fornitore per il codice a barre EAN128 - !!! FA UNA DOWNLOAD DEL REC SUL **DATABASE** !!! - Imposta il nome del REC con il valore del 'layout' - Ritorna il REC creato ==== RECPRINTFROMID ==== if(smsg->request=="recprintfromid"){ rv = recprintfromid(atoi(IREC_GETVALUE(p1, "idetic")), p2->value()); } **P1(REC):** identic **P2 (String):** layout - Mi estraggo dal database una riga di etichetw tramite il codice di idetic ricevuto nel p1 - Imposta il nome del REC con il layout ricevuto nel p2 - Ritorna il REC creato ==== STAMPAMANU ==== if(smsg->request=="stampamanu"){ rv = excprint(p1, smsg->nume); } Presente un #define che distingue le funzionalità della funzione excprint **IFDEF PRINT_CODESOFT**: - Connesione con agentRemoteCS per stampa con codesoft - Richiesta del REC per la stampa all'agentRemoteCS - Popolazione del REC: - filename = nome del REC p1 - codedb = p1["identic"] - qtalotti = nume ricevuto - qtacopie = "1" FISSO - printer = parametro agente m_printer - Richiesta di stampa inviata ad agentRemoteCS con request "print" passando il REC creato come parametro - Impostato un wait di 250 ms - Ritorna un booleano in base alla riuscita o meno della stampa **ELSE**: - Apertura\scrittura del file con il nome del file uguale al nome del REC ricevuto nel p1 - Determina la dimensione del file, aggiunge 512 byte per eventuali sostituzioni, e alloca un buffer per contenere i dati del file. - Legge il contenuto del file nel buffer e chiude il file. - Preparazione dei tag (5 tag) - Crea un oggetto CTag con un numero di tag pari al numero di campi di rp meno 2. - Imposta i tag e i valori corrispondenti ottenuti dai campi di rp. - Apre il file **"/code/etichetta.txt"** e scrive il contenuto del buffer su questo file - Crea un oggetto IConnSock e tenta di connettersi a un socket utilizzando m_port e m_ipaddr - Se la connessione ha successo, invia il contenuto del buffer n (nume ricevuto) volte, attendendo 200 millisecondi tra ogni invio. - Libera la memoria del buffer e dell'oggetto CTag. - Restituisce true se almeno un invio è avvenuto con successo, altrimenti false. ==== TEST DEL 08/08/2024 ==== * Nuovo Server: FFO94G => 10.205.1.94 * Vecchio Server (pallettizzatori): FFI78G => 10.205.1.78 === IAF === * ✅ Configurare su Nicelabel la stampante dello stampa e applica (vedere marca e modello da codesoft), nome stampante **PE** * ✅ Verificare che /mnt/nicelabel sia montata * Avviare il serizio /etc/next/xnet_agents_stampa.xml su FFO94G * Avviare il serizio /etc/next/xnet_agents_nicelabel.xml su FFO94G * Stoppare il servizio /etc/next/xnet_agents_packmsi.xml su FFI78G * Avviare il serizio /etc/next/xnet_agents_packmsi.xml su FFO94G * Configurare le piattaforme su monit === GUI === * Sostituire pagina di ristampa su PC in magazzino con (NL=1 abilita la stampa via NiceLabel) https://ffo94g/isw/webapp/faber/trace/main/mini/ristampa?limit=20&offset=0&NL=1&user=d6e4a9b6646c62fc48baa6dd6150d1f7 * Cambiare /www/webapp/faber/kiosk/redirect/index.php per puntare su FFO94G === Appunti === PAGINA DI STAMPA: https://ffo94g/isw/webapp/faber/trace/main/mini/ristampa?limit=20&offset=0&NL=1 Accesso server VECCHIO pallettizzatori: ssh next@10.205.1.78 Accesso server NUOVO: Server nuovo da utilizzare: ffo94g ssh nextop@10.205.1.94 pwd: -Ujn-sjXm9mn Cartella condivisa: /mnt/nicelabel Comando di mount: sudo mount.cifs '\\ffo128g\fromNext' /tmp/mnttest -o 'user=ffo-next@faberspa.com,pass=mH?JQtY!Kz%u,uid=1001' La cartella condivisa da montare si trova in FFO128G (10.205.1.128) \\ffo128g\fromNext PERCORSO XML NICELABEL: xnetagents /etc/next/xnet_agents_nicelabel.xml COMANDO OSSERVA FOLDER watch ls -l /mnt/nicelabel ------------------------------------------------------- INFO FILE ------------------------------------------------------------------------------------------------ lbl_printer -> PE = Invio stampa al Print Engine della P/A Arca DP = Invio stampa sulla Desktop Printer lbl_name lbl_printer lbl_quantity idetic codart peso npzfmt yyww yymmdd barcode npz xinterfa yinterfa stackcap supplier