This commit is contained in:
2025-11-29 16:06:13 +01:00
parent c7dbcde5dd
commit cedcc503fa
34 changed files with 9097 additions and 191 deletions

182
CLAUDE.md
View File

@@ -46,12 +46,103 @@ XX. **Nome Problema (FIX/IMPLEMENTATO DATA):** - **Problema:** Descrizione breve
## Quick Start - Session Recovery
**Ultima sessione:** 29 Novembre 2025 (sera)
**Ultima sessione:** 30 Novembre 2025
**Stato progetto:** Migrazione Oracle APEX → .NET + React TypeScript in corso
**Lavoro completato nell'ultima sessione:**
- **NUOVA FEATURE: Sistema Codici Automatici Configurabili** - COMPLETATO
- **Obiettivo:** Sistema admin per configurare la generazione automatica di codici (articoli, magazzini, movimenti, ecc.)
- **Backend implementato:**
- `AutoCode.cs` - Entity con pattern configurabile, prefisso, sequenza, reset periodico
- `AutoCodeService.cs` - Logica business (generazione, preview, reset, validazione pattern)
- `AutoCodesController.cs` - API REST complete
- Migration EF Core `AddAutoCodeSystem`
- Seed automatico configurazioni default per tutte le entità
- **Frontend implementato:**
- `autoCode.ts` - Types TypeScript
- `autoCodeService.ts` - API calls
- `AutoCodesAdminPage.tsx` - Pagina admin con tabella configurazioni, dialog modifica, guida pattern
- **Pattern supportati:**
- `{PREFIX}` - Prefisso configurabile
- `{SEQ:n}` - Sequenza numerica con n cifre
- `{YYYY}`, `{YY}` - Anno
- `{MM}`, `{DD}` - Mese, Giorno
- **Funzionalità:**
- Configurazione per entità (warehouse_article, stock_movement, cliente, evento, ecc.)
- Reset sequenza annuale o mensile automatico
- Preview prossimo codice senza incremento
- Reset manuale sequenza
- Abilitazione/disabilitazione per entità
- Raggruppamento per modulo nell'UI
- **API Endpoints:**
- `GET /api/autocodes` - Lista configurazioni
- `GET /api/autocodes/{entityCode}` - Dettaglio
- `GET /api/autocodes/{entityCode}/preview` - Anteprima prossimo codice
- `POST /api/autocodes/{entityCode}/generate` - Genera nuovo codice
- `PUT /api/autocodes/{id}` - Aggiorna configurazione
- `POST /api/autocodes/{entityCode}/reset-sequence` - Reset sequenza
- `GET /api/autocodes/placeholders` - Lista placeholder disponibili
- **File principali:**
- `src/Apollinare.Domain/Entities/AutoCode.cs`
- `src/Apollinare.API/Services/AutoCodeService.cs`
- `src/Apollinare.API/Controllers/AutoCodesController.cs`
- `frontend/src/pages/AutoCodesAdminPage.tsx`
**Lavoro completato nelle sessioni precedenti (29 Novembre 2025 notte):**
- **NUOVA FEATURE: Modulo Magazzino (warehouse)** - COMPLETATO
- **Backend implementato:**
- Entities complete in `/src/Apollinare.Domain/Entities/Warehouse/`:
- `WarehouseLocation.cs` - Magazzini fisici/logici con Type enum (Physical, Virtual, Transit)
- `WarehouseArticleCategory.cs` - Categorie gerarchiche con Color, Icon, Level, FullPath
- `WarehouseArticle.cs` - Articoli con batch/serial management flags, valorizzazione
- `ArticleBatch.cs` - Tracciabilità lotti con scadenza
- `ArticleSerial.cs` - Tracciabilità numeri seriali
- `StockLevel.cs` - Giacenze per articolo/magazzino/batch
- `StockMovement.cs` - Movimenti (Inbound/Outbound/Transfer/Adjustment)
- `StockMovementLine.cs` - Righe movimento
- `MovementReason.cs` - Causali movimento
- `ArticleBarcode.cs` - Multi-barcode support
- `StockValuation.cs` + `StockValuationLayer.cs` - Valorizzazione periodo e layer FIFO/LIFO
- `InventoryCount.cs` + `InventoryCountLine.cs` - Inventari fisici
- Service completo `WarehouseService.cs` con:
- CRUD articoli, categorie, magazzini
- Gestione movimenti (carico/scarico/trasferimento/rettifica)
- Conferma movimenti con aggiornamento giacenze
- Calcolo valorizzazione (WeightedAverage, FIFO, LIFO, StandardCost)
- Gestione partite e seriali
- Controllers REST in `/src/Apollinare.API/Modules/Warehouse/Controllers/`:
- `WarehouseLocationsController.cs`
- `WarehouseArticlesController.cs`
- `WarehouseArticleCategoriesController.cs`
- `StockMovementsController.cs`
- `StockLevelsController.cs`
- Seed dati default (magazzino principale + transito, categorie base, causali)
- **CONFIGURAZIONE: EF Core Code First Migrations** - COMPLETATO
- **Problema:** Le tabelle venivano create manualmente invece che con migrations EF Core
- **Soluzione implementata:**
- Sostituito `db.Database.EnsureCreated()` con `db.Database.MigrateAsync()` in `Program.cs`
- Creata migration `InitialCreate` con tutte le tabelle (sistema + moduli + warehouse)
- Le migrations vengono applicate **automaticamente all'avvio** dell'applicazione
- Logging delle migrations pendenti prima dell'applicazione
- **Comandi per future migrations:**
```bash
# Creare nuova migration
dotnet ef migrations add NomeMigration \
--project src/Apollinare.Infrastructure \
--startup-project src/Apollinare.API
# L'applicazione è AUTOMATICA all'avvio - non serve "dotnet ef database update"
```
- **File modificati:** `Program.cs`, `src/Apollinare.Infrastructure/Migrations/`
**Lavoro completato nelle sessioni precedenti (29 Novembre 2025 sera):**
- **NUOVA FEATURE: Sistema Moduli Applicativi** - COMPLETATO (continuazione)
- **Obiettivo:** Sistema di modularizzazione per gestire licenze, abbonamenti e funzionalità dinamiche
- **Backend implementato:**
@@ -318,11 +409,14 @@ XX. **Nome Problema (FIX/IMPLEMENTATO DATA):** - **Problema:** Descrizione breve
**MODULI BUSINESS (PRIORITÀ ALTA):**
1. [ ] **Implementare modulo Magazzino (warehouse)** - Base per tutti gli altri
2. [ ] **Implementare modulo Acquisti (purchases)** - Dipende da Magazzino
3. [ ] **Implementare modulo Vendite (sales)** - Dipende da Magazzino
4. [ ] **Implementare modulo Produzione (production)** - Dipende da Magazzino
5. [ ] **Implementare modulo Qualità (quality)** - Indipendente
1. [x] **Implementare modulo Magazzino (warehouse)** - COMPLETATO (backend)
- Backend: Entities, Service, Controllers, API completi
- Manca: Frontend (pagine React per gestione articoli, movimenti, giacenze)
2. [ ] **Frontend modulo Magazzino** - Pagine React per warehouse
3. [ ] **Implementare modulo Acquisti (purchases)** - Dipende da Magazzino
4. [ ] **Implementare modulo Vendite (sales)** - Dipende da Magazzino
5. [ ] **Implementare modulo Produzione (production)** - Dipende da Magazzino
6. [ ] **Implementare modulo Qualità (quality)** - Indipendente
**Report System (completamento):**
@@ -1855,3 +1949,79 @@ public interface IWarehouseService
- `ModulePurchasePage.tsx`: Rimosso `moduleService` import
- `ModulesAdminPage.tsx`: Rimosso `PowerIcon`, `CheckIcon`, `CancelIcon`
- **File:** Vari componenti frontend
33. **EF Core Code First vs Database First (FIX 29/11/2025):**
- **Problema:** Le tabelle venivano create manualmente con SQL invece di usare EF Core migrations
- **Causa:** `db.Database.EnsureCreated()` non supporta migrations e crea le tabelle direttamente
- **Soluzione:**
- Sostituito `EnsureCreated()` con `MigrateAsync()` in `Program.cs`
- Rimosso database e migrations esistenti
- Creata nuova migration `InitialCreate` con `dotnet ef migrations add`
- Le migrations vengono ora applicate automaticamente all'avvio
- **File:** `Program.cs`, `src/Apollinare.Infrastructure/Migrations/20251129134709_InitialCreate.cs`
34. **Modulo Warehouse - Struttura Completa (IMPLEMENTATO 29/11/2025):**
- **Entities in `/src/Apollinare.Domain/Entities/Warehouse/`:**
- `WarehouseLocation.cs` - Magazzini (Physical, Virtual, Transit)
- `WarehouseArticle.cs` - Articoli con batch/serial flags
- `WarehouseArticleCategory.cs` - Categorie gerarchiche
- `ArticleBatch.cs` - Lotti con scadenza
- `ArticleSerial.cs` - Numeri seriali
- `StockLevel.cs` - Giacenze
- `StockMovement.cs` + `StockMovementLine.cs` - Movimenti
- `MovementReason.cs` - Causali
- `ArticleBarcode.cs` - Multi-barcode
- `StockValuation.cs` + `StockValuationLayer.cs` - Valorizzazione
- `InventoryCount.cs` + `InventoryCountLine.cs` - Inventari
- **Service:** `WarehouseService.cs` con CRUD completo, movimenti, giacenze, valorizzazione
- **Controllers:** `WarehouseLocationsController`, `WarehouseArticlesController`, `WarehouseArticleCategoriesController`, `StockMovementsController`, `StockLevelsController`
- **API Endpoints principali:**
- `GET/POST /api/warehouse/locations` - Magazzini
- `GET/POST /api/warehouse/articles` - Articoli
- `GET/POST /api/warehouse/categories` - Categorie
- `POST /api/warehouse/movements/inbound` - Carichi
- `POST /api/warehouse/movements/outbound` - Scarichi
- `POST /api/warehouse/movements/{id}/confirm` - Conferma movimento
- `GET /api/warehouse/articles/{id}/stock` - Giacenza articolo
35. **Sistema Codici Automatici Configurabili (IMPLEMENTATO 30/11/2025):**
- **Obiettivo:** Sistema per generare automaticamente codici univoci per tutte le entità (articoli, magazzini, movimenti, clienti, eventi, ecc.)
- **Entity:** `AutoCode.cs` in `/src/Apollinare.Domain/Entities/`
- `EntityCode` - Identificativo entità (es. "warehouse_article")
- `EntityName` - Nome visualizzato
- `Prefix` - Prefisso per {PREFIX}
- `Pattern` - Pattern con placeholder (es. "{PREFIX}{YYYY}-{SEQ:5}")
- `LastSequence` - Ultimo numero usato
- `ResetSequenceYearly` / `ResetSequenceMonthly` - Reset automatico
- `IsEnabled` - Abilita generazione
- `IsReadOnly` - Codice non modificabile
- `ModuleCode` - Raggruppa per modulo
- **Service:** `AutoCodeService.cs` in `/src/Apollinare.API/Services/`
- `GenerateNextCodeAsync(entityCode)` - Genera e incrementa
- `PreviewNextCodeAsync(entityCode)` - Anteprima senza incremento
- `IsCodeUniqueAsync(entityCode, code)` - Verifica univocità
- `ResetSequenceAsync(entityCode)` - Reset manuale
- `SeedDefaultConfigurationsAsync()` - Seed configurazioni default
- **Controller:** `AutoCodesController.cs`
- **Frontend:**
- `AutoCodesAdminPage.tsx` - Pagina admin con accordions per modulo
- `autoCodeService.ts` - API calls
- `autoCode.ts` - Types
- **Pattern supportati:**
- `{PREFIX}` - Prefisso configurabile
- `{SEQ:n}` - Sequenza con n cifre (es. {SEQ:5} → 00001)
- `{YYYY}`, `{YY}` - Anno 4 o 2 cifre
- `{MM}`, `{DD}` - Mese e giorno
- Testo statico (es. "-", "/")
- **Entità preconfigurate:**
- Core: cliente, evento, articolo
- Warehouse: warehouse_location, warehouse_article, warehouse_category, stock_movement, inventory_count, article_batch
- Purchases (future): purchase_order, supplier
- Sales (future): sales_order, invoice
- **Esempio utilizzo nel codice:**
```csharp
// Nel service che crea un articolo
var code = await _autoCodeService.GenerateNextCodeAsync("warehouse_article");
if (code != null)
article.Code = code;
```