diff --git a/db/migrations/20251125110000_create_warehouse_project.php b/db/migrations/20251125110000_create_warehouse_project.php index c8f4c0508..7a59b93c9 100644 --- a/db/migrations/20251125110000_create_warehouse_project.php +++ b/db/migrations/20251125110000_create_warehouse_project.php @@ -5,58 +5,56 @@ use Phinx\Migration\AbstractMigration; final class CreateWarehouseProject extends AbstractMigration { - public function change(): void - { - if ($this->getEnvironment() == "thetool") { - // Main Project Table - $projects = $this->table('WarehouseProject'); - $projects->addColumn('projectNumber', 'string', ['limit' => 20, 'comment' => 'XP-YYYY-NNNN']) - ->addColumn('title', 'string', ['limit' => 255]) - ->addColumn('description', 'text', ['null' => true]) - ->addColumn('startDate', 'integer', ['null' => true]) - ->addColumn('endDate', 'integer', ['null' => true]) - ->addColumn('status', 'enum', ['values' => ['new', 'wip', 'finished', 'cancelled'], 'default' => 'new']) - ->addColumn('financials', 'decimal', ['precision' => 10, 'scale' => 2, 'default' => 0.00]) - ->addColumn('storageLocation', 'string', ['limit' => 255, 'null' => true]) - ->addColumn('externalTeam', 'text', ['null' => true, 'comment' => 'Free text for external participants']) - ->addColumn('createdFromOrderId', 'integer', ['null' => true]) - ->addColumn('createBy', 'integer') - ->addColumn('create', 'integer') - ->addIndex(['projectNumber'], ['unique' => true]) - ->create(); +public function change(): void +{ + if ($this->getEnvironment() == "thetool") { + // Main Project Table + $projects = $this->table('WarehouseProject'); + $projects->addColumn('projectNumber', 'string', ['limit' => 20, 'comment' => 'XP-YYYY-NNNN']) + ->addColumn('title', 'string', ['limit' => 255]) + ->addColumn('description', 'text', ['null' => true]) + ->addColumn('startDate', 'integer', ['null' => true]) + ->addColumn('endDate', 'integer', ['null' => true]) + ->addColumn('status', 'enum', ['values' => ['new', 'wip', 'finished', 'cancelled'], 'default' => 'new']) + ->addColumn('financials', 'decimal', ['precision' => 10, 'scale' => 2, 'default' => 0.00]) + ->addColumn('storageLocation', 'string', ['limit' => 255, 'null' => true]) + ->addColumn('externalTeam', 'text', ['null' => true, 'comment' => 'Free text for external participants']) + ->addColumn('createdFromOrderId', 'integer', ['null' => true, 'signed' => false]) // FIX: Likely needs to match Order ID + ->addColumn('createBy', 'integer', ['signed' => false]) // FIX: Likely references a User ID + ->addColumn('create', 'integer') + ->addIndex(['projectNumber'], ['unique' => true]) + ->create(); - // Tasks Table - $tasks = $this->table('WarehouseProjectTask'); - $tasks->addColumn('projectId', 'integer') - ->addColumn('parentTaskId', 'integer', ['null' => true]) - ->addColumn('title', 'string', ['limit' => 255]) - ->addColumn('description', 'text', ['null' => true]) - ->addColumn('status', 'enum', ['values' => ['todo', 'in_progress', 'done'], 'default' => 'todo']) - ->addColumn('assignedUserId', 'integer', ['null' => true]) - ->addColumn('order', 'integer', ['default' => 0]) - ->addColumn('createBy', 'integer') - ->addColumn('create', 'integer') - ->addForeignKey('projectId', 'WarehouseProject', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE']) - ->create(); + // Tasks Table + $tasks = $this->table('WarehouseProjectTask'); + $tasks->addColumn('projectId', 'integer', ['signed' => false]) // <--- FIX HERE + ->addColumn('parentTaskId', 'integer', ['null' => true, 'signed' => false]) // FIX: Good practice for self-referencing FKs + ->addColumn('title', 'string', ['limit' => 255]) + ->addColumn('description', 'text', ['null' => true]) + ->addColumn('status', 'enum', ['values' => ['todo', 'in_progress', 'done'], 'default' => 'todo']) + ->addColumn('assignedUserId', 'integer', ['null' => true, 'signed' => false]) // FIX: Matches User ID + ->addColumn('order', 'integer', ['default' => 0]) + ->addColumn('createBy', 'integer', ['signed' => false]) // FIX + ->addColumn('create', 'integer') + ->addForeignKey('projectId', 'WarehouseProject', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE']) + ->create(); - // Project Members (Internal Team) - $members = $this->table('WarehouseProjectMember'); - $members->addColumn('projectId', 'integer') - ->addColumn('userId', 'integer') - ->addColumn('role', 'string', ['limit' => 50, 'null' => true]) - ->addColumn('create', 'integer') - ->addForeignKey('projectId', 'WarehouseProject', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE']) - ->create(); + // Project Members (Internal Team) + $members = $this->table('WarehouseProjectMember'); + $members->addColumn('projectId', 'integer', ['signed' => false]) // <--- FIX HERE + ->addColumn('userId', 'integer', ['signed' => false]) // FIX + ->addColumn('role', 'string', ['limit' => 50, 'null' => true]) + ->addColumn('create', 'integer') + ->addForeignKey('projectId', 'WarehouseProject', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE']) + ->create(); - // Link table for Order Requests - $orderRequests = $this->table('WarehouseProjectOrderRequest'); - $orderRequests->addColumn('projectId', 'integer') - ->addColumn('orderRequestId', 'integer') - ->addColumn('create', 'integer') - ->addForeignKey('projectId', 'WarehouseProject', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE']) - // Assuming WarehouseOrderRequest table exists based on controller analysis - ->addForeignKey('orderRequestId', 'WarehouseOrderRequest', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE']) - ->create(); - } + // Link table for Order Requests + $orderRequests = $this->table('WarehouseProjectOrderRequest'); + $orderRequests->addColumn('projectId', 'integer', ['signed' => false]) // <--- FIX HERE + ->addColumn('orderRequestId', 'integer', ['signed' => false]) // FIX + ->addColumn('create', 'integer') + ->addForeignKey('projectId', 'WarehouseProject', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE']) + ->addForeignKey('orderRequestId', 'WarehouseOrderRequest', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE']) + ->create(); } }