====== 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