app/DoctrineMigrations/Version20251215000000.php line 1

Open in your IDE?
  1. <?php
    
    declare(strict_types=1);
    
    namespace DoctrineMigrations;
    
    use Doctrine\DBAL\Schema\Schema;
    use Doctrine\Migrations\AbstractMigration;
    
    /**
     * 在庫・発注管理機能の追加
     */
    final class Version20251215000000 extends AbstractMigration
    {
        public function getDescription(): string
        {
            return '在庫・発注管理機能: 発注登録テーブル、商品規格拡張を追加';
        }
    
        public function up(Schema $schema): void
        {
            $sm = $this->connection->createSchemaManager();
    
            // 1. 商品規格テーブルにカラム追加
            if ($sm->tablesExist(['dtb_product_class'])) {
                $columns = $sm->listTableColumns('dtb_product_class');
                
                if (!isset($columns['safety_stock'])) {
                    $this->addSql('ALTER TABLE dtb_product_class ADD safety_stock DECIMAL(10, 0) UNSIGNED DEFAULT NULL COMMENT \'安全在庫数\' AFTER sale_limit');
                }
                
                if (!isset($columns['last_stock_in_date'])) {
                    $this->addSql('ALTER TABLE dtb_product_class ADD last_stock_in_date DATE DEFAULT NULL COMMENT \'最終入庫日\' AFTER safety_stock');
                }
            }
    
            // 2. 発注登録ヘッダーテーブル
            if (!$sm->tablesExist(['dtb_order_register'])) {
                $this->addSql('
                    CREATE TABLE dtb_order_register (
                        id INT UNSIGNED AUTO_INCREMENT NOT NULL,
                        title VARCHAR(255) NOT NULL COMMENT \'発注登録名\',
                        note LONGTEXT DEFAULT NULL COMMENT \'備考\',
                        del_flg SMALLINT DEFAULT 0 NOT NULL COMMENT \'削除フラグ\',
                        delivery_status SMALLINT DEFAULT 0 NOT NULL COMMENT \'納品状況\',
                        create_date DATETIME NOT NULL,
                        update_date DATETIME NOT NULL,
                        PRIMARY KEY(id)
                    ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ENGINE = InnoDB
                ');
            }
    
            // 3. 発注登録アパレル別グループテーブル
            if (!$sm->tablesExist(['dtb_order_register_apparel'])) {
                $this->addSql('
                    CREATE TABLE dtb_order_register_apparel (
                        id INT UNSIGNED AUTO_INCREMENT NOT NULL,
                        order_register_id INT UNSIGNED NOT NULL COMMENT \'発注登録ID\',
                        apparel_id INT UNSIGNED DEFAULT NULL COMMENT \'アパレルID\',
                        output_flag TINYINT(1) DEFAULT 1 NOT NULL COMMENT \'出力フラグ\',
                        delivery_date DATE DEFAULT NULL COMMENT \'納入予定日\',
                        order_destination TEXT DEFAULT NULL COMMENT \'請求先\',
                        order_source TEXT DEFAULT NULL COMMENT \'発注元\',
                        delivery_destination TEXT DEFAULT NULL COMMENT \'納品先\',
                        notes TEXT DEFAULT NULL COMMENT \'備考\',
                        del_flg SMALLINT DEFAULT 0 NOT NULL COMMENT \'削除フラグ\',
                        create_date DATETIME NOT NULL COMMENT \'(DC2Type:datetimetz)\',
                        update_date DATETIME NOT NULL COMMENT \'(DC2Type:datetimetz)\',
                        PRIMARY KEY(id),
                        INDEX IDX_ORDER_REGISTER_APPAREL_ORDER_REGISTER_ID (order_register_id),
                        INDEX IDX_ORDER_REGISTER_APPAREL_APPAREL_ID (apparel_id),
                        CONSTRAINT FK_ORDER_REGISTER_APPAREL_ORDER_REGISTER 
                            FOREIGN KEY (order_register_id) 
                            REFERENCES dtb_order_register (id) ON DELETE CASCADE
                    ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ENGINE = InnoDB
                ');
            }
    
            // 4. 発注登録明細テーブル
            if (!$sm->tablesExist(['dtb_order_register_item'])) {
                $this->addSql('
                    CREATE TABLE dtb_order_register_item (
                        id INT UNSIGNED AUTO_INCREMENT NOT NULL,
                        order_register_id INT UNSIGNED NOT NULL COMMENT \'発注登録ID\',
                        order_register_apparel_id INT UNSIGNED DEFAULT NULL COMMENT \'発注登録アパレルID\',
                        product_id INT UNSIGNED NOT NULL COMMENT \'商品ID\',
                        product_class_id INT UNSIGNED NOT NULL COMMENT \'商品規格ID\',
                        product_code VARCHAR(255) DEFAULT NULL COMMENT \'商品コード\',
                        product_name VARCHAR(255) NOT NULL COMMENT \'商品名\',
                        class_name VARCHAR(255) DEFAULT NULL COMMENT \'規格名\',
                        quantity INT NOT NULL COMMENT \'発注数量\',
                        delivery_date DATE DEFAULT NULL COMMENT \'納入予定日\',
                        delivery_status SMALLINT DEFAULT 0 NOT NULL COMMENT \'納品状況: 0=未納品, 1=入庫登録済み, 2=納品済み\',
                        sort_no INT NOT NULL COMMENT \'並び順\',
                        create_date DATETIME NOT NULL,
                        update_date DATETIME NOT NULL,
                        PRIMARY KEY(id),
                        INDEX IDX_ORDER_REGISTER_ITEM_ORDER_REGISTER_ID (order_register_id),
                        INDEX IDX_ORDER_REGISTER_ITEM_APPAREL_ID (order_register_apparel_id),
                        INDEX IDX_ORDER_REGISTER_ITEM_PRODUCT_ID (product_id),
                        INDEX IDX_ORDER_REGISTER_ITEM_PRODUCT_CLASS_ID (product_class_id),
                        CONSTRAINT FK_ORDER_REGISTER_ITEM_ORDER_REGISTER_ID 
                            FOREIGN KEY (order_register_id) 
                            REFERENCES dtb_order_register (id) ON DELETE CASCADE,
                        CONSTRAINT FK_ORDER_REGISTER_ITEM_APPAREL 
                            FOREIGN KEY (order_register_apparel_id) 
                            REFERENCES dtb_order_register_apparel (id) ON DELETE CASCADE
                    ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ENGINE = InnoDB
                ');
            }
        }
    
        public function down(Schema $schema): void
        {
            $sm = $this->connection->createSchemaManager();
    
            // テーブル削除(外部キー制約の順序を考慮)
            if ($sm->tablesExist(['dtb_order_register_item'])) {
                $this->addSql('DROP TABLE dtb_order_register_item');
            }
    
            if ($sm->tablesExist(['dtb_order_register_apparel'])) {
                $this->addSql('DROP TABLE dtb_order_register_apparel');
            }
    
            if ($sm->tablesExist(['dtb_order_register'])) {
                $this->addSql('DROP TABLE dtb_order_register');
            }
    
            // 商品規格テーブルのカラム削除
            if ($sm->tablesExist(['dtb_product_class'])) {
                $columns = $sm->listTableColumns('dtb_product_class');
                
                if (isset($columns['last_stock_in_date'])) {
                    $this->addSql('ALTER TABLE dtb_product_class DROP COLUMN last_stock_in_date');
                }
                
                if (isset($columns['safety_stock'])) {
                    $this->addSql('ALTER TABLE dtb_product_class DROP COLUMN safety_stock');
                }
            }
        }
    }