From 6675e24a5a01670b8890f4fc29423de844591714 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 9 Nov 2025 09:02:28 +0000 Subject: [PATCH] docs: Add comprehensive wizard API integration status document --- WIZARD_API_INTEGRATION_STATUS.md | 255 +++++++++++++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 WIZARD_API_INTEGRATION_STATUS.md diff --git a/WIZARD_API_INTEGRATION_STATUS.md b/WIZARD_API_INTEGRATION_STATUS.md new file mode 100644 index 00000000..044afbab --- /dev/null +++ b/WIZARD_API_INTEGRATION_STATUS.md @@ -0,0 +1,255 @@ +# Wizard API Integration Status + +## Summary + +This document tracks the progress of replacing mock data and console.log placeholders with full API integration across all unified add wizards. + +## Completed ✅ + +### 1. Quality Template Wizard +**File**: `frontend/src/components/domain/unified-wizard/wizards/QualityTemplateWizard.tsx` +**Status**: ✅ **Fully Implemented** + +**Changes Made**: +- Fixed bug: Changed `onNext` to `onComplete` in component props +- Added full API integration using `qualityTemplateService.createTemplate()` +- Added tenant ID retrieval via `useTenant()` hook +- Added loading states with spinner during API calls +- Added error handling with user-friendly error messages +- Removed console.log, now saves to backend database + +**API Used**: +- `POST /tenants/{tenant_id}/production/quality-templates` + +### 2. Equipment Wizard +**File**: `frontend/src/components/domain/unified-wizard/wizards/EquipmentWizard.tsx` +**Status**: ✅ **Fully Implemented** + +**Changes Made**: +- Added full API integration using `equipmentService.createEquipment()` +- Added tenant ID retrieval via `useTenant()` hook +- Added loading states with spinner during API calls +- Added error handling with user-friendly error messages +- Removed console.log, now saves to backend database + +**API Used**: +- `POST /tenants/{tenant_id}/production/equipment` + +### 3. Team Member Wizard +**File**: `frontend/src/components/domain/unified-wizard/wizards/TeamMemberWizard.tsx` +**Status**: ✅ **Fully Implemented** + +**Changes Made**: +- Added full API integration using `authService.register()` +- Added tenant ID retrieval via `useTenant()` hook +- Added loading states with spinner during API calls +- Added error handling with user-friendly error messages +- Removed console.log, now creates actual user accounts +- Generates temporary password for new team members + +**API Used**: +- `POST /auth/register` + +**Notes**: +- In production, temporary password should be sent via email +- Permissions (canManageInventory, etc.) should be stored in separate permissions table +- User-tenant-role relationship should be properly linked + +## Partially Completed 🟡 + +### 4. Inventory Wizard +**File**: `frontend/src/components/domain/unified-wizard/wizards/InventoryWizard.tsx` +**Status**: 🟡 **Previously Implemented (from earlier commits)** + +This wizard was fully implemented in previous commits with proper API integration. + +### 5. Sales Entry Wizard +**File**: `frontend/src/components/domain/unified-wizard/wizards/SalesEntryWizard.tsx` +**Status**: 🟡 **Partially Complete - Needs File Upload Implementation** + +**Current State**: +- Manual entry flow is complete with UI +- File upload step shows placeholder + +**Remaining Work**: +- Implement file upload functionality using `salesService.importSalesData()` +- Add CSV/Excel file validation using `salesService.validateImportFile()` +- Implement download template functionality using `salesService.downloadImportTemplate()` +- Replace console.log in ReviewStep with `salesService.createSalesRecord()` + +**APIs Available**: +- `POST /tenants/{tenant_id}/sales/sales` - Create manual sales record +- `POST /tenants/{tenant_id}/sales/operations/import` - Import from file +- `POST /tenants/{tenant_id}/sales/operations/import/validate` - Validate import file +- `GET /tenants/{tenant_id}/sales/operations/import/template` - Download CSV template + +## Not Started ⚠️ + +### 6. Recipe Wizard +**File**: `frontend/src/components/domain/unified-wizard/wizards/RecipeWizard.tsx` +**Status**: ⚠️ **Needs Full Ingredient Selection Implementation** + +**Current State**: +- Step 1: Recipe details (name, category, yield) - Complete UI +- Step 2: Ingredients selection - Shows placeholder message + +**Remaining Work**: +1. Fetch ingredients from inventory API using `inventoryService.getIngredients()` +2. Create ingredient selection UI with: + - Search/filter ingredients by name and category + - Select multiple ingredients + - Specify quantity and unit for each ingredient + - Display selected ingredients with ability to remove +3. Map UI ingredient format to API format (RecipeIngredientCreate) +4. Replace console.log with `recipesService.createRecipe()` API call + +**APIs Available**: +- `GET /tenants/{tenant_id}/inventory/ingredients` - List all ingredients +- `POST /tenants/{tenant_id}/recipes` - Create recipe with ingredients + +**Recipe Ingredient Format**: +```typescript +{ + inventory_product_id: string; + quantity: number; + unit: string; // 'kg', 'g', 'l', 'ml', 'units' + notes?: string; +} +``` + +### 7. Supplier Wizard +**File**: `frontend/src/components/domain/unified-wizard/wizards/SupplierWizard.tsx` +**Status**: ⚠️ **Needs Mock Data Replacement** + +**Current State**: +- Step 1: Supplier info - Complete with validation +- Step 2: Products & Pricing - Uses mock ingredients array + +**Remaining Work**: +1. Replace `mockIngredients` with API call to `inventoryService.getIngredients()` +2. Add loading state while fetching ingredients +3. Add error handling if ingredients fetch fails +4. Replace console.log with `suppliersService.createSupplier()` API call +5. After supplier creation, create price list using `suppliersService.createSupplierPriceList()` + +**Mock Data to Replace** (line 154-159): +```typescript +const mockIngredients = [ + { id: 1, name: 'Harina de Trigo', unit: 'kg' }, + { id: 2, name: 'Mantequilla', unit: 'kg' }, + { id: 3, name: 'Azúcar', unit: 'kg' }, + { id: 4, name: 'Levadura', unit: 'kg' }, +]; +``` + +**APIs Available**: +- `GET /tenants/{tenant_id}/inventory/ingredients` - List ingredients +- `POST /tenants/{tenant_id}/suppliers` - Create supplier +- `POST /tenants/{tenant_id}/suppliers/{supplier_id}/price-lists` - Create price list + +### 8. Customer Order Wizard +**File**: `frontend/src/components/domain/unified-wizard/wizards/CustomerOrderWizard.tsx` +**Status**: ⚠️ **Needs Mock Data Replacement** + +**Current State**: +- Step 1: Customer selection - Uses mock customers array, has inline customer creation +- Step 2: Order items - Uses mock products array +- Step 3: Delivery & payment - Complete with validation + +**Remaining Work**: +1. **Customer Selection Step**: + - Replace `mockCustomers` with `OrdersService.getCustomers()` API call + - Update inline customer creation to use `OrdersService.createCustomer()` API + - Add loading states while fetching customers + +2. **Order Items Step**: + - Replace `mockProducts` with `inventoryService.getIngredients()` API call (for finished products) + - Add loading states while fetching products + - Filter ingredients to show only finished products (category: finished_product) + +3. **Final Step**: + - Replace console.log with `OrdersService.createOrder()` API call + - Map wizard data to OrderCreate format with order items + +**Mock Data to Replace**: +- `mockCustomers` (line ~35): 4 hardcoded customers +- `mockProducts` (line ~125): 6 hardcoded products + +**APIs Available**: +- `GET /tenants/{tenant_id}/orders/customers` - List customers +- `POST /tenants/{tenant_id}/orders/customers` - Create customer +- `GET /tenants/{tenant_id}/inventory/ingredients` - List products (filter by category) +- `POST /tenants/{tenant_id}/orders` - Create order + +**Order Item Format**: +```typescript +{ + inventory_product_id: string; + ordered_quantity: number; + unit_price: number; + notes?: string; +} +``` + +### 9. Customer Wizard +**File**: `frontend/src/components/domain/unified-wizard/wizards/CustomerWizard.tsx` +**Status**: ⚠️ **Needs API Integration** + +**Current State**: +- Step 1: Customer details - Complete UI +- Step 2: Preferences & terms - Complete UI + +**Remaining Work**: +- Replace console.log with `OrdersService.createCustomer()` API call +- Map wizard data to CustomerCreate format +- Add loading states and error handling + +**APIs Available**: +- `POST /tenants/{tenant_id}/orders/customers` + +## Implementation Priority + +Based on user impact and complexity: + +**High Priority** (Most Used): +1. ✅ Sales Entry Wizard - File upload implementation +2. ⚠️ Customer Order Wizard - Most complex, uses orders +3. ⚠️ Supplier Wizard - Procurement workflow + +**Medium Priority**: +4. ⚠️ Recipe Wizard - Production planning +5. ⚠️ Customer Wizard - Standalone customer creation + +**Completed**: +- ✅ Quality Template Wizard +- ✅ Equipment Wizard +- ✅ Team Member Wizard + +## Testing Checklist + +For each wizard implementation: + +- [ ] API calls work with valid tenant ID +- [ ] Loading states display during API calls +- [ ] Error messages show when API calls fail +- [ ] Success callback (onComplete) triggers on successful save +- [ ] Wizard closes after successful completion +- [ ] Data is properly formatted for backend API +- [ ] Required fields are validated before submission +- [ ] No console.log or console.error left (except for debugging in catch blocks) + +## Next Steps + +1. **Implement Sales Entry file upload** (High Impact, Medium Complexity) +2. **Implement Supplier ingredient fetching** (High Impact, Low Complexity) +3. **Implement Customer Order with API** (High Impact, High Complexity) +4. **Implement Recipe ingredient selection** (Medium Impact, High Complexity) +5. **Implement Customer creation** (Medium Impact, Low Complexity) + +## Notes + +- All wizards use `useTenant()` hook from `frontend/src/stores/tenant.store.ts` +- All wizards follow the pattern: Loading state → API call → Error handling → Success callback +- Error messages are shown in red alert boxes above form +- Loading states show spinner with "Guardando..." text +- Tenant ID is always required for all API calls