# AFINET Customer Portal

A comprehensive customer portal for AFINET internet services, built with Laravel (backend) and Next.js (frontend), integrated with Odoo ERP.

## Quick Start

```bash
# 1. Clone repository
git clone <repository-url>
cd afinet

# 2. Configure environment
cp afinet-portal-backend/.env.example afinet-portal-backend/.env
nano afinet-portal-backend/.env
# Update: Database, Odoo, Email, Payment Gateway settings

# 3. Start all services
docker-compose up -d

# 4. Run migrations
docker-compose exec backend php artisan migrate

# 5. Access application
# Frontend: http://localhost:3000
# Backend API: http://localhost:8000
# phpMyAdmin: http://localhost:8080
```

## Services

| Service | Container | Port | Description |
|---------|-----------|------|-------------|
| Frontend | afinet-frontend | 3000 | Next.js customer portal |
| Backend | afinet-backend | 8000 | Laravel REST API |
| Scheduler | afinet-scheduler | - | Background sync (every 5 min) |
| Database | afinet-db | 3306 | MySQL 8.0 |
| phpMyAdmin | afinet-phpmyadmin | 8080 | Database management |

## Key Features

- **Customer Portal**: Service requests, quotations, orders, invoices, payments
- **Odoo Integration**: Real-time sync with Odoo ERP
- **Payment Gateway**: Pesepay integration for online payments
- **Bank Transfer**: Proof of payment upload with Odoo sync
- **Email Notifications**: Automated customer and team notifications
- **Scheduler**: Automatic data sync every 5 minutes

## Architecture

### Reality Mode (Production)

The portal operates in "Reality Mode" where:
- **Only Starlink** has fixed pricing from Odoo
- **All other packages** require sales team pricing in Odoo
- **All invoices** are generated in Odoo (never auto-generated)
- **Scheduler syncs** data every 5 minutes (quotations, invoices, orders)

### Customer Flow

```
Request Quotation → Sales Team Prices (Odoo) → Customer Accepts
→ Sales Order Created → Invoice Generated (Odoo) → Customer Pays
```

## Management Commands

### Docker Services

```bash
# Start all services
docker-compose up -d

# Stop all services
docker-compose down

# View logs
docker-compose logs -f

# Restart specific service
docker-compose restart scheduler

# Execute commands
docker-compose exec backend php artisan [command]
docker-compose exec scheduler php artisan sync:data quotations
```

### Laravel Commands

```bash
# Clear caches
docker-compose exec backend php artisan cache:clear
docker-compose exec backend php artisan config:clear

# Run migrations
docker-compose exec backend php artisan migrate

# Test email
docker-compose exec backend php artisan email:test your@email.com

# Manual sync
docker-compose exec scheduler php artisan sync:data quotations
docker-compose exec scheduler php artisan sync:data invoices
docker-compose exec scheduler php artisan sync:data orders
```

## Configuration

### Environment Variables

Key settings in `afinet-portal-backend/.env`:

```env
# Application
APP_ENV=production
APP_DEBUG=false
SIMULATE_PACKAGE_PRICING=false

# Database (matches docker-compose.yml)
DB_HOST=db
DB_DATABASE=afinet_portal
DB_USERNAME=afinet_user
DB_PASSWORD=Aywhvoudf9&E

# Odoo Integration
ODOO_URL=https://your-odoo-instance.com
ODOO_DATABASE=your_database
ODOO_USERNAME=your_username
ODOO_PASSWORD=your_password

# Email
MAIL_FROM_ADDRESS=your@email.com
COMPANY_MAIL=company@afinet.africa

# Payment Gateway
PESEPAY_INTEGRATION_KEY=your_key
PESEPAY_ENCRYPTION_KEY=your_encryption_key
```

## Scheduler

The scheduler runs automatically in a Docker container and syncs data from Odoo every 5 minutes:

```bash
# Check status
docker-compose ps scheduler

# View logs
docker-compose logs -f scheduler

# Manually trigger sync
docker-compose exec scheduler php artisan sync:data quotations
```

## Documentation

Comprehensive documentation in the `info/` directory:

- **DOCKER_SETUP.md** - Docker quick start guide
- **DOCKER_SCHEDULER_SETUP.md** - Scheduler details
- **QUICK_REFERENCE.md** - Quick command reference
- **REALITY_MODE_IMPLEMENTATION.md** - Complete system specification
- **QUOTATION_PRICING_FLOW_ANALYSIS.md** - Pricing flow details
- **PRICING_FLOW_DIAGRAM.md** - Visual flow diagrams
- **FINAL_IMPLEMENTATION_SUMMARY.md** - Complete implementation summary

## Troubleshooting

### Scheduler not syncing

```bash
docker-compose ps scheduler          # Check if running
docker-compose logs scheduler        # View logs
docker-compose restart scheduler     # Restart
```

### Database connection errors

```bash
docker-compose ps db                 # Check if running
docker-compose logs db               # View logs
```

### Clear all caches

```bash
docker-compose exec backend php artisan cache:clear
docker-compose exec backend php artisan config:clear
docker-compose exec backend php artisan route:clear
docker-compose exec backend php artisan view:clear
```

## Production Deployment

1. Update `.env` for production settings
2. Build and start: `docker-compose up -d`
3. Run migrations: `docker-compose exec backend php artisan migrate --force`
4. Verify scheduler: `docker-compose ps scheduler`
5. Check logs: `docker-compose logs -f`

## Support

- **Documentation**: See `info/` directory
- **Technical Support**: tech@afinet.africa
- **Odoo Integration**: odoo-admin@afinet.africa

## License

Proprietary - AFINET (Private) Limited
