Buongiorno,
Da una settimana e qualcosa mi trovo di fronte a questo rompicapo con Google Sheet e AppScript.
La mia intenzione è quella di facilitare il lavoro ai miei colleghi quando fanno i carichi del Bar (lavoro in un ristorante).
Questi al momento lavorano su un foglio Excel privo di funzionalità, in cui si trovano ad effettuare diversi passaggi:
- Aggiornare l'inventario (Trascrizione del testo manuale con l'errore del conteggio)
- Stendere la lista dei carichi (Al momento carta e penna)
- Inviare un Email di Report + Firma del responsabile in turno.
Il tutto è presente su un unico foglio denominato “Inventario” ove è presente la tabella con i vari elementi e le quantità presente.
Per semplificare in un primo momento la cosa, ho scritto il seguente codice, incorporato al precedente foglio + un foglio denominato “Carichi”
function onEdit(e) {
var range = e.range;
var sheet = range.getSheet();
var sheetName = sheet.getName();
// Verifica se la modifica è stata effettuata nel foglio "Carichi"
if (sheetName === "Carichi") {
var row = range.getRow();
var column = range.getColumn();
// Verifica se la modifica è stata effettuata nella casella di controllo C13
if (range.getA1Notation() === "C13" && e.value === "TRUE") {
// Azzerare la casella di controllo dopo la conferma
range.setValue("FALSE");
// Esegui la sottrazione delle quantità nel foglio "Inventario"
var carichiRange = sheet.getRange("B2:C12");
var carichiData = carichiRange.getValues();
var inventorySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Inventario");
var inventoryRange = inventorySheet.getRange("B2:C");
var inventoryData = inventoryRange.getValues();
for (var i = 0; i < carichiData.length; i++) {
var productName = carichiData[i][0];
var quantity = carichiData[i][1];
if (productName !== "") {
for (var j = 0; j < inventoryData.length; j++) {
if (inventoryData[j][0] === productName) {
inventoryData[j][1] = inventoryData[j][1] - quantity;
break;
}
}
}
}
inventoryRange.setValues(inventoryData);
// Azzerare solo le quantità nel foglio "Carichi" dopo la conferma
for (var i = 0; i < carichiData.length; i++) {
carichiData[i][1] = "";
}
carichiRange.setValues(carichiData);
}
}
}
Questo codice permette dunque, in collaborazione con gli altri, di accedere a questo “Blocco appunti” e scrivere cosa si è preso man mano durante l'arco della giornata. Chi andrà a chiudere il Bar, avrà semplicemente il compito di cliccare sulla casella di controllo presente in C13.
In quanto l'inventario si estende oltre i 50 prodotti diversi, il blocco appunti Carichi, si estende ad una dozina, con la possibilità di scegliere il prodotto a caricare, al momento impostato di default su prodotti usati quotidianamente (Funzione indiretta di Remind).
Fin qui tutto funziona (Aggiorna l'inventario, resetta il blocco appunti, e la casella si resetta per il prossimo carico successivo)
Il problema:
Ho cercato in tutti i modi di integrare la possibilità di mandare la mail al momento del “Check C13”.
I permessi sono stati dati, Debug pure, prove su altri fogli. Anzi, la mail di prova la mando correttamente, anche dal medesimo foglio.
Ma non manda la tabella dei carichi ove ipotizziamo sarebbe:
"Il bar è in linea per il servizio di domani, sono stati caricati:
- 2 Casse di Acqua Panna
- 6 Coca Cola
- 3 Succhi di arancia
Cordialmente, Hugo"
Vi potrei mandare tutte le bozze eseguite sin'ora ma penso che creerei solamente confusione.
(Tra quelle separate da OnEdit, integrate, prive di ricalcolo inventario, SendMail o GmailSend ecc)
Ringrazio d'anticipo chi si investirà ad aiutarmi con questo problema, rimango a disposizione per qualsiasi chiarimento.
P.s.: Spero di scrivere nella sezione giusta, non sapevo se era piu opportuno su excel o in JavaScript.