Files
panel/README.md

308 lines
9.9 KiB
Markdown

# Project Management Panel
A comprehensive project management system built with Next.js for managing construction/engineering projects, contracts, and tasks.
## Features
### 📋 Project Management
- Create and manage projects with detailed information
- Link projects to contracts
- Track project deadlines and progress
- Add custom notes and contact information
### 📄 Contract Management
- Create and manage contracts
- Track contract details including customer and investor information
- Link multiple projects to contracts
- Monitor contract deadlines
### ✅ Task Management
- Create task templates for reusable workflows
- Add tasks to projects (both template-based and custom)
- Track task status and priorities
- Monitor task deadlines and completion
### 📊 Dashboard
- Overview of project statistics
- Recent projects display
- Task completion tracking
- Quick access to pending items
### 🔐 Authentication & Authorization
- Complete user authentication system with NextAuth.js
- Role-based access control (Admin, User, Guest roles)
- Secure session management
- Password-based authentication
- User registration and management
### 👥 User Management
- Admin interface for user administration
- Create, edit, and delete user accounts
- Role assignment and permission management
- User activity monitoring
### 📋 Audit Logging
- Comprehensive logging of all user actions
- Security event tracking
- System activity monitoring
- Audit trail for compliance and debugging
### 📊 Data Export
- Export projects to Excel format grouped by status
- Includes project name, address, plot, WP, and finish date
- Separate sheets for each project status (registered, in progress, fulfilled, etc.)
## Tech Stack
- **Framework**: Next.js 15.1.8
- **Database**: SQLite with better-sqlite3
- **Authentication**: NextAuth.js
- **Styling**: Tailwind CSS
- **Date Handling**: date-fns
- **Frontend**: React 19
- **Mapping**: Leaflet with React-Leaflet
- **Container**: Docker & Docker Compose
## Getting Started
### Prerequisites
- Node.js (version 16 or higher)
- npm or yarn
- Docker (optional, for containerized development)
### Installation
#### Option 1: Local Development
1. Clone the repository
```bash
git clone <repository-url>
cd panel
```
2. Install dependencies
```bash
npm install
```
3. Start the development server
```bash
npm run dev
```
4. Open [http://localhost:3000](http://localhost:3000) in your browser
#### Option 2: Docker Development
1. Clone the repository
```bash
git clone <repository-url>
cd panel
```
2. Start with Docker Compose
```bash
docker-compose up
```
3. Open [http://localhost:3000](http://localhost:3000) in your browser
### Database Setup
The application uses SQLite database which will be automatically initialized on first run. The database file is located at `data/database.sqlite`.
### Admin Setup
To create an initial admin user:
```bash
npm run create-admin
```
This will create an admin user account. Access the admin panel at `/admin/users` to manage users and roles.
## Project Structure
```
src/
├── app/ # Next.js app router pages
│ ├── admin/ # Admin dashboard and user management
│ ├── api/ # API routes
│ │ ├── admin/ # Admin-related endpoints (e.g., user management)
│ │ ├── all-project-tasks/ # Get all project tasks endpoint
│ │ ├── audit-logs/ # Audit log endpoints
│ │ ├── auth/ # Authentication endpoints
│ │ ├── contracts/ # Contract management endpoints
│ │ ├── notes/ # Notes management endpoints
│ │ ├── projects/ # Project management endpoints
│ │ ├── project-tasks/ # Task management endpoints
│ │ ├── task-notes/ # Task-specific notes endpoints
│ │ └── tasks/ # Task template endpoints
│ ├── auth/ # Authentication pages (login, etc.)
│ ├── contracts/ # Contract pages
│ ├── projects/ # Project pages
│ ├── project-tasks/ # Project-specific task pages
│ └── tasks/ # Task management pages
├── components/ # Reusable React components
│ ├── auth/ # Authentication-related components
│ ├── ui/ # UI components (Button, Card, etc.)
│ ├── AuditLogViewer.js # Component to view audit logs
│ ├── ContractForm.js # Contract form component
│ ├── NoteForm.js # Note form component
│ ├── ProjectForm.js # Project form component
│ ├── ProjectTaskForm.js # Project task form component
│ ├── ProjectTasksSection.js # Project tasks section component
│ ├── TaskForm.js # Task form component
│ └── TaskTemplateForm.js # Task template form component
├── lib/ # Utility functions
│ ├── queries/ # Database query functions
│ ├── auditLog.js # Audit logging utilities
│ ├── auth.js # Authentication helpers
│ ├── db.js # Database connection
│ ├── init-db.js # Database initialization
│ └── userManagement.js # User management functions
└── middleware.js # Next.js middleware for auth and routing
```
## Available Scripts
- `npm run dev` - Start development server
- `npm run build` - Build for production
- `npm run start` - Start production server
- `npm run lint` - Run ESLint
- `npm run export-projects` - Export all projects to Excel file grouped by status
## Docker Commands
- `docker-compose up` - Start the application with Docker
- `docker-compose down` - Stop the Docker containers
- `docker-compose up --build` - Rebuild and start the application
## Database Schema
The application uses the following main tables:
- **contracts** - Contract information
- **projects** - Project details linked to contracts
- **tasks** - Task templates
- **project_tasks** - Tasks assigned to specific projects
- **notes** - Project notes and updates
- **users** - User accounts and roles for authentication
- **sessions** - User session management
- **audit_logs** - Detailed logs for security and tracking
## API Endpoints
### Projects
- `GET /api/projects` - Get all projects
- `POST /api/projects` - Create new project
- `GET /api/projects/[id]` - Get project by ID
- `PUT /api/projects/[id]` - Update project
- `DELETE /api/projects/[id]` - Delete project
### Contracts
- `GET /api/contracts` - Get all contracts
- `POST /api/contracts` - Create new contract
- `GET /api/contracts/[id]` - Get contract by ID
- `PUT /api/contracts/[id]` - Update contract
- `DELETE /api/contracts/[id]` - Delete contract
### Tasks
- `GET /api/tasks` - Get task templates
- `POST /api/tasks` - Create new task template
- `GET /api/tasks/[id]` - Get task template by ID
- `PUT /api/tasks/[id]` - Update task template
- `DELETE /api/tasks/[id]` - Delete task template
- `GET /api/tasks/templates` - Get all task templates
### Project Tasks
- `GET /api/project-tasks` - Get project tasks or task templates
- `POST /api/project-tasks` - Create new project task
- `PATCH /api/project-tasks/[id]` - Update task status
- `DELETE /api/project-tasks/[id]` - Delete task
- `GET /api/all-project-tasks` - Get all project tasks across all projects
### Notes
- `POST /api/notes` - Create new note
- `DELETE /api/notes` - Delete note
### Audit Logs
- `GET /api/audit-logs` - Get all audit logs
- `POST /api/audit-logs/log` - Create a new audit log entry
- `GET /api/audit-logs/stats` - Get audit log statistics
### Admin
- `GET /api/admin/users` - Get all users
- `POST /api/admin/users` - Create a new user
- `PUT /api/admin/users/[id]` - Update a user
- `DELETE /api/admin/users/[id]` - Delete a user
## Advanced Map Features
This project includes a powerful map system for project locations, supporting multiple dynamic base layers and transparent overlays:
### Base Layers (8 total)
- **OpenStreetMap** (default street map)
- **🇵🇱 Polish Orthophoto (Standard Resolution)** - WMTS aerial imagery
- **🇵🇱 Polish Orthophoto (High Resolution)** - WMTS high-res aerial imagery
- **🌍 Google Satellite** - Global satellite imagery
- **🌍 Google Hybrid** - Satellite imagery with road overlays
- **🌍 Google Roads** - Google Maps road view
- **Satellite (Esri)** - Alternative satellite imagery
- **Topographic** - CartoDB topographic maps
### Overlay Layers (6 total with transparency)
- **📋 Polish Cadastral Data** (WMS, property boundaries - 80% opacity)
- **🏗️ Polish Spatial Planning** (WMS, zoning data - 70% opacity)
- **🛣️ LP-Portal Roads** (WMS, road network - 90% opacity)
- **🏷️ LP-Portal Street Names** (WMS, street labels - 100% opacity)
- **📐 LP-Portal Parcels** (WMS, property parcels - 60% opacity)
- **📍 LP-Portal Survey Markers** (WMS, survey points - 80% opacity)
Users can switch layers using the map control (📚 icon). WMTS/WMS layers are configured dynamically using OGC GetCapabilities, making it easy to add new sources. See [`docs/MAP_LAYERS.md`](docs/MAP_LAYERS.md) for details on adding and configuring map layers.
## UI/UX
- Modern, responsive interface built with React 19 and Tailwind CSS
- Intuitive dashboards, search, and filter components
- Modular, reusable UI components for forms, lists, and maps
## Extensibility & Testing
- Modular codebase: easily add new features, endpoints, or UI components
- Automated tests: Playwright for E2E, Jest and Testing Library for unit/integration
- Dockerized for consistent development and deployment
## Contributing
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
## License
This project is private and proprietary.