199 lines
6.2 KiB
Bash
Executable File
199 lines
6.2 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
###############################################################################
|
||
# Financial Workflow Setup Script
|
||
#
|
||
# This script sets up the complete financial workflow system including:
|
||
# - Database migrations for payment orders, cashier ledger, and reconciliations
|
||
# - Permissions and roles seeder
|
||
# - Test data (optional)
|
||
###############################################################################
|
||
|
||
set -e # Exit on error
|
||
|
||
echo "======================================================================"
|
||
echo "Financial Workflow System Setup"
|
||
echo "======================================================================"
|
||
echo ""
|
||
|
||
# Colors for output
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Function to print colored messages
|
||
print_success() {
|
||
echo -e "${GREEN}✓${NC} $1"
|
||
}
|
||
|
||
print_info() {
|
||
echo -e "${BLUE}ℹ${NC} $1"
|
||
}
|
||
|
||
print_warning() {
|
||
echo -e "${YELLOW}⚠${NC} $1"
|
||
}
|
||
|
||
print_error() {
|
||
echo -e "${RED}✗${NC} $1"
|
||
}
|
||
|
||
# Check if we're in the right directory
|
||
if [ ! -f "artisan" ]; then
|
||
print_error "Error: artisan file not found. Please run this script from the project root."
|
||
exit 1
|
||
fi
|
||
|
||
print_info "Starting financial workflow setup..."
|
||
echo ""
|
||
|
||
# Step 1: Run migrations
|
||
echo "======================================================================"
|
||
echo "Step 1: Running Database Migrations"
|
||
echo "======================================================================"
|
||
echo ""
|
||
|
||
print_info "Running all pending migrations..."
|
||
php artisan migrate --force
|
||
|
||
if [ $? -eq 0 ]; then
|
||
print_success "Migrations completed successfully"
|
||
else
|
||
print_error "Migration failed. Please check the error above."
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# Step 2: Run Financial Workflow Permissions Seeder
|
||
echo "======================================================================"
|
||
echo "Step 2: Setting up Permissions and Roles"
|
||
echo "======================================================================"
|
||
echo ""
|
||
|
||
print_info "Running FinancialWorkflowPermissionsSeeder..."
|
||
php artisan db:seed --class=FinancialWorkflowPermissionsSeeder
|
||
|
||
if [ $? -eq 0 ]; then
|
||
print_success "Financial permissions and roles created successfully"
|
||
echo ""
|
||
print_info "The following roles have been created:"
|
||
echo " - finance_cashier (出納 - manages money)"
|
||
echo " - finance_accountant (會計 - manages books)"
|
||
echo " - finance_chair (理事長 - approves medium/large amounts)"
|
||
echo " - finance_board_member (理事 - approves large amounts)"
|
||
echo " - finance_requester (申請人 - submits requests)"
|
||
else
|
||
print_warning "Seeder may have already run or encountered an issue"
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# Step 3: Optional - Create test users
|
||
echo "======================================================================"
|
||
echo "Step 3: Test Users (Optional)"
|
||
echo "======================================================================"
|
||
echo ""
|
||
|
||
read -p "Do you want to create test users for each financial role? (y/n) " -n 1 -r
|
||
echo ""
|
||
|
||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||
print_info "Creating test users..."
|
||
|
||
php artisan tinker --execute="
|
||
use App\Models\User;
|
||
use Spatie\Permission\Models\Role;
|
||
|
||
// Create test cashier
|
||
\$cashier = User::firstOrCreate(
|
||
['email' => 'cashier@test.com'],
|
||
['name' => 'Test Cashier', 'password' => bcrypt('password')]
|
||
);
|
||
\$cashier->assignRole('finance_cashier');
|
||
echo 'Created: cashier@test.com (password: password)' . PHP_EOL;
|
||
|
||
// Create test accountant
|
||
\$accountant = User::firstOrCreate(
|
||
['email' => 'accountant@test.com'],
|
||
['name' => 'Test Accountant', 'password' => bcrypt('password')]
|
||
);
|
||
\$accountant->assignRole('finance_accountant');
|
||
echo 'Created: accountant@test.com (password: password)' . PHP_EOL;
|
||
|
||
// Create test chair
|
||
\$chair = User::firstOrCreate(
|
||
['email' => 'chair@test.com'],
|
||
['name' => 'Test Chair', 'password' => bcrypt('password')]
|
||
);
|
||
\$chair->assignRole('finance_chair');
|
||
echo 'Created: chair@test.com (password: password)' . PHP_EOL;
|
||
|
||
// Create test requester
|
||
\$requester = User::firstOrCreate(
|
||
['email' => 'requester@test.com'],
|
||
['name' => 'Test Requester', 'password' => bcrypt('password')]
|
||
);
|
||
\$requester->assignRole('finance_requester');
|
||
echo 'Created: requester@test.com (password: password)' . PHP_EOL;
|
||
"
|
||
|
||
print_success "Test users created successfully"
|
||
echo ""
|
||
print_info "Test users created with password: 'password'"
|
||
else
|
||
print_info "Skipping test user creation"
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# Step 4: Clear caches
|
||
echo "======================================================================"
|
||
echo "Step 4: Clearing Caches"
|
||
echo "======================================================================"
|
||
echo ""
|
||
|
||
print_info "Clearing application caches..."
|
||
php artisan config:clear
|
||
php artisan cache:clear
|
||
php artisan route:clear
|
||
php artisan view:clear
|
||
|
||
print_success "Caches cleared"
|
||
echo ""
|
||
|
||
# Step 5: Summary
|
||
echo "======================================================================"
|
||
echo "Setup Complete! 🎉"
|
||
echo "======================================================================"
|
||
echo ""
|
||
|
||
print_success "Financial workflow system is now ready to use!"
|
||
echo ""
|
||
|
||
echo "Next steps:"
|
||
echo "1. Assign financial roles to your users"
|
||
echo "2. Create your first finance document"
|
||
echo "3. Test the complete workflow:"
|
||
echo ""
|
||
echo " Workflow stages:"
|
||
echo " ├─ Stage 1: Approval (Cashier → Accountant → Chair → Board)"
|
||
echo " ├─ Stage 2: Payment (Accountant creates → Cashier verifies → Cashier executes)"
|
||
echo " ├─ Stage 3: Recording (Cashier ledger + Accountant transactions)"
|
||
echo " └─ Stage 4: Reconciliation (Monthly bank reconciliation)"
|
||
echo ""
|
||
|
||
echo "Key routes:"
|
||
echo " - Finance Documents: /admin/finance-documents"
|
||
echo " - Payment Orders: /admin/payment-orders"
|
||
echo " - Cashier Ledger: /admin/cashier-ledger"
|
||
echo " - Bank Reconciliations: /admin/bank-reconciliations"
|
||
echo ""
|
||
|
||
print_info "For detailed testing instructions, see: tests/FINANCIAL_WORKFLOW_TEST_PLAN.md"
|
||
echo ""
|
||
|
||
exit 0
|