Files
PowderCoatingLogix/migration_script_fresh.sql
2026-04-23 21:38:24 -04:00

2162 lines
56 KiB
Transact-SQL

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
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-16T15:49:58.7377851Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-16T15:49:58.7377856Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-16T15:49:58.7377858Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260316155002_Baseline', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [CompanyOperatingCosts] ADD [AiContextProfile] nvarchar(2000) NULL;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-17T12:19:34.4894690Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-17T12:19:34.4894696Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-17T12:19:34.4894698Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260317121938_AddAiContextProfile', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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;
GO
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;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-17T20:59:24.2463737Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-17T20:59:24.2463746Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-17T20:59:24.2463748Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260317205927_FixLaborItemQuantityDecimal', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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
);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T12:48:44.7462691Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T12:48:44.7462697Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T12:48:44.7462699Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_JobTimeEntries_JobId] ON [JobTimeEntries] ([JobId]);
GO
CREATE INDEX [IX_JobTimeEntries_ShopWorkerId] ON [JobTimeEntries] ([ShopWorkerId]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260318124847_AddJobTimeEntries', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Jobs] ADD [ShopAccessCode] uniqueidentifier NOT NULL DEFAULT (NEWID());
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T13:14:57.2203832Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T13:14:57.2203838Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T13:14:57.2203839Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE UNIQUE INDEX [IX_Jobs_ShopAccessCode] ON [Jobs] ([ShopAccessCode]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260318131500_AddJobShopAccessCode', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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])
);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T13:28:54.6854802Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T13:28:54.6854849Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T13:28:54.6854851Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE UNIQUE INDEX [IX_ShopWorkerRoleCosts_CompanyId_Role] ON [ShopWorkerRoleCosts] ([CompanyId], [Role]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260318132857_AddShopWorkerRoleCosts', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Jobs] ADD [IsReworkJob] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
ALTER TABLE [Jobs] ADD [OriginalJobId] int NULL;
GO
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])
);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T13:42:32.9092998Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T13:42:32.9093003Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T13:42:32.9093005Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_Jobs_OriginalJobId] ON [Jobs] ([OriginalJobId]);
GO
CREATE INDEX [IX_ReworkRecords_JobId] ON [ReworkRecords] ([JobId]);
GO
CREATE INDEX [IX_ReworkRecords_JobItemId] ON [ReworkRecords] ([JobItemId]);
GO
CREATE INDEX [IX_ReworkRecords_ReworkJobId] ON [ReworkRecords] ([ReworkJobId]);
GO
ALTER TABLE [Jobs] ADD CONSTRAINT [FK_Jobs_Jobs_OriginalJobId] FOREIGN KEY ([OriginalJobId]) REFERENCES [Jobs] ([Id]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260318134236_AddReworkTracking', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Invoices] ADD [CreditApplied] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Customers] ADD [CreditBalance] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
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])
);
GO
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])
);
GO
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
);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T22:26:44.9349567Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T22:26:44.9349573Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-18T22:26:44.9349575Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_CreditMemoApplications_AppliedById] ON [CreditMemoApplications] ([AppliedById]);
GO
CREATE INDEX [IX_CreditMemoApplications_CreditMemoId] ON [CreditMemoApplications] ([CreditMemoId]);
GO
CREATE INDEX [IX_CreditMemoApplications_InvoiceId] ON [CreditMemoApplications] ([InvoiceId]);
GO
CREATE UNIQUE INDEX [IX_CreditMemos_CompanyId_MemoNumber] ON [CreditMemos] ([CompanyId], [MemoNumber]);
GO
CREATE INDEX [IX_CreditMemos_CustomerId] ON [CreditMemos] ([CustomerId]);
GO
CREATE INDEX [IX_CreditMemos_IssuedById] ON [CreditMemos] ([IssuedById]);
GO
CREATE INDEX [IX_CreditMemos_OriginalInvoiceId] ON [CreditMemos] ([OriginalInvoiceId]);
GO
CREATE INDEX [IX_CreditMemos_ReworkRecordId] ON [CreditMemos] ([ReworkRecordId]);
GO
CREATE INDEX [IX_Refunds_InvoiceId] ON [Refunds] ([InvoiceId]);
GO
CREATE INDEX [IX_Refunds_IssuedById] ON [Refunds] ([IssuedById]);
GO
CREATE INDEX [IX_Refunds_PaymentId] ON [Refunds] ([PaymentId]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260318222648_AddRefundsAndCreditMemos', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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])
);
GO
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
);
GO
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])
);
GO
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
);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-19T02:38:23.4195291Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-19T02:38:23.4195296Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-19T02:38:23.4195298Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_JobTemplateItemCoats_InventoryItemId] ON [JobTemplateItemCoats] ([InventoryItemId]);
GO
CREATE INDEX [IX_JobTemplateItemCoats_JobTemplateItemId] ON [JobTemplateItemCoats] ([JobTemplateItemId]);
GO
CREATE INDEX [IX_JobTemplateItemCoats_VendorId] ON [JobTemplateItemCoats] ([VendorId]);
GO
CREATE INDEX [IX_JobTemplateItemPrepServices_JobTemplateItemId] ON [JobTemplateItemPrepServices] ([JobTemplateItemId]);
GO
CREATE INDEX [IX_JobTemplateItemPrepServices_PrepServiceId] ON [JobTemplateItemPrepServices] ([PrepServiceId]);
GO
CREATE INDEX [IX_JobTemplateItems_CatalogItemId] ON [JobTemplateItems] ([CatalogItemId]);
GO
CREATE INDEX [IX_JobTemplateItems_JobTemplateId] ON [JobTemplateItems] ([JobTemplateId]);
GO
CREATE INDEX [IX_JobTemplates_CustomerId] ON [JobTemplates] ([CustomerId]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260319023827_AddJobTemplates', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Invoices] ADD [GiftCertificateRedeemed] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
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])
);
GO
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
);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-19T15:45:03.1454465Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-19T15:45:03.1454472Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-19T15:45:03.1454474Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_GiftCertificateRedemptions_GiftCertificateId] ON [GiftCertificateRedemptions] ([GiftCertificateId]);
GO
CREATE INDEX [IX_GiftCertificateRedemptions_InvoiceId] ON [GiftCertificateRedemptions] ([InvoiceId]);
GO
CREATE INDEX [IX_GiftCertificateRedemptions_RedeemedById] ON [GiftCertificateRedemptions] ([RedeemedById]);
GO
CREATE INDEX [IX_GiftCertificates_IssuedById] ON [GiftCertificates] ([IssuedById]);
GO
CREATE INDEX [IX_GiftCertificates_PurchasingCustomerId] ON [GiftCertificates] ([PurchasingCustomerId]);
GO
CREATE INDEX [IX_GiftCertificates_RecipientCustomerId] ON [GiftCertificates] ([RecipientCustomerId]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260319154506_AddGiftCertificates', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Refunds] ADD [CreditMemoId] int NULL;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T00:24:47.3611509Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T00:24:47.3611518Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T00:24:47.3611521Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_Refunds_CreditMemoId] ON [Refunds] ([CreditMemoId]);
GO
ALTER TABLE [Refunds] ADD CONSTRAINT [FK_Refunds_CreditMemos_CreditMemoId] FOREIGN KEY ([CreditMemoId]) REFERENCES [CreditMemos] ([Id]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260320002450_AddRefundStoreCreditLink', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [QuoteItems] ADD [IsAiItem] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T00:51:03.2423766Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T00:51:03.2423772Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T00:51:03.2423774Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260320005106_AddQuoteItemIsAiItem', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Quotes] ADD [ItemsSubtotal] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Quotes] ADD [OvenBatchCost] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Quotes] ADD [OverheadAmount] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Quotes] ADD [OverheadPercent] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Quotes] ADD [ProfitMargin] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Quotes] ADD [ProfitPercent] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Quotes] ADD [ShopSuppliesAmount] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Quotes] ADD [ShopSuppliesPercent] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T01:10:54.1468159Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T01:10:54.1468166Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T01:10:54.1468176Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260320011057_AddQuotePricingSnapshot', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [SubscriptionPlanConfigs] ADD [AllowOnlinePayments] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
ALTER TABLE [Quotes] ADD [DepositPercent] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Quotes] ADD [RequiresDeposit] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
ALTER TABLE [Invoices] ADD [OnlineAmountPaid] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Invoices] ADD [OnlinePaymentStatus] int NOT NULL DEFAULT 0;
GO
ALTER TABLE [Invoices] ADD [OnlineSurchargeCollected] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Invoices] ADD [PaymentLinkExpiresAt] datetime2 NULL;
GO
ALTER TABLE [Invoices] ADD [PaymentLinkToken] nvarchar(max) NULL;
GO
ALTER TABLE [Invoices] ADD [StripePaymentIntentId] nvarchar(max) NULL;
GO
ALTER TABLE [Companies] ADD [OnlinePaymentSurchargeType] int NOT NULL DEFAULT 0;
GO
ALTER TABLE [Companies] ADD [OnlinePaymentSurchargeValue] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Companies] ADD [OnlineSurchargeAcknowledged] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
ALTER TABLE [Companies] ADD [StripeAccountId] nvarchar(max) NULL;
GO
ALTER TABLE [Companies] ADD [StripeConnectStatus] int NOT NULL DEFAULT 0;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T23:15:05.6886302Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T23:15:05.6886308Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-20T23:15:05.6886310Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260320231509_AddStripeConnectAndOnlinePayments', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [SubscriptionPlanConfigs] ADD [MaxQuotePhotos] int NOT NULL DEFAULT 0;
GO
ALTER TABLE [Companies] ADD [MaxQuotePhotosOverride] int NULL;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-26T23:04:35.1353265Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-26T23:04:35.1353273Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-26T23:04:35.1353275Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260326230438_AddQuotePhotoSubscriptionLimits', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-28T13:36:24.1548411Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-28T13:36:24.1548419Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-28T13:36:24.1548421Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260328133627_AddJobPhotoIsAiAnalysisPhoto', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Jobs] ADD [DiscountReason] nvarchar(max) NULL;
GO
ALTER TABLE [Jobs] ADD [DiscountType] int NOT NULL DEFAULT 0;
GO
ALTER TABLE [Jobs] ADD [DiscountValue] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Jobs] ADD [IsRushJob] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
ALTER TABLE [JobPhotos] ADD [IsAiAnalysisPhoto] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T00:32:56.7368710Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T00:32:56.7368717Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T00:32:56.7368718Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260329003300_AddJobDiscountRushFields', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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])
);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T00:58:35.7576949Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T00:58:35.7576955Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T00:58:35.7576957Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_Deposits_AppliedToInvoiceId] ON [Deposits] ([AppliedToInvoiceId]);
GO
CREATE INDEX [IX_Deposits_CustomerId] ON [Deposits] ([CustomerId]);
GO
CREATE INDEX [IX_Deposits_JobId] ON [Deposits] ([JobId]);
GO
CREATE INDEX [IX_Deposits_QuoteId] ON [Deposits] ([QuoteId]);
GO
CREATE INDEX [IX_Deposits_RecordedById] ON [Deposits] ([RecordedById]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260329005838_AddDeposits', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
DROP INDEX [IX_Invoices_CompanyId_JobId] ON [Invoices];
GO
DROP INDEX [IX_Invoices_JobId] ON [Invoices];
GO
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;
GO
ALTER TABLE [InvoiceItems] ADD [CatalogItemId] int NULL;
GO
ALTER TABLE [CatalogItems] ADD [InventoryItemId] int NULL;
GO
ALTER TABLE [CatalogItems] ADD [IsMerchandise] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
ALTER TABLE [CatalogCategories] ADD [IsMerchandise] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T13:47:49.4176542Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T13:47:49.4176549Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T13:47:49.4176551Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE UNIQUE INDEX [IX_Invoices_CompanyId_JobId] ON [Invoices] ([CompanyId], [JobId]) WHERE [JobId] IS NOT NULL;
GO
CREATE UNIQUE INDEX [IX_Invoices_JobId] ON [Invoices] ([JobId]) WHERE [JobId] IS NOT NULL;
GO
CREATE INDEX [IX_InvoiceItems_CatalogItemId] ON [InvoiceItems] ([CatalogItemId]);
GO
CREATE INDEX [IX_CatalogItems_InventoryItemId] ON [CatalogItems] ([InventoryItemId]);
GO
ALTER TABLE [CatalogItems] ADD CONSTRAINT [FK_CatalogItems_InventoryItems_InventoryItemId] FOREIGN KEY ([InventoryItemId]) REFERENCES [InventoryItems] ([Id]);
GO
ALTER TABLE [InvoiceItems] ADD CONSTRAINT [FK_InvoiceItems_CatalogItems_CatalogItemId] FOREIGN KEY ([CatalogItemId]) REFERENCES [CatalogItems] ([Id]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260329134753_AddMerchandise', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [InvoiceItems] ADD [GcExpiryDate] datetime2 NULL;
GO
ALTER TABLE [InvoiceItems] ADD [GcRecipientEmail] nvarchar(max) NULL;
GO
ALTER TABLE [InvoiceItems] ADD [GcRecipientName] nvarchar(max) NULL;
GO
ALTER TABLE [InvoiceItems] ADD [GeneratedGiftCertificateId] int NULL;
GO
ALTER TABLE [InvoiceItems] ADD [IsGiftCertificate] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
ALTER TABLE [GiftCertificates] ADD [SourceInvoiceItemId] int NULL;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T14:11:34.2305437Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T14:11:34.2305443Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-29T14:11:34.2305445Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_InvoiceItems_GeneratedGiftCertificateId] ON [InvoiceItems] ([GeneratedGiftCertificateId]);
GO
ALTER TABLE [InvoiceItems] ADD CONSTRAINT [FK_InvoiceItems_GiftCertificates_GeneratedGiftCertificateId] FOREIGN KEY ([GeneratedGiftCertificateId]) REFERENCES [GiftCertificates] ([Id]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260329141137_AddGiftCertificateInvoiceItems', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [QuoteItems] ADD [IsSalesItem] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
ALTER TABLE [QuoteItems] ADD [Sku] nvarchar(max) NULL;
GO
ALTER TABLE [JobItems] ADD [IsSalesItem] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
ALTER TABLE [JobItems] ADD [Sku] nvarchar(max) NULL;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-30T23:40:30.1483162Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-30T23:40:30.1483168Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-03-30T23:40:30.1483170Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260330234034_AddSalesItemFields', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Quotes] ADD [DepositAmountPaid] decimal(18,2) NOT NULL DEFAULT 0.0;
GO
ALTER TABLE [Quotes] ADD [DepositPaymentIntentId] nvarchar(max) NULL;
GO
ALTER TABLE [Quotes] ADD [DepositPaymentLinkExpiresAt] datetime2 NULL;
GO
ALTER TABLE [Quotes] ADD [DepositPaymentLinkToken] nvarchar(max) NULL;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-01T12:56:27.1808248Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-01T12:56:27.1808254Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-01T12:56:27.1808255Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260401125630_AddQuoteDepositPaymentFields', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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];
GO
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;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-01T13:17:21.8121883Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-01T13:17:21.8121891Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-01T13:17:21.8121893Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE UNIQUE INDEX [IX_GiftCertificates_CertificateCode] ON [GiftCertificates] ([CertificateCode]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260401131724_AddUniqueDocumentNumberConstraints', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
DROP INDEX [IX_GiftCertificates_CertificateCode] ON [GiftCertificates];
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-01T14:16:49.2887180Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-01T14:16:49.2887185Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-01T14:16:49.2887186Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE UNIQUE INDEX [IX_GiftCertificates_CompanyId_CertificateCode] ON [GiftCertificates] ([CompanyId], [CertificateCode]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260401141653_FixGiftCertificateUniqueIndexPerCompany', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Invoices] ADD [ExternalReference] nvarchar(450) NULL;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T01:54:18.8649199Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T01:54:18.8649205Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T01:54:18.8649206Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_Invoices_CompanyId_ExternalReference] ON [Invoices] ([CompanyId], [ExternalReference]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260402015422_AddInvoiceExternalReference', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [CompanyPreferences] ADD [MigratingFromQuickBooks] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T03:21:53.0005398Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T03:21:53.0005405Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T03:21:53.0005406Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260402032156_AddMigratingFromQuickBooks', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [CompanyPreferences] ADD [QbMigrationStateJson] nvarchar(max) NULL;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T16:57:55.0246999Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T16:57:55.0247004Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T16:57:55.0247006Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260402165758_AddQbMigrationStateJson', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
DROP INDEX [IX_InventoryItems_SKU] ON [InventoryItems];
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T18:47:18.8788284Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T18:47:18.8788291Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T18:47:18.8788292Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE UNIQUE INDEX [IX_InventoryItems_CompanyId_SKU] ON [InventoryItems] ([CompanyId], [SKU]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260402184721_FixInventorySkuUniqueIndex', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
DROP INDEX [IX_Jobs_ShopAccessCode] ON [Jobs];
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T18:52:13.7857008Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T18:52:13.7857015Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T18:52:13.7857016Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE UNIQUE INDEX [IX_Jobs_CompanyId_ShopAccessCode] ON [Jobs] ([CompanyId], [ShopAccessCode]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260402185216_FixJobShopAccessCodeUniqueIndex', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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])
);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T22:49:46.0354841Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T22:49:46.0354847Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-02T22:49:46.0354849Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260402224949_AddDashboardTips', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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])
);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-03T00:06:46.7783905Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-03T00:06:46.7783912Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-03T00:06:46.7783913Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260403000650_AddStripeWebhookEvents', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [SubscriptionPlanConfigs] ADD [AllowAccounting] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-04T15:16:32.2541952Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-04T15:16:32.2541958Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-04T15:16:32.2541968Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260404151636_AddAllowAccountingToPlan', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Bills] ADD [ReceiptFilePath] nvarchar(max) NULL;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-04T19:41:22.8540290Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-04T19:41:22.8540296Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-04T19:41:22.8540297Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260404194126_AddBillReceiptFilePath', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T00:33:47.2862744Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T00:33:47.2862750Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T00:33:47.2862752Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_InventoryTransactions_TransactionType_TransactionDate] ON [InventoryTransactions] ([TransactionType], [TransactionDate]);
GO
CREATE INDEX [IX_InventoryItems_CompanyId_IsActive] ON [InventoryItems] ([CompanyId], [IsActive]);
GO
CREATE INDEX [IX_InventoryItems_IsActive] ON [InventoryItems] ([IsActive]);
GO
CREATE INDEX [IX_Bills_CompanyId_Status] ON [Bills] ([CompanyId], [Status]);
GO
CREATE INDEX [IX_Bills_DueDate] ON [Bills] ([DueDate]);
GO
CREATE INDEX [IX_Bills_Status] ON [Bills] ([Status]);
GO
CREATE INDEX [IX_Appointments_ScheduledStartTime] ON [Appointments] ([ScheduledStartTime]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260405003350_AddPerformanceIndexes', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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])
);
GO
CREATE UNIQUE INDEX [IX_PlatformSettings_Key] ON [PlatformSettings] ([Key]);
GO
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;
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;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T15:56:49.8180443Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T15:56:49.8180449Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T15:56:49.8180450Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260405155653_AddPlatformSettings', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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;
GO
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;
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;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T16:12:38.5900904Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T16:12:38.5900913Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T16:12:38.5900914Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260405161241_AddPlatformSettingsV2', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T16:21:34.4700837Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T16:21:34.4700844Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-05T16:21:34.4700846Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260405162137_UpdateAdminEmailDescription', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-06T19:14:56.7157942Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-06T19:14:56.7157953Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-06T19:14:56.7157955Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260406191501_MakeBillLineItemAccountIdNullable', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Jobs] ADD [IntakeCheckedByUserId] nvarchar(450) NULL;
GO
ALTER TABLE [Jobs] ADD [IntakeConditionNotes] nvarchar(max) NULL;
GO
ALTER TABLE [Jobs] ADD [IntakeDate] datetime2 NULL;
GO
ALTER TABLE [Jobs] ADD [IntakePartCount] int NULL;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-08T20:53:42.2947842Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-08T20:53:42.2947847Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-08T20:53:42.2947849Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_Jobs_IntakeCheckedByUserId] ON [Jobs] ([IntakeCheckedByUserId]);
GO
ALTER TABLE [Jobs] ADD CONSTRAINT [FK_Jobs_AspNetUsers_IntakeCheckedByUserId] FOREIGN KEY ([IntakeCheckedByUserId]) REFERENCES [AspNetUsers] ([Id]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260408205345_AddJobIntakeFields', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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])
);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-09T01:38:18.3630787Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-09T01:38:18.3630794Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-09T01:38:18.3630795Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
CREATE INDEX [IX_InAppNotifications_CustomerId] ON [InAppNotifications] ([CustomerId]);
GO
CREATE INDEX [IX_InAppNotifications_InvoiceId] ON [InAppNotifications] ([InvoiceId]);
GO
CREATE INDEX [IX_InAppNotifications_QuoteId] ON [InAppNotifications] ([QuoteId]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260409013822_AddInAppNotifications', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [Companies] ADD [MarketingEmailOptOut] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
ALTER TABLE [Companies] ADD [MarketingUnsubscribeToken] nvarchar(max) NULL;
GO
UPDATE Companies
SET MarketingUnsubscribeToken = LOWER(REPLACE(NEWID(), '-', ''))
WHERE MarketingUnsubscribeToken IS NULL
GO
DECLARE @var7 sysname;
SELECT @var7 = [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'[Companies]') AND [c].[name] = N'MarketingUnsubscribeToken');
IF @var7 IS NOT NULL EXEC(N'ALTER TABLE [Companies] DROP CONSTRAINT [' + @var7 + '];');
ALTER TABLE [Companies] ALTER COLUMN [MarketingUnsubscribeToken] nvarchar(max) NOT NULL;
ALTER TABLE [Companies] ADD DEFAULT N'' FOR [MarketingUnsubscribeToken];
GO
CREATE TABLE [TermsAcceptances] (
[Id] int NOT NULL IDENTITY,
[UserId] nvarchar(max) NOT NULL,
[CompanyId] int NOT NULL,
[TosVersion] nvarchar(max) NOT NULL,
[AcceptedAt] datetime2 NOT NULL,
[IpAddress] nvarchar(max) NULL,
[UserAgent] nvarchar(max) NULL,
CONSTRAINT [PK_TermsAcceptances] PRIMARY KEY ([Id])
);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-10T02:19:30.4105127Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-10T02:19:30.4105133Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-10T02:19:30.4105135Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260410021934_AddLegalCompliance', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
ALTER TABLE [SubscriptionPlanConfigs] ADD [AllowAiInventoryAssist] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
ALTER TABLE [SubscriptionPlanConfigs] ADD [AllowAiPhotoQuotes] bit NOT NULL DEFAULT CAST(0 AS bit);
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-10T02:53:49.5828243Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-10T02:53:49.5828250Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-10T02:53:49.5828252Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260410025353_AddAiFeaturesToPlanConfig', N'8.0.11');
GO
COMMIT;
GO
BEGIN TRANSACTION;
GO
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;
INSERT INTO [PlatformSettings] ([Id], [Key], [Value], [Label], [Description], [GroupName])
VALUES (7, N'TrialsEnabled', N'true', N'Free Trials Enabled', N'When true (default), new signups start with a free trial period. When false, a credit card is required at signup — registrants are sent through Stripe Checkout before their account is created.', N'Subscriptions');
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;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-10T03:20:23.1587184Z'
WHERE [Id] = 1;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-10T03:20:23.1587190Z'
WHERE [Id] = 2;
SELECT @@ROWCOUNT;
GO
UPDATE [PricingTiers] SET [CreatedAt] = '2026-04-10T03:20:23.1587191Z'
WHERE [Id] = 3;
SELECT @@ROWCOUNT;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260410032027_AddTrialsEnabledSetting', N'8.0.11');
GO
COMMIT;
GO