diff --git a/CLAUDE.md b/CLAUDE.md index 632b181..10e7eca 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -46,12 +46,44 @@ XX. **Nome Problema (FIX/IMPLEMENTATO DATA):** - **Problema:** Descrizione breve ## Quick Start - Session Recovery -**Ultima sessione:** 30 Novembre 2025 +**Ultima sessione:** 29 Novembre 2025 (pomeriggio) **Stato progetto:** Migrazione Oracle APEX → .NET + React TypeScript in corso **Lavoro completato nell'ultima sessione:** +- **FIX: Campo Codice Readonly e Codice Alternativo** - COMPLETATO + - **Obiettivo:** Il campo "Codice" deve essere sempre auto-generato (non modificabile), aggiungere campo "Codice Alternativo" opzionale + - **Backend modificato:** + - `WarehouseArticle.cs` - Aggiunto `AlternativeCode` + - `WarehouseLocation.cs` - Aggiunto `AlternativeCode` + - `WarehouseArticleCategory.cs` - Aggiunto `AlternativeCode` + - `Cliente.cs` - Aggiunto `Codice` e `CodiceAlternativo` + - `Articolo.cs` - Aggiunto `CodiceAlternativo` + - `AutoCodeService.cs` - Aggiornato per gestire unicità `Cliente.Codice` + - `ClientiController.cs` - Auto-generazione codice alla creazione + - `ArticoliController.cs` - Auto-generazione codice alla creazione + - `WarehouseArticlesController.cs` - Fix DTOs per rimuovere `Code` obbligatorio: + - `CreateArticleDto` - Rimosso `Code`, aggiunto `AlternativeCode` + - `UpdateArticleDto` - Rimosso `Code`, aggiunto `AlternativeCode` + - `ArticleDto` - Aggiunto `AlternativeCode` + - `MapFromDto` - Rimossa assegnazione Code (generato da service) + - `UpdateFromDto` - Rimossa modifica Code (immutabile) + - Migration `AddAlternativeCodeFields` creata e applicata + - **Frontend modificato:** + - `frontend/src/modules/warehouse/types/index.ts` - Aggiunto `alternativeCode` ai DTOs + - `frontend/src/types/index.ts` - Aggiunto `codice` e `codiceAlternativo` a Cliente/Articolo + - `ArticleFormPage.tsx` - Campo Codice readonly con "(Generato al salvataggio)" + - `WarehouseLocationsPage.tsx` - Campo Codice readonly + - `ArticoliPage.tsx` - Campo Codice readonly + - `ClientiPage.tsx` - Campo Codice readonly + - **Comportamento UI:** + - In creazione: campo Codice mostra "(Generato al salvataggio)" in corsivo + - In modifica: campo Codice mostra il valore reale, sempre disabled + - Campo "Codice Alternativo" sempre modificabile (opzionale) + +**Lavoro completato nelle sessioni precedenti (30 Novembre 2025):** + - **NUOVA FEATURE: Sistema Codici Automatici Configurabili** - COMPLETATO - **Obiettivo:** Sistema admin per configurare la generazione automatica di codici (articoli, magazzini, movimenti, ecc.) - **Backend implementato:** @@ -2025,3 +2057,21 @@ public interface IWarehouseService if (code != null) article.Code = code; ``` + +36. **Campo Codice Readonly e Codice Alternativo (FIX 29/11/2025 pomeriggio):** + - **Problema:** Errore 400 Bad Request "The Code field is required" quando si creava un nuovo articolo di magazzino + - **Causa:** Il `CreateArticleDto` nel backend richiedeva il campo `Code` come obbligatorio, ma il frontend non lo inviava (correttamente, perché dovrebbe essere auto-generato) + - **Soluzione:** + - Backend: Modificato `CreateArticleDto` per rimuovere `Code` e aggiungere `AlternativeCode` opzionale + - Backend: Modificato `UpdateArticleDto` per rimuovere `Code` e aggiungere `AlternativeCode` + - Backend: Aggiunto `AlternativeCode` ad `ArticleDto` per la risposta + - Backend: Aggiornato `MapFromDto` per non settare `Code` (viene generato da `WarehouseService.CreateArticleAsync`) + - Backend: Aggiornato `UpdateFromDto` per non modificare `Code` (immutabile dopo creazione) + - Backend: Aggiornato `MapToDto` per includere `AlternativeCode` + - Frontend: I tipi erano già corretti, il form già mostrava "(Generato al salvataggio)" + - **File modificati:** + - `src/Apollinare.API/Modules/Warehouse/Controllers/WarehouseArticlesController.cs` + - **Comportamento risultante:** + - Creazione: `Code` generato automaticamente (es. `WA000001`), `AlternativeCode` opzionale + - Modifica: `Code` non modificabile, `AlternativeCode` modificabile + - UI: Campo Codice sempre disabled, mostra placeholder in creazione