256 lines
9.3 KiB
Markdown
256 lines
9.3 KiB
Markdown
|
|
# 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
|