Sistemato magazzino
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
import { PrismaClient, StatoMateriale } from "@prisma/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
// Placeholder di orgId per il materiale di catalogo seedato manualmente (non riconducibile
|
||||
// a nessuna organizzazione reale), analogo a UTENTE_MODIFICA="MANUALE" nel seed di attivita-be.
|
||||
const ORG_SISTEMA = "SISTEMA";
|
||||
|
||||
async function main() {
|
||||
const materiali = [
|
||||
{ id: "materiale-corda", nome: "Corda", categoria: "Attrezzatura", unitaMisura: "pz" },
|
||||
{ id: "materiale-torcia", nome: "Torcia", categoria: "Attrezzatura", unitaMisura: "pz" },
|
||||
{
|
||||
id: "materiale-kit-primo-soccorso",
|
||||
nome: "Kit primo soccorso",
|
||||
categoria: "Sicurezza",
|
||||
unitaMisura: "kit",
|
||||
},
|
||||
{ id: "materiale-tenda", nome: "Tenda", categoria: "Campeggio", unitaMisura: "pz" },
|
||||
{
|
||||
id: "materiale-fornello-campo",
|
||||
nome: "Fornello da campo",
|
||||
categoria: "Campeggio",
|
||||
unitaMisura: "pz",
|
||||
},
|
||||
{
|
||||
id: "materiale-zaino",
|
||||
nome: "Zaino",
|
||||
categoria: "Equipaggiamento personale",
|
||||
unitaMisura: "pz",
|
||||
},
|
||||
{
|
||||
id: "materiale-sacco-a-pelo",
|
||||
nome: "Sacco a pelo",
|
||||
categoria: "Equipaggiamento personale",
|
||||
unitaMisura: "pz",
|
||||
},
|
||||
{
|
||||
id: "materiale-borraccia",
|
||||
nome: "Borraccia",
|
||||
categoria: "Equipaggiamento personale",
|
||||
unitaMisura: "pz",
|
||||
},
|
||||
{ id: "materiale-garze", nome: "Garze", categoria: "Sicurezza", unitaMisura: "pz" },
|
||||
{ id: "materiale-cerotti", nome: "Cerotti", categoria: "Sicurezza", unitaMisura: "pz" },
|
||||
{
|
||||
id: "materiale-disinfettante",
|
||||
nome: "Disinfettante",
|
||||
categoria: "Sicurezza",
|
||||
unitaMisura: "flacone",
|
||||
},
|
||||
];
|
||||
await Promise.all(
|
||||
materiali.map((materiale) =>
|
||||
prisma.materiale.upsert({
|
||||
where: { id: materiale.id },
|
||||
update: {
|
||||
...materiale,
|
||||
stato: StatoMateriale.approvato,
|
||||
propostoDaOrgId: ORG_SISTEMA,
|
||||
},
|
||||
create: {
|
||||
...materiale,
|
||||
stato: StatoMateriale.approvato,
|
||||
propostoDaOrgId: ORG_SISTEMA,
|
||||
},
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
const tipiEvento = [
|
||||
{ id: "tipo-evento-uscita-giorno", nome: "Uscita di un giorno" },
|
||||
{ id: "tipo-evento-campo-estivo", nome: "Campo estivo" },
|
||||
{ id: "tipo-evento-riunione-settimanale", nome: "Riunione settimanale" },
|
||||
];
|
||||
await Promise.all(
|
||||
tipiEvento.map((tipoEvento) =>
|
||||
prisma.tipoEvento.upsert({
|
||||
where: { id: tipoEvento.id },
|
||||
update: { nome: tipoEvento.nome },
|
||||
create: tipoEvento,
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
// Le ex "liste modello" sono ora liste unificate: pubbliche, già approvate dalla
|
||||
// moderazione, senza autore/org (scritte direttamente dal seed, come farebbe un
|
||||
// moderatore in bypass della coda di proposte).
|
||||
const listeModello = [
|
||||
{
|
||||
id: "lista-modello-uscita-giorno",
|
||||
nome: "Materiale base uscita giornaliera",
|
||||
tipoEventoId: "tipo-evento-uscita-giorno",
|
||||
},
|
||||
{
|
||||
id: "lista-modello-campo-estivo",
|
||||
nome: "Materiale base campo estivo",
|
||||
tipoEventoId: "tipo-evento-campo-estivo",
|
||||
},
|
||||
// Sotto-lista "foglia" (nessuna sotto-lista propria): allegata come sotto-lista sia a
|
||||
// "uscita di un giorno" sia a "campo estivo", al posto del vecchio materiale generico
|
||||
// "materiale-kit-primo-soccorso", per verificare il nesting a un livello.
|
||||
{
|
||||
id: "lista-modello-kit-primo-soccorso",
|
||||
nome: "Kit di pronto soccorso",
|
||||
tipoEventoId: "tipo-evento-uscita-giorno",
|
||||
},
|
||||
];
|
||||
for (const listaModello of listeModello) {
|
||||
await prisma.lista.upsert({
|
||||
where: { id: listaModello.id },
|
||||
update: { ...listaModello, stato: "pubblico", statoModerazione: "approvato" },
|
||||
create: {
|
||||
...listaModello,
|
||||
orgId: null,
|
||||
creataDaUserId: null,
|
||||
stato: "pubblico",
|
||||
statoModerazione: "approvato",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
const listeModelloVoci = [
|
||||
{ listaId: "lista-modello-uscita-giorno", materialeId: "materiale-zaino", quantita: 1 },
|
||||
{
|
||||
listaId: "lista-modello-uscita-giorno",
|
||||
materialeId: "materiale-borraccia",
|
||||
quantita: 1,
|
||||
},
|
||||
{ listaId: "lista-modello-uscita-giorno", materialeId: "materiale-torcia", quantita: 1 },
|
||||
{ listaId: "lista-modello-campo-estivo", materialeId: "materiale-tenda", quantita: 1 },
|
||||
{
|
||||
listaId: "lista-modello-campo-estivo",
|
||||
materialeId: "materiale-sacco-a-pelo",
|
||||
quantita: 1,
|
||||
},
|
||||
{
|
||||
listaId: "lista-modello-campo-estivo",
|
||||
materialeId: "materiale-fornello-campo",
|
||||
quantita: 1,
|
||||
},
|
||||
{ listaId: "lista-modello-campo-estivo", materialeId: "materiale-corda", quantita: 2 },
|
||||
// Voci della sotto-lista "Kit di pronto soccorso" (foglia, allegata sotto a due liste diverse).
|
||||
{ listaId: "lista-modello-kit-primo-soccorso", materialeId: "materiale-garze", quantita: 3 },
|
||||
{
|
||||
listaId: "lista-modello-kit-primo-soccorso",
|
||||
materialeId: "materiale-cerotti",
|
||||
quantita: 10,
|
||||
},
|
||||
{
|
||||
listaId: "lista-modello-kit-primo-soccorso",
|
||||
materialeId: "materiale-disinfettante",
|
||||
quantita: 1,
|
||||
},
|
||||
];
|
||||
|
||||
// Rimuove il vecchio materiale generico "kit primo soccorso" piazzato direttamente nelle due
|
||||
// liste padre: da questo seed in poi il kit è la sotto-lista dedicata, non più una singola voce.
|
||||
await prisma.listaVoce.deleteMany({
|
||||
where: {
|
||||
materialeId: "materiale-kit-primo-soccorso",
|
||||
listaId: { in: ["lista-modello-uscita-giorno", "lista-modello-campo-estivo"] },
|
||||
},
|
||||
});
|
||||
|
||||
for (const voce of listeModelloVoci) {
|
||||
await prisma.listaVoce.upsert({
|
||||
where: {
|
||||
listaId_materialeId: {
|
||||
listaId: voce.listaId,
|
||||
materialeId: voce.materialeId,
|
||||
},
|
||||
},
|
||||
update: { quantita: voce.quantita },
|
||||
create: voce,
|
||||
});
|
||||
}
|
||||
|
||||
const sottoListe = [
|
||||
{ listaId: "lista-modello-uscita-giorno", sottoListaId: "lista-modello-kit-primo-soccorso" },
|
||||
{ listaId: "lista-modello-campo-estivo", sottoListaId: "lista-modello-kit-primo-soccorso" },
|
||||
];
|
||||
for (const sottoLista of sottoListe) {
|
||||
await prisma.listaSottoLista.upsert({
|
||||
where: {
|
||||
listaId_sottoListaId: {
|
||||
listaId: sottoLista.listaId,
|
||||
sottoListaId: sottoLista.sottoListaId,
|
||||
},
|
||||
},
|
||||
update: {},
|
||||
create: sottoLista,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
process.exitCode = 1;
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
Reference in New Issue
Block a user