import { QueryInterface, DataTypes } from 'sequelize'; export async function up(queryInterface: QueryInterface): Promise { // 1. Add total_proposed_taxable_amount to dealer_claim_details const dealerClaimDetailsTable = await queryInterface.describeTable('dealer_claim_details'); if (!dealerClaimDetailsTable.total_proposed_taxable_amount) { await queryInterface.addColumn('dealer_claim_details', 'total_proposed_taxable_amount', { type: DataTypes.DECIMAL(15, 2), allowNull: true, comment: 'Total taxable amount from proposal or actuals if higher' }); } // 2. Add taxable_closed_expenses to claim_budget_tracking const claimBudgetTrackingTable = await queryInterface.describeTable('claim_budget_tracking'); if (!claimBudgetTrackingTable.taxable_closed_expenses) { await queryInterface.addColumn('claim_budget_tracking', 'taxable_closed_expenses', { type: DataTypes.DECIMAL(15, 2), allowNull: true, comment: 'Total taxable amount from the completion expenses' }); } // 3. Remove unique constraint from internal_orders to support multiple IOs try { // Check if the unique index exists before trying to remove it const indexes = await queryInterface.showIndex('internal_orders'); const uniqueIndex = (indexes as any[]).find((idx: any) => idx.name === 'idx_internal_orders_request_id_unique' || (idx.fields && idx.fields[0] && idx.fields[0].attribute === 'request_id' && idx.unique)); if (uniqueIndex) { await queryInterface.removeIndex('internal_orders', uniqueIndex.name); // Add a non-unique index for performance await queryInterface.addIndex('internal_orders', ['request_id'], { name: 'idx_internal_orders_request_id' }); } } catch (error) { console.error('Error removing unique index from internal_orders:', error); } } export async function down(queryInterface: QueryInterface): Promise { // Rollback logic try { await queryInterface.removeColumn('dealer_claim_details', 'total_proposed_taxable_amount'); await queryInterface.removeColumn('claim_budget_tracking', 'taxable_closed_expenses'); await queryInterface.removeIndex('internal_orders', 'idx_internal_orders_request_id'); await queryInterface.addIndex('internal_orders', ['request_id'], { name: 'idx_internal_orders_request_id_unique', unique: true }); } catch (error) { console.error('Error in migration rollback:', error); } }