58 lines
2.6 KiB
TypeScript
58 lines
2.6 KiB
TypeScript
import { QueryInterface, DataTypes } from 'sequelize';
|
|
|
|
export async function up(queryInterface: QueryInterface): Promise<void> {
|
|
// 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<void> {
|
|
// 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);
|
|
}
|
|
}
|