init.sql 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. -- Database initialization script for Docker container
  2. -- This script will be executed when the MySQL container starts for the first time
  3. -- Create database if it doesn't exist
  4. CREATE DATABASE IF NOT EXISTS inventory_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  5. -- Use the database
  6. USE inventory_db;
  7. -- Create users table
  8. CREATE TABLE IF NOT EXISTS users (
  9. id INT AUTO_INCREMENT PRIMARY KEY,
  10. first_name VARCHAR(100) NOT NULL,
  11. last_name VARCHAR(100) NOT NULL,
  12. email VARCHAR(255) NOT NULL UNIQUE,
  13. phone VARCHAR(20),
  14. password VARCHAR(255) NOT NULL,
  15. role ENUM('admin', 'user') DEFAULT 'user',
  16. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  17. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  18. );
  19. -- Create clients table
  20. CREATE TABLE IF NOT EXISTS clients (
  21. id INT AUTO_INCREMENT PRIMARY KEY,
  22. y_tunnus VARCHAR(255),
  23. company_name VARCHAR(255),
  24. first_name VARCHAR(100) NOT NULL,
  25. last_name VARCHAR(100) NOT NULL,
  26. email VARCHAR(255) NOT NULL UNIQUE,
  27. phone VARCHAR(20),
  28. address VARCHAR(255),
  29. city VARCHAR(100),
  30. state VARCHAR(100),
  31. postal_code VARCHAR(20),
  32. country VARCHAR(100),
  33. notes TEXT,
  34. hour_price DECIMAL(10,2) DEFAULT 0.00,
  35. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  36. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  37. INDEX idx_last_name (last_name)
  38. );
  39. -- Create contact_persons table
  40. CREATE TABLE IF NOT EXISTS contact_persons (
  41. id INT AUTO_INCREMENT PRIMARY KEY,
  42. client_id INT NOT NULL,
  43. first_name VARCHAR(100) NOT NULL,
  44. last_name VARCHAR(100) NOT NULL,
  45. email VARCHAR(255),
  46. phone VARCHAR(20),
  47. position VARCHAR(100),
  48. department VARCHAR(100),
  49. is_primary BOOLEAN DEFAULT FALSE,
  50. notes TEXT,
  51. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  52. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  53. FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE CASCADE
  54. );
  55. -- Create projects table
  56. CREATE TABLE IF NOT EXISTS projects (
  57. id INT AUTO_INCREMENT PRIMARY KEY,
  58. name VARCHAR(255) NOT NULL,
  59. description TEXT,
  60. status ENUM('planning', 'active', 'completed', 'on_hold', 'cancelled') DEFAULT 'planning',
  61. customer_id INT,
  62. start_date DATE,
  63. end_date DATE,
  64. budget DECIMAL(12,2),
  65. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  66. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  67. FOREIGN KEY (customer_id) REFERENCES clients(id) ON DELETE SET NULL
  68. );
  69. -- Create tasks table
  70. CREATE TABLE IF NOT EXISTS tasks (
  71. id INT AUTO_INCREMENT PRIMARY KEY,
  72. title VARCHAR(255) NOT NULL,
  73. description TEXT,
  74. status ENUM('pending', 'in_progress', 'completed', 'on_hold', 'cancelled') DEFAULT 'pending',
  75. priority ENUM('low', 'medium', 'high', 'urgent') DEFAULT 'medium',
  76. project_id INT,
  77. assigned_to INT,
  78. due_date DATE,
  79. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  80. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  81. FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
  82. FOREIGN KEY (assigned_to) REFERENCES users(id) ON DELETE SET NULL
  83. );
  84. -- Create work_hours table
  85. CREATE TABLE IF NOT EXISTS work_hours (
  86. id INT AUTO_INCREMENT PRIMARY KEY,
  87. task_id INT NOT NULL,
  88. user_id INT NOT NULL,
  89. date DATE NOT NULL,
  90. hours DECIMAL(5,2) NOT NULL,
  91. description TEXT,
  92. rate DECIMAL(10,2),
  93. total_amount DECIMAL(10,2),
  94. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  95. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  96. FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
  97. FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
  98. INDEX idx_task_date (task_id, date),
  99. INDEX idx_user_date (user_id, date)
  100. );
  101. -- Create items table
  102. CREATE TABLE IF NOT EXISTS items (
  103. id INT AUTO_INCREMENT PRIMARY KEY,
  104. name VARCHAR(255) NOT NULL,
  105. description TEXT,
  106. sku VARCHAR(100) UNIQUE,
  107. category VARCHAR(100),
  108. unit_price DECIMAL(10,2),
  109. quantity INT DEFAULT 0,
  110. min_quantity INT DEFAULT 0,
  111. location VARCHAR(100),
  112. supplier VARCHAR(255),
  113. purchase_price DECIMAL(10,2),
  114. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  115. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  116. );
  117. -- Create accounting_entries table
  118. CREATE TABLE IF NOT EXISTS accounting_entries (
  119. id INT AUTO_INCREMENT PRIMARY KEY,
  120. date DATE NOT NULL,
  121. description TEXT NOT NULL,
  122. account_number VARCHAR(20) NOT NULL,
  123. account_name VARCHAR(255) NOT NULL,
  124. category VARCHAR(100),
  125. debit DECIMAL(12,2) DEFAULT 0.00,
  126. credit DECIMAL(12,2) DEFAULT 0.00,
  127. balance DECIMAL(12,2) DEFAULT 0.00,
  128. entry_type ENUM('income', 'expense', 'opening_balance') DEFAULT 'expense',
  129. reference_number VARCHAR(100),
  130. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  131. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  132. INDEX idx_date (date),
  133. INDEX idx_account (account_number),
  134. INDEX idx_category (category)
  135. );
  136. -- Insert default admin user (password: admin123)
  137. INSERT IGNORE INTO users (first_name, last_name, email, password, role)
  138. VALUES ('Admin', 'User', 'admin@inventory.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin');
  139. -- Insert sample data for testing
  140. INSERT IGNORE INTO clients (first_name, last_name, email, company_name, y_tunnus, hour_price)
  141. VALUES ('Weikka', 'Valavuo', 'weikka@wavium.fi', 'Wavium', '3464619-2', 10.00);
  142. INSERT IGNORE INTO projects (name, description, status, customer_id)
  143. VALUES ('Inventory', 'Inventory Management System', 'active', 1);
  144. INSERT IGNORE INTO tasks (title, description, status, priority, project_id, assigned_to, due_date)
  145. VALUES ('Working hours', 'Tuntien kirjaamismahdollisuus', 'in_progress', 'medium', 1, 1, '2026-04-26');