| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- -- Database initialization script for Docker container
- -- This script will be executed when the MySQL container starts for the first time
- -- Create database if it doesn't exist
- CREATE DATABASE IF NOT EXISTS inventory_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- -- Use the database
- USE inventory_db;
- -- Create users table
- CREATE TABLE IF NOT EXISTS users (
- id INT AUTO_INCREMENT PRIMARY KEY,
- first_name VARCHAR(100) NOT NULL,
- last_name VARCHAR(100) NOT NULL,
- email VARCHAR(255) NOT NULL UNIQUE,
- phone VARCHAR(20),
- password VARCHAR(255) NOT NULL,
- role ENUM('admin', 'user') DEFAULT 'user',
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- );
- -- Create clients table
- CREATE TABLE IF NOT EXISTS clients (
- id INT AUTO_INCREMENT PRIMARY KEY,
- y_tunnus VARCHAR(255),
- company_name VARCHAR(255),
- first_name VARCHAR(100) NOT NULL,
- last_name VARCHAR(100) NOT NULL,
- email VARCHAR(255) NOT NULL UNIQUE,
- phone VARCHAR(20),
- address VARCHAR(255),
- city VARCHAR(100),
- state VARCHAR(100),
- postal_code VARCHAR(20),
- country VARCHAR(100),
- notes TEXT,
- hour_price DECIMAL(10,2) DEFAULT 0.00,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- INDEX idx_last_name (last_name)
- );
- -- Create contact_persons table
- CREATE TABLE IF NOT EXISTS contact_persons (
- id INT AUTO_INCREMENT PRIMARY KEY,
- client_id INT NOT NULL,
- first_name VARCHAR(100) NOT NULL,
- last_name VARCHAR(100) NOT NULL,
- email VARCHAR(255),
- phone VARCHAR(20),
- position VARCHAR(100),
- department VARCHAR(100),
- is_primary BOOLEAN DEFAULT FALSE,
- notes TEXT,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE CASCADE
- );
- -- Create projects table
- CREATE TABLE IF NOT EXISTS projects (
- id INT AUTO_INCREMENT PRIMARY KEY,
- name VARCHAR(255) NOT NULL,
- description TEXT,
- status ENUM('planning', 'active', 'completed', 'on_hold', 'cancelled') DEFAULT 'planning',
- customer_id INT,
- start_date DATE,
- end_date DATE,
- budget DECIMAL(12,2),
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- FOREIGN KEY (customer_id) REFERENCES clients(id) ON DELETE SET NULL
- );
- -- Create tasks table
- CREATE TABLE IF NOT EXISTS tasks (
- id INT AUTO_INCREMENT PRIMARY KEY,
- title VARCHAR(255) NOT NULL,
- description TEXT,
- status ENUM('pending', 'in_progress', 'completed', 'on_hold', 'cancelled') DEFAULT 'pending',
- priority ENUM('low', 'medium', 'high', 'urgent') DEFAULT 'medium',
- project_id INT,
- assigned_to INT,
- due_date DATE,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
- FOREIGN KEY (assigned_to) REFERENCES users(id) ON DELETE SET NULL
- );
- -- Create work_hours table
- CREATE TABLE IF NOT EXISTS work_hours (
- id INT AUTO_INCREMENT PRIMARY KEY,
- task_id INT NOT NULL,
- user_id INT NOT NULL,
- date DATE NOT NULL,
- hours DECIMAL(5,2) NOT NULL,
- description TEXT,
- rate DECIMAL(10,2),
- total_amount DECIMAL(10,2),
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
- FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
- INDEX idx_task_date (task_id, date),
- INDEX idx_user_date (user_id, date)
- );
- -- Create items table
- CREATE TABLE IF NOT EXISTS items (
- id INT AUTO_INCREMENT PRIMARY KEY,
- name VARCHAR(255) NOT NULL,
- description TEXT,
- sku VARCHAR(100) UNIQUE,
- category VARCHAR(100),
- unit_price DECIMAL(10,2),
- quantity INT DEFAULT 0,
- min_quantity INT DEFAULT 0,
- location VARCHAR(100),
- supplier VARCHAR(255),
- purchase_price DECIMAL(10,2),
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- );
- -- Create accounting_entries table
- CREATE TABLE IF NOT EXISTS accounting_entries (
- id INT AUTO_INCREMENT PRIMARY KEY,
- date DATE NOT NULL,
- description TEXT NOT NULL,
- account_number VARCHAR(20) NOT NULL,
- account_name VARCHAR(255) NOT NULL,
- category VARCHAR(100),
- debit DECIMAL(12,2) DEFAULT 0.00,
- credit DECIMAL(12,2) DEFAULT 0.00,
- balance DECIMAL(12,2) DEFAULT 0.00,
- entry_type ENUM('income', 'expense', 'opening_balance') DEFAULT 'expense',
- reference_number VARCHAR(100),
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- INDEX idx_date (date),
- INDEX idx_account (account_number),
- INDEX idx_category (category)
- );
- -- Insert default admin user (password: admin123)
- INSERT IGNORE INTO users (first_name, last_name, email, password, role)
- VALUES ('Admin', 'User', 'admin@inventory.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin');
- -- Insert sample data for testing
- INSERT IGNORE INTO clients (first_name, last_name, email, company_name, y_tunnus, hour_price)
- VALUES ('Weikka', 'Valavuo', 'weikka@wavium.fi', 'Wavium', '3464619-2', 10.00);
- INSERT IGNORE INTO projects (name, description, status, customer_id)
- VALUES ('Inventory', 'Inventory Management System', 'active', 1);
- INSERT IGNORE INTO tasks (title, description, status, priority, project_id, assigned_to, due_date)
- VALUES ('Working hours', 'Tuntien kirjaamismahdollisuus', 'in_progress', 'medium', 1, 1, '2026-04-26');
|