IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL BEGIN CREATE TABLE [__EFMigrationsHistory] ( [MigrationId] nvarchar(150) NOT NULL, [ProductVersion] nvarchar(32) NOT NULL, CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId]) ); END; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260316155002_Baseline' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-16T15:49:58.7377851Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260316155002_Baseline' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-16T15:49:58.7377856Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260316155002_Baseline' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-16T15:49:58.7377858Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260316155002_Baseline' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260316155002_Baseline', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260317121938_AddAiContextProfile' ) BEGIN ALTER TABLE [CompanyOperatingCosts] ADD [AiContextProfile] nvarchar(2000) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260317121938_AddAiContextProfile' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-17T12:19:34.4894690Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260317121938_AddAiContextProfile' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-17T12:19:34.4894696Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260317121938_AddAiContextProfile' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-17T12:19:34.4894698Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260317121938_AddAiContextProfile' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260317121938_AddAiContextProfile', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260317205927_FixLaborItemQuantityDecimal' ) BEGIN DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] WHERE ([d].[parent_object_id] = OBJECT_ID(N'[QuoteItems]') AND [c].[name] = N'Quantity'); IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [QuoteItems] DROP CONSTRAINT [' + @var0 + '];'); ALTER TABLE [QuoteItems] ALTER COLUMN [Quantity] decimal(18,2) NOT NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260317205927_FixLaborItemQuantityDecimal' ) BEGIN DECLARE @var1 sysname; SELECT @var1 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] WHERE ([d].[parent_object_id] = OBJECT_ID(N'[JobItems]') AND [c].[name] = N'Quantity'); IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [JobItems] DROP CONSTRAINT [' + @var1 + '];'); ALTER TABLE [JobItems] ALTER COLUMN [Quantity] decimal(18,2) NOT NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260317205927_FixLaborItemQuantityDecimal' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-17T20:59:24.2463737Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260317205927_FixLaborItemQuantityDecimal' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-17T20:59:24.2463746Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260317205927_FixLaborItemQuantityDecimal' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-17T20:59:24.2463748Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260317205927_FixLaborItemQuantityDecimal' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260317205927_FixLaborItemQuantityDecimal', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318124847_AddJobTimeEntries' ) BEGIN CREATE TABLE [JobTimeEntries] ( [Id] int NOT NULL IDENTITY, [JobId] int NOT NULL, [ShopWorkerId] int NOT NULL, [WorkDate] datetime2 NOT NULL, [HoursWorked] decimal(18,2) NOT NULL, [Stage] nvarchar(max) NULL, [Notes] nvarchar(max) NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_JobTimeEntries] PRIMARY KEY ([Id]), CONSTRAINT [FK_JobTimeEntries_Jobs_JobId] FOREIGN KEY ([JobId]) REFERENCES [Jobs] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_JobTimeEntries_ShopWorkers_ShopWorkerId] FOREIGN KEY ([ShopWorkerId]) REFERENCES [ShopWorkers] ([Id]) ON DELETE CASCADE ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318124847_AddJobTimeEntries' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T12:48:44.7462691Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318124847_AddJobTimeEntries' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T12:48:44.7462697Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318124847_AddJobTimeEntries' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T12:48:44.7462699Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318124847_AddJobTimeEntries' ) BEGIN CREATE INDEX [IX_JobTimeEntries_JobId] ON [JobTimeEntries] ([JobId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318124847_AddJobTimeEntries' ) BEGIN CREATE INDEX [IX_JobTimeEntries_ShopWorkerId] ON [JobTimeEntries] ([ShopWorkerId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318124847_AddJobTimeEntries' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260318124847_AddJobTimeEntries', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318131500_AddJobShopAccessCode' ) BEGIN ALTER TABLE [Jobs] ADD [ShopAccessCode] uniqueidentifier NOT NULL DEFAULT (NEWID()); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318131500_AddJobShopAccessCode' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T13:14:57.2203832Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318131500_AddJobShopAccessCode' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T13:14:57.2203838Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318131500_AddJobShopAccessCode' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T13:14:57.2203839Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318131500_AddJobShopAccessCode' ) BEGIN CREATE UNIQUE INDEX [IX_Jobs_ShopAccessCode] ON [Jobs] ([ShopAccessCode]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318131500_AddJobShopAccessCode' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260318131500_AddJobShopAccessCode', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318132857_AddShopWorkerRoleCosts' ) BEGIN CREATE TABLE [ShopWorkerRoleCosts] ( [Id] int NOT NULL IDENTITY, [Role] int NOT NULL, [HourlyRate] decimal(18,2) NOT NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_ShopWorkerRoleCosts] PRIMARY KEY ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318132857_AddShopWorkerRoleCosts' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T13:28:54.6854802Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318132857_AddShopWorkerRoleCosts' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T13:28:54.6854849Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318132857_AddShopWorkerRoleCosts' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T13:28:54.6854851Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318132857_AddShopWorkerRoleCosts' ) BEGIN CREATE UNIQUE INDEX [IX_ShopWorkerRoleCosts_CompanyId_Role] ON [ShopWorkerRoleCosts] ([CompanyId], [Role]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318132857_AddShopWorkerRoleCosts' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260318132857_AddShopWorkerRoleCosts', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN ALTER TABLE [Jobs] ADD [IsReworkJob] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN ALTER TABLE [Jobs] ADD [OriginalJobId] int NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN CREATE TABLE [ReworkRecords] ( [Id] int NOT NULL IDENTITY, [JobId] int NOT NULL, [JobItemId] int NULL, [ReworkJobId] int NULL, [ReworkType] int NOT NULL, [Reason] int NOT NULL, [DefectDescription] nvarchar(max) NOT NULL, [DiscoveredBy] int NOT NULL, [DiscoveredDate] datetime2 NOT NULL, [ReportedByName] nvarchar(max) NULL, [EstimatedReworkCost] decimal(18,2) NOT NULL, [ActualReworkCost] decimal(18,2) NOT NULL, [IsBillableToCustomer] bit NOT NULL, [BillingNotes] nvarchar(max) NULL, [Status] int NOT NULL, [Resolution] int NULL, [ResolvedDate] datetime2 NULL, [ResolutionNotes] nvarchar(max) NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_ReworkRecords] PRIMARY KEY ([Id]), CONSTRAINT [FK_ReworkRecords_JobItems_JobItemId] FOREIGN KEY ([JobItemId]) REFERENCES [JobItems] ([Id]), CONSTRAINT [FK_ReworkRecords_Jobs_JobId] FOREIGN KEY ([JobId]) REFERENCES [Jobs] ([Id]) ON DELETE NO ACTION, CONSTRAINT [FK_ReworkRecords_Jobs_ReworkJobId] FOREIGN KEY ([ReworkJobId]) REFERENCES [Jobs] ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T13:42:32.9092998Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T13:42:32.9093003Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T13:42:32.9093005Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN CREATE INDEX [IX_Jobs_OriginalJobId] ON [Jobs] ([OriginalJobId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN CREATE INDEX [IX_ReworkRecords_JobId] ON [ReworkRecords] ([JobId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN CREATE INDEX [IX_ReworkRecords_JobItemId] ON [ReworkRecords] ([JobItemId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN CREATE INDEX [IX_ReworkRecords_ReworkJobId] ON [ReworkRecords] ([ReworkJobId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN ALTER TABLE [Jobs] ADD CONSTRAINT [FK_Jobs_Jobs_OriginalJobId] FOREIGN KEY ([OriginalJobId]) REFERENCES [Jobs] ([Id]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318134236_AddReworkTracking' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260318134236_AddReworkTracking', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN ALTER TABLE [Invoices] ADD [CreditApplied] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN ALTER TABLE [Customers] ADD [CreditBalance] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE TABLE [CreditMemos] ( [Id] int NOT NULL IDENTITY, [MemoNumber] nvarchar(450) NOT NULL, [CustomerId] int NOT NULL, [OriginalInvoiceId] int NULL, [ReworkRecordId] int NULL, [Amount] decimal(18,2) NOT NULL, [AmountApplied] decimal(18,2) NOT NULL, [IssueDate] datetime2 NOT NULL, [ExpiryDate] datetime2 NULL, [Reason] nvarchar(max) NOT NULL, [Notes] nvarchar(max) NULL, [Status] int NOT NULL, [IssuedById] nvarchar(450) NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_CreditMemos] PRIMARY KEY ([Id]), CONSTRAINT [FK_CreditMemos_AspNetUsers_IssuedById] FOREIGN KEY ([IssuedById]) REFERENCES [AspNetUsers] ([Id]), CONSTRAINT [FK_CreditMemos_Customers_CustomerId] FOREIGN KEY ([CustomerId]) REFERENCES [Customers] ([Id]) ON DELETE NO ACTION, CONSTRAINT [FK_CreditMemos_Invoices_OriginalInvoiceId] FOREIGN KEY ([OriginalInvoiceId]) REFERENCES [Invoices] ([Id]), CONSTRAINT [FK_CreditMemos_ReworkRecords_ReworkRecordId] FOREIGN KEY ([ReworkRecordId]) REFERENCES [ReworkRecords] ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE TABLE [Refunds] ( [Id] int NOT NULL IDENTITY, [InvoiceId] int NOT NULL, [PaymentId] int NULL, [Amount] decimal(18,2) NOT NULL, [RefundDate] datetime2 NOT NULL, [RefundMethod] int NOT NULL, [Reason] nvarchar(max) NOT NULL, [Reference] nvarchar(max) NULL, [Notes] nvarchar(max) NULL, [Status] int NOT NULL, [IssuedDate] datetime2 NULL, [IssuedById] nvarchar(450) NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_Refunds] PRIMARY KEY ([Id]), CONSTRAINT [FK_Refunds_AspNetUsers_IssuedById] FOREIGN KEY ([IssuedById]) REFERENCES [AspNetUsers] ([Id]), CONSTRAINT [FK_Refunds_Invoices_InvoiceId] FOREIGN KEY ([InvoiceId]) REFERENCES [Invoices] ([Id]) ON DELETE NO ACTION, CONSTRAINT [FK_Refunds_Payments_PaymentId] FOREIGN KEY ([PaymentId]) REFERENCES [Payments] ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE TABLE [CreditMemoApplications] ( [Id] int NOT NULL IDENTITY, [CreditMemoId] int NOT NULL, [InvoiceId] int NOT NULL, [AmountApplied] decimal(18,2) NOT NULL, [AppliedDate] datetime2 NOT NULL, [AppliedById] nvarchar(450) NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_CreditMemoApplications] PRIMARY KEY ([Id]), CONSTRAINT [FK_CreditMemoApplications_AspNetUsers_AppliedById] FOREIGN KEY ([AppliedById]) REFERENCES [AspNetUsers] ([Id]), CONSTRAINT [FK_CreditMemoApplications_CreditMemos_CreditMemoId] FOREIGN KEY ([CreditMemoId]) REFERENCES [CreditMemos] ([Id]) ON DELETE NO ACTION, CONSTRAINT [FK_CreditMemoApplications_Invoices_InvoiceId] FOREIGN KEY ([InvoiceId]) REFERENCES [Invoices] ([Id]) ON DELETE NO ACTION ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T22:26:44.9349567Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T22:26:44.9349573Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-18T22:26:44.9349575Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE INDEX [IX_CreditMemoApplications_AppliedById] ON [CreditMemoApplications] ([AppliedById]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE INDEX [IX_CreditMemoApplications_CreditMemoId] ON [CreditMemoApplications] ([CreditMemoId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE INDEX [IX_CreditMemoApplications_InvoiceId] ON [CreditMemoApplications] ([InvoiceId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE UNIQUE INDEX [IX_CreditMemos_CompanyId_MemoNumber] ON [CreditMemos] ([CompanyId], [MemoNumber]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE INDEX [IX_CreditMemos_CustomerId] ON [CreditMemos] ([CustomerId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE INDEX [IX_CreditMemos_IssuedById] ON [CreditMemos] ([IssuedById]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE INDEX [IX_CreditMemos_OriginalInvoiceId] ON [CreditMemos] ([OriginalInvoiceId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE INDEX [IX_CreditMemos_ReworkRecordId] ON [CreditMemos] ([ReworkRecordId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE INDEX [IX_Refunds_InvoiceId] ON [Refunds] ([InvoiceId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE INDEX [IX_Refunds_IssuedById] ON [Refunds] ([IssuedById]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN CREATE INDEX [IX_Refunds_PaymentId] ON [Refunds] ([PaymentId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260318222648_AddRefundsAndCreditMemos' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260318222648_AddRefundsAndCreditMemos', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE TABLE [JobTemplates] ( [Id] int NOT NULL IDENTITY, [Name] nvarchar(max) NOT NULL, [Description] nvarchar(max) NULL, [CustomerId] int NULL, [SpecialInstructions] nvarchar(max) NULL, [IsActive] bit NOT NULL, [UsageCount] int NOT NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_JobTemplates] PRIMARY KEY ([Id]), CONSTRAINT [FK_JobTemplates_Customers_CustomerId] FOREIGN KEY ([CustomerId]) REFERENCES [Customers] ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE TABLE [JobTemplateItems] ( [Id] int NOT NULL IDENTITY, [JobTemplateId] int NOT NULL, [Description] nvarchar(max) NOT NULL, [Quantity] decimal(18,2) NOT NULL, [SurfaceAreaSqFt] decimal(18,2) NOT NULL, [CatalogItemId] int NULL, [IsGenericItem] bit NOT NULL, [IsLaborItem] bit NOT NULL, [ManualUnitPrice] decimal(18,2) NULL, [RequiresSandblasting] bit NOT NULL, [RequiresMasking] bit NOT NULL, [IncludePrepCost] bit NOT NULL, [EstimatedMinutes] int NOT NULL, [Complexity] nvarchar(max) NULL, [Notes] nvarchar(max) NULL, [DisplayOrder] int NOT NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_JobTemplateItems] PRIMARY KEY ([Id]), CONSTRAINT [FK_JobTemplateItems_CatalogItems_CatalogItemId] FOREIGN KEY ([CatalogItemId]) REFERENCES [CatalogItems] ([Id]), CONSTRAINT [FK_JobTemplateItems_JobTemplates_JobTemplateId] FOREIGN KEY ([JobTemplateId]) REFERENCES [JobTemplates] ([Id]) ON DELETE CASCADE ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE TABLE [JobTemplateItemCoats] ( [Id] int NOT NULL IDENTITY, [JobTemplateItemId] int NOT NULL, [CoatName] nvarchar(max) NOT NULL, [Sequence] int NOT NULL, [InventoryItemId] int NULL, [ColorName] nvarchar(max) NULL, [VendorId] int NULL, [ColorCode] nvarchar(max) NULL, [Finish] nvarchar(max) NULL, [CoverageSqFtPerLb] decimal(18,2) NOT NULL, [TransferEfficiency] decimal(18,2) NOT NULL, [PowderCostPerLb] decimal(18,2) NULL, [Notes] nvarchar(max) NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_JobTemplateItemCoats] PRIMARY KEY ([Id]), CONSTRAINT [FK_JobTemplateItemCoats_InventoryItems_InventoryItemId] FOREIGN KEY ([InventoryItemId]) REFERENCES [InventoryItems] ([Id]), CONSTRAINT [FK_JobTemplateItemCoats_JobTemplateItems_JobTemplateItemId] FOREIGN KEY ([JobTemplateItemId]) REFERENCES [JobTemplateItems] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_JobTemplateItemCoats_Vendors_VendorId] FOREIGN KEY ([VendorId]) REFERENCES [Vendors] ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE TABLE [JobTemplateItemPrepServices] ( [Id] int NOT NULL IDENTITY, [JobTemplateItemId] int NOT NULL, [PrepServiceId] int NOT NULL, [EstimatedMinutes] int NOT NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_JobTemplateItemPrepServices] PRIMARY KEY ([Id]), CONSTRAINT [FK_JobTemplateItemPrepServices_JobTemplateItems_JobTemplateItemId] FOREIGN KEY ([JobTemplateItemId]) REFERENCES [JobTemplateItems] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_JobTemplateItemPrepServices_PrepServices_PrepServiceId] FOREIGN KEY ([PrepServiceId]) REFERENCES [PrepServices] ([Id]) ON DELETE CASCADE ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-19T02:38:23.4195291Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-19T02:38:23.4195296Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-19T02:38:23.4195298Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE INDEX [IX_JobTemplateItemCoats_InventoryItemId] ON [JobTemplateItemCoats] ([InventoryItemId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE INDEX [IX_JobTemplateItemCoats_JobTemplateItemId] ON [JobTemplateItemCoats] ([JobTemplateItemId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE INDEX [IX_JobTemplateItemCoats_VendorId] ON [JobTemplateItemCoats] ([VendorId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE INDEX [IX_JobTemplateItemPrepServices_JobTemplateItemId] ON [JobTemplateItemPrepServices] ([JobTemplateItemId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE INDEX [IX_JobTemplateItemPrepServices_PrepServiceId] ON [JobTemplateItemPrepServices] ([PrepServiceId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE INDEX [IX_JobTemplateItems_CatalogItemId] ON [JobTemplateItems] ([CatalogItemId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE INDEX [IX_JobTemplateItems_JobTemplateId] ON [JobTemplateItems] ([JobTemplateId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN CREATE INDEX [IX_JobTemplates_CustomerId] ON [JobTemplates] ([CustomerId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319023827_AddJobTemplates' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260319023827_AddJobTemplates', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN ALTER TABLE [Invoices] ADD [GiftCertificateRedeemed] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN CREATE TABLE [GiftCertificates] ( [Id] int NOT NULL IDENTITY, [CertificateCode] nvarchar(max) NOT NULL, [OriginalAmount] decimal(18,2) NOT NULL, [RedeemedAmount] decimal(18,2) NOT NULL, [RecipientCustomerId] int NULL, [RecipientName] nvarchar(max) NULL, [RecipientEmail] nvarchar(max) NULL, [IssuedReason] int NOT NULL, [PurchasePrice] decimal(18,2) NULL, [PurchasingCustomerId] int NULL, [Status] int NOT NULL, [IssueDate] datetime2 NOT NULL, [ExpiryDate] datetime2 NULL, [Notes] nvarchar(max) NULL, [IssuedById] nvarchar(450) NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_GiftCertificates] PRIMARY KEY ([Id]), CONSTRAINT [FK_GiftCertificates_AspNetUsers_IssuedById] FOREIGN KEY ([IssuedById]) REFERENCES [AspNetUsers] ([Id]), CONSTRAINT [FK_GiftCertificates_Customers_PurchasingCustomerId] FOREIGN KEY ([PurchasingCustomerId]) REFERENCES [Customers] ([Id]), CONSTRAINT [FK_GiftCertificates_Customers_RecipientCustomerId] FOREIGN KEY ([RecipientCustomerId]) REFERENCES [Customers] ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN CREATE TABLE [GiftCertificateRedemptions] ( [Id] int NOT NULL IDENTITY, [GiftCertificateId] int NOT NULL, [InvoiceId] int NOT NULL, [AmountRedeemed] decimal(18,2) NOT NULL, [RedeemedDate] datetime2 NOT NULL, [RedeemedById] nvarchar(450) NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_GiftCertificateRedemptions] PRIMARY KEY ([Id]), CONSTRAINT [FK_GiftCertificateRedemptions_AspNetUsers_RedeemedById] FOREIGN KEY ([RedeemedById]) REFERENCES [AspNetUsers] ([Id]), CONSTRAINT [FK_GiftCertificateRedemptions_GiftCertificates_GiftCertificateId] FOREIGN KEY ([GiftCertificateId]) REFERENCES [GiftCertificates] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_GiftCertificateRedemptions_Invoices_InvoiceId] FOREIGN KEY ([InvoiceId]) REFERENCES [Invoices] ([Id]) ON DELETE CASCADE ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-19T15:45:03.1454465Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-19T15:45:03.1454472Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-19T15:45:03.1454474Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN CREATE INDEX [IX_GiftCertificateRedemptions_GiftCertificateId] ON [GiftCertificateRedemptions] ([GiftCertificateId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN CREATE INDEX [IX_GiftCertificateRedemptions_InvoiceId] ON [GiftCertificateRedemptions] ([InvoiceId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN CREATE INDEX [IX_GiftCertificateRedemptions_RedeemedById] ON [GiftCertificateRedemptions] ([RedeemedById]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN CREATE INDEX [IX_GiftCertificates_IssuedById] ON [GiftCertificates] ([IssuedById]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN CREATE INDEX [IX_GiftCertificates_PurchasingCustomerId] ON [GiftCertificates] ([PurchasingCustomerId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN CREATE INDEX [IX_GiftCertificates_RecipientCustomerId] ON [GiftCertificates] ([RecipientCustomerId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260319154506_AddGiftCertificates' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260319154506_AddGiftCertificates', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320002450_AddRefundStoreCreditLink' ) BEGIN ALTER TABLE [Refunds] ADD [CreditMemoId] int NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320002450_AddRefundStoreCreditLink' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T00:24:47.3611509Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320002450_AddRefundStoreCreditLink' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T00:24:47.3611518Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320002450_AddRefundStoreCreditLink' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T00:24:47.3611521Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320002450_AddRefundStoreCreditLink' ) BEGIN CREATE INDEX [IX_Refunds_CreditMemoId] ON [Refunds] ([CreditMemoId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320002450_AddRefundStoreCreditLink' ) BEGIN ALTER TABLE [Refunds] ADD CONSTRAINT [FK_Refunds_CreditMemos_CreditMemoId] FOREIGN KEY ([CreditMemoId]) REFERENCES [CreditMemos] ([Id]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320002450_AddRefundStoreCreditLink' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260320002450_AddRefundStoreCreditLink', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320005106_AddQuoteItemIsAiItem' ) BEGIN ALTER TABLE [QuoteItems] ADD [IsAiItem] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320005106_AddQuoteItemIsAiItem' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T00:51:03.2423766Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320005106_AddQuoteItemIsAiItem' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T00:51:03.2423772Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320005106_AddQuoteItemIsAiItem' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T00:51:03.2423774Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320005106_AddQuoteItemIsAiItem' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260320005106_AddQuoteItemIsAiItem', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN ALTER TABLE [Quotes] ADD [ItemsSubtotal] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN ALTER TABLE [Quotes] ADD [OvenBatchCost] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN ALTER TABLE [Quotes] ADD [OverheadAmount] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN ALTER TABLE [Quotes] ADD [OverheadPercent] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN ALTER TABLE [Quotes] ADD [ProfitMargin] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN ALTER TABLE [Quotes] ADD [ProfitPercent] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN ALTER TABLE [Quotes] ADD [ShopSuppliesAmount] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN ALTER TABLE [Quotes] ADD [ShopSuppliesPercent] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T01:10:54.1468159Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T01:10:54.1468166Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T01:10:54.1468176Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320011057_AddQuotePricingSnapshot' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260320011057_AddQuotePricingSnapshot', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [SubscriptionPlanConfigs] ADD [AllowOnlinePayments] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Quotes] ADD [DepositPercent] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Quotes] ADD [RequiresDeposit] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Invoices] ADD [OnlineAmountPaid] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Invoices] ADD [OnlinePaymentStatus] int NOT NULL DEFAULT 0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Invoices] ADD [OnlineSurchargeCollected] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Invoices] ADD [PaymentLinkExpiresAt] datetime2 NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Invoices] ADD [PaymentLinkToken] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Invoices] ADD [StripePaymentIntentId] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Companies] ADD [OnlinePaymentSurchargeType] int NOT NULL DEFAULT 0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Companies] ADD [OnlinePaymentSurchargeValue] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Companies] ADD [OnlineSurchargeAcknowledged] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Companies] ADD [StripeAccountId] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN ALTER TABLE [Companies] ADD [StripeConnectStatus] int NOT NULL DEFAULT 0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T23:15:05.6886302Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T23:15:05.6886308Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-20T23:15:05.6886310Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260320231509_AddStripeConnectAndOnlinePayments' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260320231509_AddStripeConnectAndOnlinePayments', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260326230438_AddQuotePhotoSubscriptionLimits' ) BEGIN ALTER TABLE [SubscriptionPlanConfigs] ADD [MaxQuotePhotos] int NOT NULL DEFAULT 0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260326230438_AddQuotePhotoSubscriptionLimits' ) BEGIN ALTER TABLE [Companies] ADD [MaxQuotePhotosOverride] int NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260326230438_AddQuotePhotoSubscriptionLimits' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-26T23:04:35.1353265Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260326230438_AddQuotePhotoSubscriptionLimits' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-26T23:04:35.1353273Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260326230438_AddQuotePhotoSubscriptionLimits' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-26T23:04:35.1353275Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260326230438_AddQuotePhotoSubscriptionLimits' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260326230438_AddQuotePhotoSubscriptionLimits', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260328133627_AddJobPhotoIsAiAnalysisPhoto' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-28T13:36:24.1548411Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260328133627_AddJobPhotoIsAiAnalysisPhoto' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-28T13:36:24.1548419Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260328133627_AddJobPhotoIsAiAnalysisPhoto' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-28T13:36:24.1548421Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260328133627_AddJobPhotoIsAiAnalysisPhoto' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260328133627_AddJobPhotoIsAiAnalysisPhoto', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329003300_AddJobDiscountRushFields' ) BEGIN ALTER TABLE [Jobs] ADD [DiscountReason] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329003300_AddJobDiscountRushFields' ) BEGIN ALTER TABLE [Jobs] ADD [DiscountType] int NOT NULL DEFAULT 0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329003300_AddJobDiscountRushFields' ) BEGIN ALTER TABLE [Jobs] ADD [DiscountValue] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329003300_AddJobDiscountRushFields' ) BEGIN ALTER TABLE [Jobs] ADD [IsRushJob] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329003300_AddJobDiscountRushFields' ) BEGIN ALTER TABLE [JobPhotos] ADD [IsAiAnalysisPhoto] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329003300_AddJobDiscountRushFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T00:32:56.7368710Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329003300_AddJobDiscountRushFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T00:32:56.7368717Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329003300_AddJobDiscountRushFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T00:32:56.7368718Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329003300_AddJobDiscountRushFields' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260329003300_AddJobDiscountRushFields', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329005838_AddDeposits' ) BEGIN CREATE TABLE [Deposits] ( [Id] int NOT NULL IDENTITY, [ReceiptNumber] nvarchar(max) NOT NULL, [CustomerId] int NOT NULL, [JobId] int NULL, [QuoteId] int NULL, [Amount] decimal(18,2) NOT NULL, [PaymentMethod] int NOT NULL, [ReceivedDate] datetime2 NOT NULL, [Reference] nvarchar(max) NULL, [Notes] nvarchar(max) NULL, [RecordedById] nvarchar(450) NULL, [AppliedToInvoiceId] int NULL, [AppliedDate] datetime2 NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_Deposits] PRIMARY KEY ([Id]), CONSTRAINT [FK_Deposits_AspNetUsers_RecordedById] FOREIGN KEY ([RecordedById]) REFERENCES [AspNetUsers] ([Id]), CONSTRAINT [FK_Deposits_Customers_CustomerId] FOREIGN KEY ([CustomerId]) REFERENCES [Customers] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_Deposits_Invoices_AppliedToInvoiceId] FOREIGN KEY ([AppliedToInvoiceId]) REFERENCES [Invoices] ([Id]) ON DELETE SET NULL, CONSTRAINT [FK_Deposits_Jobs_JobId] FOREIGN KEY ([JobId]) REFERENCES [Jobs] ([Id]), CONSTRAINT [FK_Deposits_Quotes_QuoteId] FOREIGN KEY ([QuoteId]) REFERENCES [Quotes] ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329005838_AddDeposits' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T00:58:35.7576949Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329005838_AddDeposits' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T00:58:35.7576955Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329005838_AddDeposits' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T00:58:35.7576957Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329005838_AddDeposits' ) BEGIN CREATE INDEX [IX_Deposits_AppliedToInvoiceId] ON [Deposits] ([AppliedToInvoiceId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329005838_AddDeposits' ) BEGIN CREATE INDEX [IX_Deposits_CustomerId] ON [Deposits] ([CustomerId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329005838_AddDeposits' ) BEGIN CREATE INDEX [IX_Deposits_JobId] ON [Deposits] ([JobId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329005838_AddDeposits' ) BEGIN CREATE INDEX [IX_Deposits_QuoteId] ON [Deposits] ([QuoteId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329005838_AddDeposits' ) BEGIN CREATE INDEX [IX_Deposits_RecordedById] ON [Deposits] ([RecordedById]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329005838_AddDeposits' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260329005838_AddDeposits', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN DROP INDEX [IX_Invoices_CompanyId_JobId] ON [Invoices]; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN DROP INDEX [IX_Invoices_JobId] ON [Invoices]; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN DECLARE @var2 sysname; SELECT @var2 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Invoices]') AND [c].[name] = N'JobId'); IF @var2 IS NOT NULL EXEC(N'ALTER TABLE [Invoices] DROP CONSTRAINT [' + @var2 + '];'); ALTER TABLE [Invoices] ALTER COLUMN [JobId] int NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN ALTER TABLE [InvoiceItems] ADD [CatalogItemId] int NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN ALTER TABLE [CatalogItems] ADD [InventoryItemId] int NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN ALTER TABLE [CatalogItems] ADD [IsMerchandise] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN ALTER TABLE [CatalogCategories] ADD [IsMerchandise] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T13:47:49.4176542Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T13:47:49.4176549Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T13:47:49.4176551Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN EXEC(N'CREATE UNIQUE INDEX [IX_Invoices_CompanyId_JobId] ON [Invoices] ([CompanyId], [JobId]) WHERE [JobId] IS NOT NULL'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN EXEC(N'CREATE UNIQUE INDEX [IX_Invoices_JobId] ON [Invoices] ([JobId]) WHERE [JobId] IS NOT NULL'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN CREATE INDEX [IX_InvoiceItems_CatalogItemId] ON [InvoiceItems] ([CatalogItemId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN CREATE INDEX [IX_CatalogItems_InventoryItemId] ON [CatalogItems] ([InventoryItemId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN ALTER TABLE [CatalogItems] ADD CONSTRAINT [FK_CatalogItems_InventoryItems_InventoryItemId] FOREIGN KEY ([InventoryItemId]) REFERENCES [InventoryItems] ([Id]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN ALTER TABLE [InvoiceItems] ADD CONSTRAINT [FK_InvoiceItems_CatalogItems_CatalogItemId] FOREIGN KEY ([CatalogItemId]) REFERENCES [CatalogItems] ([Id]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329134753_AddMerchandise' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260329134753_AddMerchandise', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN ALTER TABLE [InvoiceItems] ADD [GcExpiryDate] datetime2 NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN ALTER TABLE [InvoiceItems] ADD [GcRecipientEmail] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN ALTER TABLE [InvoiceItems] ADD [GcRecipientName] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN ALTER TABLE [InvoiceItems] ADD [GeneratedGiftCertificateId] int NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN ALTER TABLE [InvoiceItems] ADD [IsGiftCertificate] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN ALTER TABLE [GiftCertificates] ADD [SourceInvoiceItemId] int NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T14:11:34.2305437Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T14:11:34.2305443Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-29T14:11:34.2305445Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN CREATE INDEX [IX_InvoiceItems_GeneratedGiftCertificateId] ON [InvoiceItems] ([GeneratedGiftCertificateId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN ALTER TABLE [InvoiceItems] ADD CONSTRAINT [FK_InvoiceItems_GiftCertificates_GeneratedGiftCertificateId] FOREIGN KEY ([GeneratedGiftCertificateId]) REFERENCES [GiftCertificates] ([Id]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260329141137_AddGiftCertificateInvoiceItems' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260329141137_AddGiftCertificateInvoiceItems', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260330234034_AddSalesItemFields' ) BEGIN ALTER TABLE [QuoteItems] ADD [IsSalesItem] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260330234034_AddSalesItemFields' ) BEGIN ALTER TABLE [QuoteItems] ADD [Sku] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260330234034_AddSalesItemFields' ) BEGIN ALTER TABLE [JobItems] ADD [IsSalesItem] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260330234034_AddSalesItemFields' ) BEGIN ALTER TABLE [JobItems] ADD [Sku] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260330234034_AddSalesItemFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-30T23:40:30.1483162Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260330234034_AddSalesItemFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-30T23:40:30.1483168Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260330234034_AddSalesItemFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-03-30T23:40:30.1483170Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260330234034_AddSalesItemFields' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260330234034_AddSalesItemFields', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401125630_AddQuoteDepositPaymentFields' ) BEGIN ALTER TABLE [Quotes] ADD [DepositAmountPaid] decimal(18,2) NOT NULL DEFAULT 0.0; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401125630_AddQuoteDepositPaymentFields' ) BEGIN ALTER TABLE [Quotes] ADD [DepositPaymentIntentId] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401125630_AddQuoteDepositPaymentFields' ) BEGIN ALTER TABLE [Quotes] ADD [DepositPaymentLinkExpiresAt] datetime2 NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401125630_AddQuoteDepositPaymentFields' ) BEGIN ALTER TABLE [Quotes] ADD [DepositPaymentLinkToken] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401125630_AddQuoteDepositPaymentFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-01T12:56:27.1808248Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401125630_AddQuoteDepositPaymentFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-01T12:56:27.1808254Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401125630_AddQuoteDepositPaymentFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-01T12:56:27.1808255Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401125630_AddQuoteDepositPaymentFields' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260401125630_AddQuoteDepositPaymentFields', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401131724_AddUniqueDocumentNumberConstraints' ) BEGIN DECLARE @var3 sysname; SELECT @var3 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Bills]') AND [c].[name] = N'BalanceDue'); IF @var3 IS NOT NULL EXEC(N'ALTER TABLE [Bills] DROP CONSTRAINT [' + @var3 + '];'); ALTER TABLE [Bills] DROP COLUMN [BalanceDue]; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401131724_AddUniqueDocumentNumberConstraints' ) BEGIN DECLARE @var4 sysname; SELECT @var4 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] WHERE ([d].[parent_object_id] = OBJECT_ID(N'[GiftCertificates]') AND [c].[name] = N'CertificateCode'); IF @var4 IS NOT NULL EXEC(N'ALTER TABLE [GiftCertificates] DROP CONSTRAINT [' + @var4 + '];'); ALTER TABLE [GiftCertificates] ALTER COLUMN [CertificateCode] nvarchar(450) NOT NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401131724_AddUniqueDocumentNumberConstraints' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-01T13:17:21.8121883Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401131724_AddUniqueDocumentNumberConstraints' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-01T13:17:21.8121891Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401131724_AddUniqueDocumentNumberConstraints' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-01T13:17:21.8121893Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401131724_AddUniqueDocumentNumberConstraints' ) BEGIN CREATE UNIQUE INDEX [IX_GiftCertificates_CertificateCode] ON [GiftCertificates] ([CertificateCode]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401131724_AddUniqueDocumentNumberConstraints' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260401131724_AddUniqueDocumentNumberConstraints', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401141653_FixGiftCertificateUniqueIndexPerCompany' ) BEGIN DROP INDEX [IX_GiftCertificates_CertificateCode] ON [GiftCertificates]; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401141653_FixGiftCertificateUniqueIndexPerCompany' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-01T14:16:49.2887180Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401141653_FixGiftCertificateUniqueIndexPerCompany' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-01T14:16:49.2887185Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401141653_FixGiftCertificateUniqueIndexPerCompany' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-01T14:16:49.2887186Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401141653_FixGiftCertificateUniqueIndexPerCompany' ) BEGIN CREATE UNIQUE INDEX [IX_GiftCertificates_CompanyId_CertificateCode] ON [GiftCertificates] ([CompanyId], [CertificateCode]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260401141653_FixGiftCertificateUniqueIndexPerCompany' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260401141653_FixGiftCertificateUniqueIndexPerCompany', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402015422_AddInvoiceExternalReference' ) BEGIN ALTER TABLE [Invoices] ADD [ExternalReference] nvarchar(450) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402015422_AddInvoiceExternalReference' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T01:54:18.8649199Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402015422_AddInvoiceExternalReference' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T01:54:18.8649205Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402015422_AddInvoiceExternalReference' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T01:54:18.8649206Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402015422_AddInvoiceExternalReference' ) BEGIN CREATE INDEX [IX_Invoices_CompanyId_ExternalReference] ON [Invoices] ([CompanyId], [ExternalReference]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402015422_AddInvoiceExternalReference' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260402015422_AddInvoiceExternalReference', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402032156_AddMigratingFromQuickBooks' ) BEGIN ALTER TABLE [CompanyPreferences] ADD [MigratingFromQuickBooks] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402032156_AddMigratingFromQuickBooks' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T03:21:53.0005398Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402032156_AddMigratingFromQuickBooks' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T03:21:53.0005405Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402032156_AddMigratingFromQuickBooks' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T03:21:53.0005406Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402032156_AddMigratingFromQuickBooks' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260402032156_AddMigratingFromQuickBooks', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402165758_AddQbMigrationStateJson' ) BEGIN ALTER TABLE [CompanyPreferences] ADD [QbMigrationStateJson] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402165758_AddQbMigrationStateJson' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T16:57:55.0246999Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402165758_AddQbMigrationStateJson' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T16:57:55.0247004Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402165758_AddQbMigrationStateJson' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T16:57:55.0247006Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402165758_AddQbMigrationStateJson' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260402165758_AddQbMigrationStateJson', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402184721_FixInventorySkuUniqueIndex' ) BEGIN DROP INDEX [IX_InventoryItems_SKU] ON [InventoryItems]; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402184721_FixInventorySkuUniqueIndex' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T18:47:18.8788284Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402184721_FixInventorySkuUniqueIndex' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T18:47:18.8788291Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402184721_FixInventorySkuUniqueIndex' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T18:47:18.8788292Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402184721_FixInventorySkuUniqueIndex' ) BEGIN CREATE UNIQUE INDEX [IX_InventoryItems_CompanyId_SKU] ON [InventoryItems] ([CompanyId], [SKU]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402184721_FixInventorySkuUniqueIndex' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260402184721_FixInventorySkuUniqueIndex', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402185216_FixJobShopAccessCodeUniqueIndex' ) BEGIN DROP INDEX [IX_Jobs_ShopAccessCode] ON [Jobs]; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402185216_FixJobShopAccessCodeUniqueIndex' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T18:52:13.7857008Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402185216_FixJobShopAccessCodeUniqueIndex' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T18:52:13.7857015Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402185216_FixJobShopAccessCodeUniqueIndex' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T18:52:13.7857016Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402185216_FixJobShopAccessCodeUniqueIndex' ) BEGIN CREATE UNIQUE INDEX [IX_Jobs_CompanyId_ShopAccessCode] ON [Jobs] ([CompanyId], [ShopAccessCode]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402185216_FixJobShopAccessCodeUniqueIndex' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260402185216_FixJobShopAccessCodeUniqueIndex', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402224949_AddDashboardTips' ) BEGIN CREATE TABLE [DashboardTips] ( [Id] int NOT NULL IDENTITY, [TipText] nvarchar(max) NOT NULL, [IsActive] bit NOT NULL, [CreatedAt] datetime2 NOT NULL, CONSTRAINT [PK_DashboardTips] PRIMARY KEY ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402224949_AddDashboardTips' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T22:49:46.0354841Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402224949_AddDashboardTips' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T22:49:46.0354847Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402224949_AddDashboardTips' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-02T22:49:46.0354849Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260402224949_AddDashboardTips' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260402224949_AddDashboardTips', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260403000650_AddStripeWebhookEvents' ) BEGIN CREATE TABLE [StripeWebhookEvents] ( [Id] bigint NOT NULL IDENTITY, [EventId] nvarchar(max) NOT NULL, [EventType] nvarchar(max) NOT NULL, [CompanyId] int NULL, [RawJson] nvarchar(max) NOT NULL, [Status] int NOT NULL, [ErrorMessage] nvarchar(max) NULL, [ReceivedAt] datetime2 NOT NULL, [ProcessedAt] datetime2 NULL, CONSTRAINT [PK_StripeWebhookEvents] PRIMARY KEY ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260403000650_AddStripeWebhookEvents' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-03T00:06:46.7783905Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260403000650_AddStripeWebhookEvents' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-03T00:06:46.7783912Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260403000650_AddStripeWebhookEvents' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-03T00:06:46.7783913Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260403000650_AddStripeWebhookEvents' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260403000650_AddStripeWebhookEvents', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260404151636_AddAllowAccountingToPlan' ) BEGIN ALTER TABLE [SubscriptionPlanConfigs] ADD [AllowAccounting] bit NOT NULL DEFAULT CAST(0 AS bit); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260404151636_AddAllowAccountingToPlan' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-04T15:16:32.2541952Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260404151636_AddAllowAccountingToPlan' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-04T15:16:32.2541958Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260404151636_AddAllowAccountingToPlan' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-04T15:16:32.2541968Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260404151636_AddAllowAccountingToPlan' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260404151636_AddAllowAccountingToPlan', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260404194126_AddBillReceiptFilePath' ) BEGIN ALTER TABLE [Bills] ADD [ReceiptFilePath] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260404194126_AddBillReceiptFilePath' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-04T19:41:22.8540290Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260404194126_AddBillReceiptFilePath' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-04T19:41:22.8540296Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260404194126_AddBillReceiptFilePath' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-04T19:41:22.8540297Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260404194126_AddBillReceiptFilePath' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260404194126_AddBillReceiptFilePath', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405003350_AddPerformanceIndexes' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T00:33:47.2862744Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405003350_AddPerformanceIndexes' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T00:33:47.2862750Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405003350_AddPerformanceIndexes' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T00:33:47.2862752Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405003350_AddPerformanceIndexes' ) BEGIN CREATE INDEX [IX_InventoryTransactions_TransactionType_TransactionDate] ON [InventoryTransactions] ([TransactionType], [TransactionDate]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405003350_AddPerformanceIndexes' ) BEGIN CREATE INDEX [IX_InventoryItems_CompanyId_IsActive] ON [InventoryItems] ([CompanyId], [IsActive]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405003350_AddPerformanceIndexes' ) BEGIN CREATE INDEX [IX_InventoryItems_IsActive] ON [InventoryItems] ([IsActive]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405003350_AddPerformanceIndexes' ) BEGIN CREATE INDEX [IX_Bills_CompanyId_Status] ON [Bills] ([CompanyId], [Status]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405003350_AddPerformanceIndexes' ) BEGIN CREATE INDEX [IX_Bills_DueDate] ON [Bills] ([DueDate]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405003350_AddPerformanceIndexes' ) BEGIN CREATE INDEX [IX_Bills_Status] ON [Bills] ([Status]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405003350_AddPerformanceIndexes' ) BEGIN CREATE INDEX [IX_Appointments_ScheduledStartTime] ON [Appointments] ([ScheduledStartTime]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405003350_AddPerformanceIndexes' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260405003350_AddPerformanceIndexes', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405155653_AddPlatformSettings' ) BEGIN CREATE TABLE [PlatformSettings] ( [Id] int NOT NULL IDENTITY, [Key] nvarchar(200) NOT NULL, [Value] nvarchar(max) NULL, [Label] nvarchar(max) NULL, [Description] nvarchar(max) NULL, [GroupName] nvarchar(max) NULL, [UpdatedAt] datetime2 NULL, [UpdatedBy] nvarchar(max) NULL, CONSTRAINT [PK_PlatformSettings] PRIMARY KEY ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405155653_AddPlatformSettings' ) BEGIN CREATE UNIQUE INDEX [IX_PlatformSettings_Key] ON [PlatformSettings] ([Key]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405155653_AddPlatformSettings' ) BEGIN IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [name] IN (N'Id', N'Key', N'Value', N'Label', N'Description', N'GroupName') AND [object_id] = OBJECT_ID(N'[PlatformSettings]')) SET IDENTITY_INSERT [PlatformSettings] ON; EXEC(N'INSERT INTO [PlatformSettings] ([Id], [Key], [Value], [Label], [Description], [GroupName]) VALUES (1, N''AdminNotificationEmail'', NULL, N''Admin Notification Email'', N''Email address that receives platform event notifications (new signups, bug reports, subscription events). Leave blank to disable.'', N''Notifications'')'); IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [name] IN (N'Id', N'Key', N'Value', N'Label', N'Description', N'GroupName') AND [object_id] = OBJECT_ID(N'[PlatformSettings]')) SET IDENTITY_INSERT [PlatformSettings] OFF; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405155653_AddPlatformSettings' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T15:56:49.8180443Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405155653_AddPlatformSettings' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T15:56:49.8180449Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405155653_AddPlatformSettings' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T15:56:49.8180450Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405155653_AddPlatformSettings' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260405155653_AddPlatformSettings', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405161241_AddPlatformSettingsV2' ) BEGIN DECLARE @var5 sysname; SELECT @var5 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] WHERE ([d].[parent_object_id] = OBJECT_ID(N'[PlatformSettings]') AND [c].[name] = N'Key'); IF @var5 IS NOT NULL EXEC(N'ALTER TABLE [PlatformSettings] DROP CONSTRAINT [' + @var5 + '];'); ALTER TABLE [PlatformSettings] ALTER COLUMN [Key] nvarchar(200) NOT NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405161241_AddPlatformSettingsV2' ) BEGIN IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [name] IN (N'Id', N'Key', N'Value', N'Label', N'Description', N'GroupName') AND [object_id] = OBJECT_ID(N'[PlatformSettings]')) SET IDENTITY_INSERT [PlatformSettings] ON; EXEC(N'INSERT INTO [PlatformSettings] ([Id], [Key], [Value], [Label], [Description], [GroupName]) VALUES (2, N''BaseUrl'', NULL, N''Base URL'', N''Public URL of this application (e.g. https://app.powdercoatinglogix.com). Used in email links. Falls back to the current request URL if blank.'', N''General''), (3, N''TrialPeriodDays'', N''7'', N''Trial Period (days)'', N''Number of days a new company gets on the free trial before their subscription expires.'', N''Subscriptions''), (4, N''QuoteApprovalTokenDays'', N''30'', N''Quote Approval Token Validity (days)'', N''How many days a customer quote-approval link remains valid before expiring.'', N''Quotes''), (5, N''AuditLogRetentionDays'', N''365'', N''Audit Log Retention (days)'', N''Audit log entries older than this many days are automatically purged by the nightly job.'', N''Data Retention''), (6, N''StripeWebhookRetentionDays'', N''90'', N''Stripe Webhook Retention (days)'', N''Processed Stripe webhook events older than this many days are automatically purged.'', N''Data Retention'')'); IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [name] IN (N'Id', N'Key', N'Value', N'Label', N'Description', N'GroupName') AND [object_id] = OBJECT_ID(N'[PlatformSettings]')) SET IDENTITY_INSERT [PlatformSettings] OFF; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405161241_AddPlatformSettingsV2' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T16:12:38.5900904Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405161241_AddPlatformSettingsV2' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T16:12:38.5900913Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405161241_AddPlatformSettingsV2' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T16:12:38.5900914Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405161241_AddPlatformSettingsV2' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260405161241_AddPlatformSettingsV2', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405162137_UpdateAdminEmailDescription' ) BEGIN EXEC(N'UPDATE [PlatformSettings] SET [Description] = N''Email address(es) that receive platform event notifications (new signups, bug reports, subscription events). Separate multiple addresses with commas. Leave blank to disable.'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405162137_UpdateAdminEmailDescription' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T16:21:34.4700837Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405162137_UpdateAdminEmailDescription' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T16:21:34.4700844Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405162137_UpdateAdminEmailDescription' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-05T16:21:34.4700846Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260405162137_UpdateAdminEmailDescription' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260405162137_UpdateAdminEmailDescription', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260406191501_MakeBillLineItemAccountIdNullable' ) BEGIN DECLARE @var6 sysname; SELECT @var6 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] WHERE ([d].[parent_object_id] = OBJECT_ID(N'[BillLineItems]') AND [c].[name] = N'AccountId'); IF @var6 IS NOT NULL EXEC(N'ALTER TABLE [BillLineItems] DROP CONSTRAINT [' + @var6 + '];'); ALTER TABLE [BillLineItems] ALTER COLUMN [AccountId] int NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260406191501_MakeBillLineItemAccountIdNullable' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-06T19:14:56.7157942Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260406191501_MakeBillLineItemAccountIdNullable' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-06T19:14:56.7157953Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260406191501_MakeBillLineItemAccountIdNullable' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-06T19:14:56.7157955Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260406191501_MakeBillLineItemAccountIdNullable' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260406191501_MakeBillLineItemAccountIdNullable', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260408205345_AddJobIntakeFields' ) BEGIN ALTER TABLE [Jobs] ADD [IntakeCheckedByUserId] nvarchar(450) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260408205345_AddJobIntakeFields' ) BEGIN ALTER TABLE [Jobs] ADD [IntakeConditionNotes] nvarchar(max) NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260408205345_AddJobIntakeFields' ) BEGIN ALTER TABLE [Jobs] ADD [IntakeDate] datetime2 NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260408205345_AddJobIntakeFields' ) BEGIN ALTER TABLE [Jobs] ADD [IntakePartCount] int NULL; END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260408205345_AddJobIntakeFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-08T20:53:42.2947842Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260408205345_AddJobIntakeFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-08T20:53:42.2947847Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260408205345_AddJobIntakeFields' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-08T20:53:42.2947849Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260408205345_AddJobIntakeFields' ) BEGIN CREATE INDEX [IX_Jobs_IntakeCheckedByUserId] ON [Jobs] ([IntakeCheckedByUserId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260408205345_AddJobIntakeFields' ) BEGIN ALTER TABLE [Jobs] ADD CONSTRAINT [FK_Jobs_AspNetUsers_IntakeCheckedByUserId] FOREIGN KEY ([IntakeCheckedByUserId]) REFERENCES [AspNetUsers] ([Id]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260408205345_AddJobIntakeFields' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260408205345_AddJobIntakeFields', N'8.0.11'); END; GO COMMIT; GO BEGIN TRANSACTION; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260409013822_AddInAppNotifications' ) BEGIN CREATE TABLE [InAppNotifications] ( [Id] int NOT NULL IDENTITY, [Title] nvarchar(max) NOT NULL, [Message] nvarchar(max) NOT NULL, [Link] nvarchar(max) NULL, [NotificationType] nvarchar(max) NOT NULL, [IsRead] bit NOT NULL, [ReadAt] datetime2 NULL, [QuoteId] int NULL, [InvoiceId] int NULL, [CustomerId] int NULL, [CompanyId] int NOT NULL, [CreatedAt] datetime2 NOT NULL, [UpdatedAt] datetime2 NULL, [CreatedBy] nvarchar(max) NULL, [UpdatedBy] nvarchar(max) NULL, [IsDeleted] bit NOT NULL, [DeletedAt] datetime2 NULL, [DeletedBy] nvarchar(max) NULL, CONSTRAINT [PK_InAppNotifications] PRIMARY KEY ([Id]), CONSTRAINT [FK_InAppNotifications_Customers_CustomerId] FOREIGN KEY ([CustomerId]) REFERENCES [Customers] ([Id]), CONSTRAINT [FK_InAppNotifications_Invoices_InvoiceId] FOREIGN KEY ([InvoiceId]) REFERENCES [Invoices] ([Id]), CONSTRAINT [FK_InAppNotifications_Quotes_QuoteId] FOREIGN KEY ([QuoteId]) REFERENCES [Quotes] ([Id]) ); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260409013822_AddInAppNotifications' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-09T01:38:18.3630787Z'' WHERE [Id] = 1; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260409013822_AddInAppNotifications' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-09T01:38:18.3630794Z'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260409013822_AddInAppNotifications' ) BEGIN EXEC(N'UPDATE [PricingTiers] SET [CreatedAt] = ''2026-04-09T01:38:18.3630795Z'' WHERE [Id] = 3; SELECT @@ROWCOUNT'); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260409013822_AddInAppNotifications' ) BEGIN CREATE INDEX [IX_InAppNotifications_CustomerId] ON [InAppNotifications] ([CustomerId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260409013822_AddInAppNotifications' ) BEGIN CREATE INDEX [IX_InAppNotifications_InvoiceId] ON [InAppNotifications] ([InvoiceId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260409013822_AddInAppNotifications' ) BEGIN CREATE INDEX [IX_InAppNotifications_QuoteId] ON [InAppNotifications] ([QuoteId]); END; GO IF NOT EXISTS ( SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20260409013822_AddInAppNotifications' ) BEGIN INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) VALUES (N'20260409013822_AddInAppNotifications', N'8.0.11'); END; GO COMMIT; GO