# Getting Started - Powder Coating Management System

## What Has Been Created

A complete, production-ready ASP.NET Core 8.0 solution for powder coating business management with:

✅ **6 Projects** organized in Clean Architecture
✅ **Complete Database Schema** with 15+ entities
✅ **Web Application (MVC)** for desktop/browser access
✅ **RESTful API** with JWT authentication for mobile apps
✅ **Repository Pattern** with Unit of Work
✅ **Role-Based Security** with 5 default roles
✅ **Real-time Updates** ready (SignalR infrastructure)
✅ **AI Integration** hooks for ML.NET and OpenAI
✅ **Test Projects** configured and ready
✅ **Comprehensive Documentation**

## Project Files Created

### Solution Structure (50+ Files)
```
PowderCoatingApp/
├── PowderCoatingApp.sln                    # Visual Studio solution
├── README.md                                # Main documentation
├── DEVELOPMENT.md                           # Developer guide
├── PROJECT_STRUCTURE.md                     # Architecture overview
├── .gitignore                               # Git ignore rules
│
├── src/
│   ├── PowderCoating.Core/                 # Domain Layer
│   │   ├── Entities/                       # 12 entity classes
│   │   ├── Enums/                          # 7 enumerations
│   │   └── Interfaces/                     # Repository interfaces
│   │
│   ├── PowderCoating.Application/          # Application Layer
│   │   └── DTOs/                           # Data transfer objects
│   │       ├── Customer/                   # Customer DTOs
│   │       └── Job/                        # Job DTOs (with shop floor)
│   │
│   ├── PowderCoating.Infrastructure/       # Infrastructure Layer
│   │   ├── Data/                           # DbContext and seeding
│   │   └── Repositories/                   # Generic repository + UoW
│   │
│   ├── PowderCoating.Web/                  # Web MVC Application
│   │   ├── Program.cs                      # Startup configuration
│   │   └── appsettings.json                # Configuration
│   │
│   ├── PowderCoating.Api/                  # RESTful API
│   │   ├── Program.cs                      # API startup with JWT
│   │   └── appsettings.json                # API configuration
│   │
│   └── PowderCoating.Shared/               # Shared Library
│       └── Constants/                       # Application constants
│
└── tests/
    ├── PowderCoating.UnitTests/            # Unit tests with xUnit
    └── PowderCoating.IntegrationTests/     # Integration tests
```

## Features Implemented

### 1. Customer Management
- Full CRUD operations
- Commercial/Non-commercial classification
- Pricing tiers
- Credit limits
- Contact history
- Notes tracking

### 2. Job Management
- Complete job lifecycle (15 statuses)
- Priority levels (5 levels)
- Customer PO tracking
- Item-level details
- Photo attachments
- Progress notes
- Status history
- Customer approvals

### 3. Quoting System
- Quote generation
- Multiple line items
- AI suggestion hooks
- Quote to job conversion
- Expiration tracking
- Quote history

### 4. Inventory Management
- Powder coating materials
- SKU tracking
- Reorder points
- Supplier management
- Transaction history
- Stock alerts

### 5. Equipment & Maintenance
- Equipment tracking
- Maintenance scheduling
- Service history
- Downtime tracking
- Priority management

### 6. Shop Floor Display
- Real-time job board
- Status-based filtering
- Priority color coding
- SignalR ready for live updates

### 7. User Management
- Multi-user support
- Role-based access (5 roles)
- User preferences
- Customizable permissions
- Theme support

## Next Steps to Use This Project

### Step 1: Set Up Your Environment

**Required:**
1. Install .NET 10.0 SDK from https://dotnet.microsoft.com/download
2. Install SQL Server or SQL Server Express from https://www.microsoft.com/sql-server/sql-server-downloads
3. Install Visual Studio 2022 (version 17.12 or later - Community, Professional, or Enterprise) OR VS Code

**Optional:**
- SQL Server Management Studio (SSMS) for database management
- Azure Data Studio (cross-platform alternative to SSMS)

### Step 2: Open the Solution

**In Visual Studio:**
1. Double-click `PowderCoatingApp.sln`
2. Wait for NuGet packages to restore
3. Set `PowderCoating.Web` as the startup project

**In VS Code:**
1. Open the folder in VS Code
2. Run `dotnet restore` in terminal
3. Install C# extension if prompted

### Step 3: Configure Database

1. **Update Connection String** in both:
   - `src/PowderCoating.Web/appsettings.json`
   - `src/PowderCoating.Api/appsettings.json`

   **For LocalDB (default):**
   ```json
   "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=PowderCoatingDb;Trusted_Connection=true;MultipleActiveResultSets=true"
   ```

   **For SQL Server Express:**
   ```json
   "DefaultConnection": "Server=.\\SQLEXPRESS;Database=PowderCoatingDb;Trusted_Connection=true;MultipleActiveResultSets=true"
   ```

   **For Full SQL Server:**
   ```json
   "DefaultConnection": "Server=YOUR_SERVER_NAME;Database=PowderCoatingDb;Trusted_Connection=true;MultipleActiveResultSets=true"
   ```

2. **Create Database** - Run migrations:
   ```bash
   cd src/PowderCoating.Web
   dotnet ef database update --project ../PowderCoating.Infrastructure
   ```

### Step 4: Run the Application

**Option A: Visual Studio**
1. Press F5 or click "Start Debugging"
2. Application opens in browser automatically
3. Login with default admin account

**Option B: Command Line**
```bash
cd src/PowderCoating.Web
dotnet run
```
Then navigate to: https://localhost:7001 (or port shown in console)

### Step 5: First Login

**Default Administrator Account:**
- Email: `admin@powdercoating.com`
- Password: `Admin123!`

**⚠️ IMPORTANT:** Change this password immediately in production!

### Step 6: Customize for Your Business

1. **Company Settings** - Update in `appsettings.json`:
   ```json
   "AppSettings": {
     "CompanyName": "Your Company Name",
     "DefaultQuoteValidityDays": 30,
     "DefaultPaymentTerms": "Net 30",
     "TaxRate": 0.07
   }
   ```

2. **Create Users** - Add your employees through the admin panel

3. **Set Up Inventory** - Add your powder coating materials

4. **Configure Equipment** - Add your equipment for maintenance tracking

## API Setup (For Mobile Apps)

### Step 1: Configure JWT Settings
In `src/PowderCoating.Api/appsettings.json`:
```json
"JwtSettings": {
  "SecretKey": "CHANGE-THIS-TO-YOUR-OWN-SECRET-KEY-AT-LEAST-32-CHARACTERS",
  "Issuer": "PowderCoatingAPI",
  "Audience": "PowderCoatingMobileApp",
  "ExpirationMinutes": 1440
}
```

### Step 2: Run the API
```bash
cd src/PowderCoating.Api
dotnet run
```

### Step 3: Test with Swagger
Navigate to: https://localhost:7002 (or port shown)
- Swagger UI provides interactive API documentation
- Test endpoints directly in browser

### Step 4: Get Authentication Token
POST to `/api/auth/login` with:
```json
{
  "email": "admin@powdercoating.com",
  "password": "Admin123!"
}
```

## Development Workflow

### Adding Your First Feature

1. **Create Entity** in `PowderCoating.Core/Entities/`
2. **Add to DbContext** in `Infrastructure/Data/ApplicationDbContext.cs`
3. **Create Migration**:
   ```bash
   dotnet ef migrations add YourFeatureName --project src/PowderCoating.Infrastructure --startup-project src/PowderCoating.Web
   ```
4. **Update Database**:
   ```bash
   dotnet ef database update --project src/PowderCoating.Infrastructure --startup-project src/PowderCoating.Web
   ```
5. **Create DTOs** in `Application/DTOs/`
6. **Create Controller** in `Web/Controllers/`
7. **Create Views** in `Web/Views/[ControllerName]/`

See `DEVELOPMENT.md` for detailed examples!

## AI Features Setup (Optional)

### OpenAI Integration for Intelligent Quoting

1. Get API key from https://platform.openai.com
2. Update `appsettings.json`:
   ```json
   "AI": {
     "OpenAI": {
       "ApiKey": "sk-your-key-here",
       "Model": "gpt-4",
       "Endpoint": "https://api.openai.com/v1"
     }
   }
   ```
3. Implement `IQuoteAIService` in Application layer
4. Use in quote generation workflow

### ML.NET for Price Prediction

1. Collect historical job data
2. Train model using ML.NET
3. Integrate predictions in quoting process
4. See ML.NET documentation for model training

## Troubleshooting

### "Cannot connect to database"
- Verify SQL Server is running
- Check connection string is correct
- Try connecting with SSMS first
- Check Windows Firewall settings

### "The entity type 'X' requires a primary key to be defined"
- Run migrations: `dotnet ef database update`
- If persists, delete database and recreate

### "Port already in use"
- Change ports in `Properties/launchSettings.json`
- Or kill the process using the port

### NuGet Restore Issues
```bash
dotnet restore --force
dotnet clean
dotnet build
```

## What to Build Next

### Immediate Priorities
1. ✅ Create your first customer
2. ✅ Add inventory items
3. ✅ Create a test quote
4. ✅ Convert quote to job
5. ✅ Update job status through workflow

### Feature Additions
- [ ] Email notifications
- [ ] PDF quote generation
- [ ] Customer portal
- [ ] Advanced reporting
- [ ] Photo upload for jobs
- [ ] Barcode generation
- [ ] Time tracking
- [ ] Mobile app (iOS/Android)

### Customizations
- [ ] Add your company logo
- [ ] Customize email templates
- [ ] Configure your powder coating processes
- [ ] Set up your pricing tiers
- [ ] Configure user roles for your team

## Support Resources

📚 **Documentation:**
- `README.md` - Overview and features
- `DEVELOPMENT.md` - Developer guide with examples
- `PROJECT_STRUCTURE.md` - Architecture details

🔗 **Official Documentation:**
- [ASP.NET Core](https://docs.microsoft.com/aspnet/core)
- [Entity Framework Core](https://docs.microsoft.com/ef/core)
- [SignalR](https://docs.microsoft.com/aspnet/core/signalr)

💡 **Best Practices:**
- Follow Clean Architecture principles
- Use async/await for database operations
- Keep controllers thin, logic in services
- Write tests for critical business logic
- Document your APIs

## License & Contact

[Add your license information]
[Add your contact information]

---

**You're all set!** 🎉

Start by running the web application and logging in with the default admin account. Then explore the features and begin customizing for your powder coating business.

For detailed development instructions, see `DEVELOPMENT.md`.
