# 🚀 MODULE MANAGEMENT COMMANDS - QUICK REFERENCE

**Created:** March 30, 2026  
**Purpose:** CLI tools for adding and managing modules in Missio platform

---

## 📋 **AVAILABLE COMMANDS**

### **1. `module:add` - Add Single Module**
Add one module at a time with full control.

```bash
php artisan module:add <name> <slug> <main-module-id> [options]
```

**Arguments:**
- `name` - Display name (e.g., "Budget")
- `slug` - Slug/module_name (e.g., "budget")
- `main-module` - Main module ID (e.g., 8 for Finance)

**Options:**
- `--status=<0|1>` - Module status (default: 1)
- `--desc="..."` - Custom description

**Examples:**
```bash
# Add Budget module to Finance
php artisan module:add "Budget" budget 8

# Add with custom description
php artisan module:add "Budget Reports" budget-reports 8 --desc="Budget vs actual reports"

# Add inactive module
php artisan module:add "Test Module" test-module 8 --status=0
```

**What it does:**
- ✅ Creates module record
- ✅ Creates 4 permissions (add, edit, view, delete)
- ✅ Creates module_settings for all companies
- ✅ Creates permission_role records
- ✅ Validates main_module exists

---

### **2. `module:add-bulk` - Add Multiple Modules**
Add many modules at once using presets or see available options.

```bash
php artisan module:add-bulk [preset]
```

**Available Presets:**

#### **`decatur` - Complete Decatur Demo (13 modules)**
Adds all modules needed for Decatur Schools demo:
- **Finance (7):** budget, budget-allocations, budget-transfers, general-ledger, accounts-payable, accounts-receivable, budget-reports
- **Procurement (4):** requisitions, purchase-orders, receiving, vendors
- **HR (2):** payroll, positions

```bash
php artisan module:add-bulk decatur
```

#### **`finance` - Finance Modules Only (6 modules)**
Budget and accounting modules for Finance main module.

```bash
php artisan module:add-bulk finance
```

#### **`procurement` - Procurement Modules Only (4 modules)**
Requisition and PO modules for Store/Procurement main module.

```bash
php artisan module:add-bulk procurement
```

#### **`workflow` - Workflow Modules (3 modules)**
Approval workflow modules (requires main_module_id 25 to exist).

```bash
php artisan module:add-bulk workflow
```

**Show Available Presets:**
```bash
php artisan module:add-bulk
# Shows detailed list of all presets
```

**What it does:**
- ✅ Adds all modules in preset
- ✅ Shows progress and summary
- ✅ Skips modules that already exist
- ✅ Detailed results table

---

### **3. `package:update-modules` - Update Package Modules**
Add or remove modules from a package's module_in_package JSON.

```bash
php artisan package:update-modules <package-id> [options]
```

**Options:**
- `--add="slug1,slug2"` - Add module slugs (comma-separated)
- `--remove="slug1,slug2"` - Remove module slugs
- `--preset=<name>` - Add entire preset
- `--show` - Show current modules only

**Examples:**

```bash
# Show current modules in package 50
php artisan package:update-modules 50 --show

# Add Decatur preset to package 50
php artisan package:update-modules 50 --preset=decatur

# Add specific modules
php artisan package:update-modules 50 --add=budget,requisitions,payroll

# Remove unwanted modules
php artisan package:update-modules 50 --remove=leads,tickets,contracts

# Combine add and remove
php artisan package:update-modules 50 --add=budget,payroll --remove=leads
```

**What it does:**
- ✅ Decodes current module_in_package JSON
- ✅ Adds/removes modules as specified
- ✅ Validates modules exist (with warning)
- ✅ Sorts alphabetically
- ✅ Saves back to package
- ✅ Shows before/after comparison

---

### **4. `module:list` - List All Modules**
View all modules in the system, grouped by main module.

```bash
php artisan module:list [options]
```

**Options:**
- `--main=<id>` - Filter by main_module_id
- `--search="text"` - Search name, slug, or description
- `--status=<0|1>` - Filter by status
- `--export` - Export to CSV

**Examples:**

```bash
# List all modules
php artisan module:list

# List only Finance modules (main_module_id = 8)
php artisan module:list --main=8

# Search for budget-related modules
php artisan module:list --search=budget

# List only active modules
php artisan module:list --status=1

# List and export to CSV
php artisan module:list --export
```

**What it shows:**
- Module ID
- Main module grouping
- Module name and slug
- Active status
- SuperAdmin flag

---

## 📊 **MAIN MODULE IDS REFERENCE**

| ID | Name | Slug | Use For |
|---|---|---|---|
| 1 | Dashboard | dashboard | Dashboard |
| 7 | HRIQ | hr | HR, Payroll, Positions |
| 8 | Finance | finance | Budget, AP, AR, GL |
| 9 | Store | store | Procurement, Requisitions, POs |
| 15 | Reports | reports | Reporting |
| 17 | TimeIQ | work | Projects, Tasks, Timelogs |
| 24 | GrantIQ | grantiq | Grants, Applications |
| 25 | Workflow | workflow | Approvals (NEW - create first) |

---

## 🎯 **DECATUR DEMO WORKFLOW**

### **Day 1: Add All Modules**

```bash
# Option A: Add everything at once
php artisan module:add-bulk decatur

# Option B: Add incrementally
php artisan module:add-bulk finance
php artisan module:add-bulk procurement
```

### **Day 1: Update Package 50**

```bash
# Add all Decatur modules to package 50
php artisan package:update-modules 50 --preset=decatur

# Verify it worked
php artisan package:update-modules 50 --show
```

### **Verify Installation**

```bash
# List all Finance modules
php artisan module:list --main=8

# Search for budget modules
php artisan module:list --search=budget

# Export full list for documentation
php artisan module:list --export
```

---

## 🔧 **TROUBLESHOOTING**

### **Module Already Exists**
```bash
# Command output:
⚠️  Module 'budget' already exists!
📦 Main Module: Finance
🆔 Module ID: 142
```
**Solution:** Module is already added. No action needed.

---

### **Main Module Not Found**
```bash
# Command output:
❌ Main module ID 25 does not exist!
```
**Solution:** Create the main module first:
```sql
INSERT INTO main_modules (name, slug, description, status, order_by) VALUES
('Workflow', 'workflow', 'Approval workflows', 1, 25);
```

---

### **Package Not Found**
```bash
# Command output:
❌ Package ID 50 not found!
```
**Solution:** Verify package exists:
```sql
SELECT id, name FROM packages WHERE id = 50;
```

---

### **Module Doesn't Exist Warning**
```bash
# When adding to package:
⚠️  Warning: These modules don't exist yet:
   • workflow-inbox
Continue anyway? (yes/no) [no]:
```
**Solution:**
- Type `no` and add modules first: `php artisan module:add-bulk workflow`
- OR type `yes` to add to package JSON anyway (will error when activated)

---

## 📝 **MANUAL ALTERNATIVE (OLD WAY)**

Before these commands, you had to use:

```bash
# Via browser URL
http://portal.missio.local.io/account/settings/add_new_module?module=Budget&slug=budget&main-module=8

# Problems:
❌ One at a time only
❌ Manual URL construction
❌ Easy to make typos
❌ No bulk operations
❌ No validation
❌ No summary
```

**New way is faster and safer!** ✅

---

## 🚀 **QUICK START SCRIPTS**

### **Complete Decatur Setup (Copy & Paste)**

```bash
# Step 1: Add all modules
php artisan module:add-bulk decatur

# Step 2: Update package 50
php artisan package:update-modules 50 --preset=decatur

# Step 3: Verify
php artisan module:list --search=budget
php artisan package:update-modules 50 --show

# Step 4: Clean up package (optional - remove non-ERP modules)
php artisan package:update-modules 50 --remove=leads,tickets,contracts,knowledgebase
```

---

### **Add Workflow Main Module (if needed)**

```bash
# First create the main module in database
mysql -u root missio37282_missiov2 << 'EOF'
INSERT INTO main_modules (name, slug, description, status, order_by, created_at, updated_at) VALUES
('Workflow', 'workflow', 'Approval workflows and inbox', 1, 25, NOW(), NOW());
EOF

# Then add workflow modules
php artisan module:add-bulk workflow

# Add to package
php artisan package:update-modules 50 --add=workflow-inbox,workflow-rules,workflow-history
```

---

## 📖 **ADDITIONAL NOTES**

### **Module Naming Conventions**
- **Name:** Display name with spaces (e.g., "Budget Allocations")
- **Slug:** Lowercase with hyphens (e.g., "budget-allocations")
- **Consistent:** slug should match module_name in database

### **Permissions Created**
Each module gets 4 automatic permissions:
- `add_{slug}` - Add permission
- `edit_{slug}` - Edit permission  
- `view_{slug}` - View permission
- `delete_{slug}` - Delete permission

### **Module Settings**
- Created for ALL companies in database
- Created for ALL roles per company
- Default status: `active`
- Default is_allowed: `1`

### **What Commands DON'T Do**
❌ Create controllers  
❌ Create models  
❌ Create views  
❌ Create routes  
❌ Create migrations  
❌ Update Module.php constants  

**You still need to:** Create Laravel code for functionality!

---

## 🎓 **NEXT STEPS AFTER ADDING MODULES**

### **1. Update Module.php**
Add to `$ListModulesByGroup` array:

```php
// File: app/Models/Module.php

'finance' => [
    'invoices',
    'payments',
    'budget',              // NEW
    'budget-allocations',  // NEW
    'budget-transfers',    // NEW
],
```

### **2. Add to MODULE_LIST**
Define permissions in `Module::MODULE_LIST`:

```php
[
    'module_name' => 'budget',
    'permissions' => [
        ['allowed_permissions' => Permission::ALL_NONE, 'is_custom' => 0, 'name' => 'add_budget'],
        ['allowed_permissions' => Permission::ALL_NONE, 'is_custom' => 0, 'name' => 'view_budget'],
        ['allowed_permissions' => Permission::ALL_NONE, 'is_custom' => 0, 'name' => 'edit_budget'],
        ['allowed_permissions' => Permission::ALL_NONE, 'is_custom' => 0, 'name' => 'delete_budget'],
    ]
],
```

### **3. Create Laravel Files**
```bash
# Controller
php artisan make:controller BudgetController

# Model
php artisan make:model Budget -m

# Migration
# (Created automatically with -m flag)

# Routes
# Create routes/budget.php
```

### **4. Update Navigation**
Hide non-ERP modules for company 105 in menu blade file.

---

## 💡 **TIPS & TRICKS**

### **Dry Run Before Bulk Add**
```bash
# See what would be added without adding
php artisan module:add-bulk decatur
# Review list, then confirm with 'yes'
```

### **Export for Documentation**
```bash
# Export all modules to CSV for team review
php artisan module:list --export

# File saved to: storage/app/modules_export_2026-03-30_143022.csv
```

### **Quick Status Check**
```bash
# Check if module exists
php artisan module:list --search=budget

# Count Finance modules
php artisan module:list --main=8 | grep "modules"
```

### **Combine Commands**
```bash
# Add modules then immediately update package
php artisan module:add-bulk decatur && \
php artisan package:update-modules 50 --preset=decatur
```

---

## ✅ **COMMAND VALIDATION**

All commands include:
- ✅ Input validation
- ✅ Existence checks
- ✅ Duplicate detection
- ✅ Error handling
- ✅ Confirmation prompts
- ✅ Progress feedback
- ✅ Summary tables
- ✅ Helpful error messages

**Safe to run multiple times!** Existing modules are skipped, not duplicated.

---

## 📞 **NEED HELP?**

```bash
# Show command help
php artisan module:add --help
php artisan module:add-bulk --help
php artisan package:update-modules --help
php artisan module:list --help
```

---

**Created by:** AI Assistant  
**Date:** March 30, 2026  
**For:** Decatur Schools RFP Demo Sprint  
**Version:** 1.0
