Files
mold_cost_online_tool/README.md
T

205 lines
5.0 KiB
Markdown

# Mold Cost Calculator
A Flask-based web application for calculating mold costs and managing quotations.
## Features
- **Cost Calculation**
- Mold type-based calculations
- Complexity factors (sidewall, slider, cavity)
- Texture options (standard, custom, laser)
- Tax rate support for different countries
- **User Management**
- Secure authentication system
- Role-based access control
- Admin dashboard for user management
- Email-based registration with allowlist
- **Quotation System**
- Create and manage quotations
- Export functionality
- Historical record keeping
- Admin review and management
## Tech Stack
- **Backend**: Flask, SQLAlchemy
- **Frontend**: HTML, CSS, JavaScript
- **Database**: PostgreSQL (production/development), SQLite in-memory (testing)
- **Server**: Gunicorn
- **Proxy**: Nginx
- **Authentication**: Flask-Login
- **Forms**: Flask-WTF
- **Database Migrations**: Flask-Migrate
- **Containerization**: Podman/Docker
## Project Structure
```
mold_cost_online_tool/
├── app/ # Application package
│ ├── forms/ # Form definitions
│ ├── models/ # Database models
│ ├── static/ # Static files (CSS, JS)
│ └── templates/ # HTML templates
├── instance/ # Instance-specific files
├── logs/ # Application logs
├── migrations/ # Database migrations
├── tests/ # Test files
├── deploy/ # Deployment configuration
├── db_data/ # Database data (development)
├── app.py # Main application file
├── config.py # Configuration
├── run.py # Application entry point
├── requirements.txt # Python dependencies
├── gunicorn_config.py # Gunicorn configuration
├── podman-compose.yml # Production container setup
└── podman-compose.development.yml # Development container setup
```
## Setup and Installation
### Option 1: Using Containers (Recommended)
1. **Clone the repository**
```bash
git clone <repository-url>
cd mold_cost_online_tool
```
2. **Set up environment variables**
Create `.env.development` file for development:
```bash
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=mold_cost
DATABASE_HOST=db_development
SECRET_KEY=your-secret-key
MAIL_SERVER=smtp.example.com
MAIL_USERNAME=your-email@example.com
MAIL_PASSWORD=your-password
MAIL_DEFAULT_SENDER=your-email@example.com
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=admin-password
```
3. **Start the development environment**
```bash
podman-compose -f podman-compose.development.yml up --build
```
4. **Initialize the database**
```bash
flask db upgrade
```
### Option 2: Local Development
1. **Clone the repository**
```bash
git clone <repository-url>
cd mold_cost_online_tool
```
2. **Create and activate virtual environment**
```bash
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
```
3. **Install dependencies**
```bash
pip install -r requirements.txt
```
4. **Set up PostgreSQL database**
- Install PostgreSQL
- Create database and user
- Set environment variables for database connection
5. **Set up environment variables**
```bash
export FLASK_APP=run.py
export FLASK_ENV=development
export SECRET_KEY=your-secret-key
export DATABASE_URL=postgresql://user:password@localhost/dbname
```
6. **Initialize the database**
```bash
flask db upgrade
```
## Development
1. **Run development server**
```bash
python run.py
```
2. **Run tests**
```bash
python -m pytest tests/
```
## Deployment
1. **Production server setup**
- Configure Nginx as reverse proxy
- Set up Gunicorn with provided configuration
- Configure SSL certificates
- Set up PostgreSQL database
2. **Environment variables for production**
```bash
FLASK_APP=run.py
FLASK_ENV=production
SECRET_KEY=your-secure-secret-key
DATABASE_URL=postgresql://user:password@host/dbname
```
3. **Start the application**
```bash
gunicorn -c gunicorn_config.py run:app
```
## Database Management
- **Backups**: Automated daily backups using `pg_dump`
- **Migrations**: Use Flask-Migrate for database schema changes
- **Development**: Uses PostgreSQL container with persistent data
- **Testing**: Uses SQLite in-memory database for fast, isolated tests
## Security Features
- CSRF protection
- Secure password hashing
- Session management
- Input validation
- Security headers
- Rate limiting
- SQL injection prevention
## Maintenance
- Regular database backups
- Log rotation
- Security updates
- Performance monitoring
## Contributing
1. Fork the repository
2. Create a feature branch
3. Commit your changes
4. Push to the branch
5. Create a Pull Request
## License
PCT & TOOLING app, all rights reserved.
## Support
For support and inquiries, please contact: jimmy.gan@adidas.com