using System; using Microsoft.EntityFrameworkCore.Migrations; #nullable disable #pragma warning disable CA1814 // Prefer jagged arrays over multidimensional namespace PowderCoating.Infrastructure.Migrations { /// public partial class InitialCreate : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "Accounts", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), AccountNumber = table.Column(type: "nvarchar(max)", nullable: false), Name = table.Column(type: "nvarchar(max)", nullable: false), AccountType = table.Column(type: "int", nullable: false), AccountSubType = table.Column(type: "int", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), ParentAccountId = table.Column(type: "int", nullable: true), IsSystem = table.Column(type: "bit", nullable: false), IsActive = table.Column(type: "bit", nullable: false), OpeningBalance = table.Column(type: "decimal(18,2)", nullable: false), OpeningBalanceDate = table.Column(type: "datetime2", nullable: true), CurrentBalance = table.Column(type: "decimal(18,2)", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Accounts", x => x.Id); table.ForeignKey( name: "FK_Accounts_Accounts_ParentAccountId", column: x => x.ParentAccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "AiItemPredictions", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), PredictedSurfaceAreaSqFt = table.Column(type: "decimal(18,2)", nullable: false), PredictedMinutes = table.Column(type: "int", nullable: false), PredictedComplexity = table.Column(type: "nvarchar(max)", nullable: false), PredictedUnitPrice = table.Column(type: "decimal(18,2)", nullable: false), Confidence = table.Column(type: "nvarchar(max)", nullable: false), Reasoning = table.Column(type: "nvarchar(max)", nullable: true), AiTags = table.Column(type: "nvarchar(max)", nullable: true), ConversationRounds = table.Column(type: "int", nullable: false), UserOverrodeEstimate = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AiItemPredictions", x => x.Id); }); migrationBuilder.CreateTable( name: "Announcements", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Title = table.Column(type: "nvarchar(max)", nullable: false), Message = table.Column(type: "nvarchar(max)", nullable: false), Type = table.Column(type: "nvarchar(max)", nullable: false), Target = table.Column(type: "nvarchar(max)", nullable: false), TargetPlan = table.Column(type: "int", nullable: true), TargetCompanyId = table.Column(type: "int", nullable: true), StartsAt = table.Column(type: "datetime2", nullable: false), ExpiresAt = table.Column(type: "datetime2", nullable: true), IsDismissible = table.Column(type: "bit", nullable: false), IsActive = table.Column(type: "bit", nullable: false), CreatedByUserId = table.Column(type: "nvarchar(max)", nullable: false), CreatedByUserName = table.Column(type: "nvarchar(max)", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Announcements", x => x.Id); }); migrationBuilder.CreateTable( name: "AppointmentStatusLookups", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), StatusCode = table.Column(type: "nvarchar(max)", nullable: false), DisplayName = table.Column(type: "nvarchar(max)", nullable: false), DisplayOrder = table.Column(type: "int", nullable: false), ColorClass = table.Column(type: "nvarchar(max)", nullable: false), IconClass = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), IsSystemDefined = table.Column(type: "bit", nullable: false), IsTerminalStatus = table.Column(type: "bit", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AppointmentStatusLookups", x => x.Id); }); migrationBuilder.CreateTable( name: "AppointmentTypeLookups", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), TypeCode = table.Column(type: "nvarchar(max)", nullable: false), DisplayName = table.Column(type: "nvarchar(max)", nullable: false), DisplayOrder = table.Column(type: "int", nullable: false), ColorClass = table.Column(type: "nvarchar(max)", nullable: false), IconClass = table.Column(type: "nvarchar(max)", nullable: true), RequiresJobLink = table.Column(type: "bit", nullable: false), IsActive = table.Column(type: "bit", nullable: false), IsSystemDefined = table.Column(type: "bit", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AppointmentTypeLookups", x => x.Id); }); migrationBuilder.CreateTable( name: "AspNetRoles", columns: table => new { Id = table.Column(type: "nvarchar(450)", nullable: false), Name = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), NormalizedName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), ConcurrencyStamp = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetRoles", x => x.Id); }); migrationBuilder.CreateTable( name: "AuditLogs", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), UserId = table.Column(type: "nvarchar(max)", nullable: true), UserName = table.Column(type: "nvarchar(max)", nullable: false), CompanyId = table.Column(type: "int", nullable: true), CompanyName = table.Column(type: "nvarchar(max)", nullable: true), Action = table.Column(type: "nvarchar(max)", nullable: false), EntityType = table.Column(type: "nvarchar(450)", nullable: false), EntityId = table.Column(type: "nvarchar(450)", nullable: true), EntityDescription = table.Column(type: "nvarchar(max)", nullable: true), OldValues = table.Column(type: "nvarchar(max)", nullable: true), NewValues = table.Column(type: "nvarchar(max)", nullable: true), IpAddress = table.Column(type: "nvarchar(max)", nullable: true), Timestamp = table.Column(type: "datetime2", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AuditLogs", x => x.Id); }); migrationBuilder.CreateTable( name: "BannedIps", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), IpAddress = table.Column(type: "nvarchar(max)", nullable: false), Reason = table.Column(type: "nvarchar(max)", nullable: true), BannedByUserId = table.Column(type: "nvarchar(max)", nullable: true), BannedAt = table.Column(type: "datetime2", nullable: false), ExpiresAt = table.Column(type: "datetime2", nullable: true), IsActive = table.Column(type: "bit", nullable: false) }, constraints: table => { table.PrimaryKey("PK_BannedIps", x => x.Id); }); migrationBuilder.CreateTable( name: "Budgets", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Name = table.Column(type: "nvarchar(max)", nullable: false), FiscalYear = table.Column(type: "int", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), IsDefault = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Budgets", x => x.Id); }); migrationBuilder.CreateTable( name: "BugReports", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Title = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: false), SubmittedByUserId = table.Column(type: "nvarchar(max)", nullable: false), SubmittedByUserName = table.Column(type: "nvarchar(max)", nullable: false), CompanyName = table.Column(type: "nvarchar(max)", nullable: true), Priority = table.Column(type: "int", nullable: false), Status = table.Column(type: "int", nullable: false), ResolutionNotes = table.Column(type: "nvarchar(max)", nullable: true), ResolvedAt = table.Column(type: "datetime2", nullable: true), ResolvedBy = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_BugReports", x => x.Id); }); migrationBuilder.CreateTable( name: "CatalogPriceCheckReports", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), RunAt = table.Column(type: "datetime2", nullable: false), ItemsChecked = table.Column(type: "int", nullable: false), ResultsJson = table.Column(type: "nvarchar(max)", nullable: false), OperatingCostsSummary = table.Column(type: "nvarchar(max)", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_CatalogPriceCheckReports", x => x.Id); }); migrationBuilder.CreateTable( name: "Companies", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CompanyName = table.Column(type: "nvarchar(max)", nullable: false), CompanyCode = table.Column(type: "nvarchar(450)", nullable: true), PrimaryContactName = table.Column(type: "nvarchar(max)", nullable: false), PrimaryContactEmail = table.Column(type: "nvarchar(max)", nullable: false), Phone = table.Column(type: "nvarchar(max)", nullable: true), Address = table.Column(type: "nvarchar(max)", nullable: true), City = table.Column(type: "nvarchar(max)", nullable: true), State = table.Column(type: "nvarchar(max)", nullable: true), ZipCode = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), SubscriptionStartDate = table.Column(type: "datetime2", nullable: false), SubscriptionEndDate = table.Column(type: "datetime2", nullable: true), SubscriptionPlan = table.Column(type: "int", nullable: false), SubscriptionStatus = table.Column(type: "int", nullable: false), StripeCustomerId = table.Column(type: "nvarchar(max)", nullable: true), StripeSubscriptionId = table.Column(type: "nvarchar(max)", nullable: true), IsComped = table.Column(type: "bit", nullable: false), StripeAccountId = table.Column(type: "nvarchar(max)", nullable: true), StripeConnectStatus = table.Column(type: "int", nullable: false), OnlinePaymentSurchargeType = table.Column(type: "int", nullable: false), OnlinePaymentSurchargeValue = table.Column(type: "decimal(18,2)", nullable: false), OnlineSurchargeAcknowledged = table.Column(type: "bit", nullable: false), SubscriptionNotes = table.Column(type: "nvarchar(max)", nullable: true), MaxUsersOverride = table.Column(type: "int", nullable: true), MaxActiveJobsOverride = table.Column(type: "int", nullable: true), MaxCustomersOverride = table.Column(type: "int", nullable: true), MaxQuotesOverride = table.Column(type: "int", nullable: true), MaxCatalogItemsOverride = table.Column(type: "int", nullable: true), MaxJobPhotosOverride = table.Column(type: "int", nullable: true), MaxQuotePhotosOverride = table.Column(type: "int", nullable: true), MaxAiPhotoQuotesPerMonthOverride = table.Column(type: "int", nullable: true), AiPhotoQuotesEnabled = table.Column(type: "bit", nullable: false), AiInventoryAssistEnabled = table.Column(type: "bit", nullable: false), AiCatalogPriceCheckEnabled = table.Column(type: "bit", nullable: false), IsAnnualBilling = table.Column(type: "bit", nullable: false), OnlinePaymentsOverride = table.Column(type: "bit", nullable: true), AccountingOverride = table.Column(type: "bit", nullable: true), SmsEnabled = table.Column(type: "bit", nullable: false), SmsDisabledByAdmin = table.Column(type: "bit", nullable: false), MarketingEmailOptOut = table.Column(type: "bit", nullable: false), MarketingUnsubscribeToken = table.Column(type: "nvarchar(max)", nullable: false), AccountingMethod = table.Column(type: "int", nullable: false), BookLockedThrough = table.Column(type: "datetime2", nullable: true), TimeZone = table.Column(type: "nvarchar(max)", nullable: true), LogoData = table.Column(type: "varbinary(max)", nullable: true), LogoContentType = table.Column(type: "nvarchar(max)", nullable: true), LogoFilePath = table.Column(type: "nvarchar(max)", nullable: true), KioskActivationToken = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Companies", x => x.Id); }); migrationBuilder.CreateTable( name: "CompanySmsAgreements", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), AgreedByUserId = table.Column(type: "nvarchar(max)", nullable: false), AgreedByUserName = table.Column(type: "nvarchar(max)", nullable: false), AgreedAt = table.Column(type: "datetime2", nullable: false), IpAddress = table.Column(type: "nvarchar(max)", nullable: true), UserAgent = table.Column(type: "nvarchar(max)", nullable: true), TermsVersion = table.Column(type: "nvarchar(max)", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_CompanySmsAgreements", x => x.Id); }); migrationBuilder.CreateTable( name: "ContactSubmissions", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), SenderName = table.Column(type: "nvarchar(max)", nullable: false), SenderEmail = table.Column(type: "nvarchar(max)", nullable: false), CompanyName = table.Column(type: "nvarchar(max)", nullable: false), Category = table.Column(type: "nvarchar(max)", nullable: false), Subject = table.Column(type: "nvarchar(max)", nullable: false), Message = table.Column(type: "nvarchar(max)", nullable: false), IsRead = table.Column(type: "bit", nullable: false), ReadAt = table.Column(type: "datetime2", nullable: true), ReadByUserId = table.Column(type: "nvarchar(max)", nullable: true), ReadByUserName = table.Column(type: "nvarchar(max)", nullable: true), AdminNotes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_ContactSubmissions", x => x.Id); }); migrationBuilder.CreateTable( name: "DashboardTips", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), TipText = table.Column(type: "nvarchar(max)", nullable: false), IsActive = table.Column(type: "bit", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false) }, constraints: table => { table.PrimaryKey("PK_DashboardTips", x => x.Id); }); migrationBuilder.CreateTable( name: "DataProtectionKeys", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), FriendlyName = table.Column(type: "nvarchar(max)", nullable: true), Xml = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_DataProtectionKeys", x => x.Id); }); migrationBuilder.CreateTable( name: "JournalEntries", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), EntryNumber = table.Column(type: "nvarchar(max)", nullable: false), EntryDate = table.Column(type: "datetime2", nullable: false), Reference = table.Column(type: "nvarchar(max)", nullable: true), Description = table.Column(type: "nvarchar(max)", nullable: true), Status = table.Column(type: "int", nullable: false), IsReversal = table.Column(type: "bit", nullable: false), ReversalOfId = table.Column(type: "int", nullable: true), PostedAt = table.Column(type: "datetime2", nullable: true), PostedBy = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JournalEntries", x => x.Id); table.ForeignKey( name: "FK_JournalEntries_JournalEntries_ReversalOfId", column: x => x.ReversalOfId, principalTable: "JournalEntries", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "ManufacturerLookupPatterns", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), ManufacturerName = table.Column(type: "nvarchar(max)", nullable: false), ProductUrlTemplate = table.Column(type: "nvarchar(max)", nullable: true), SlugTransform = table.Column(type: "nvarchar(max)", nullable: false), Domain = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_ManufacturerLookupPatterns", x => x.Id); }); migrationBuilder.CreateTable( name: "PendingRegistrationSessions", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Token = table.Column(type: "nvarchar(max)", nullable: false), CompanyName = table.Column(type: "nvarchar(max)", nullable: false), CompanyPhone = table.Column(type: "nvarchar(max)", nullable: true), FirstName = table.Column(type: "nvarchar(max)", nullable: false), LastName = table.Column(type: "nvarchar(max)", nullable: false), Email = table.Column(type: "nvarchar(max)", nullable: false), Plan = table.Column(type: "int", nullable: false), IsAnnual = table.Column(type: "bit", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), IsCompleted = table.Column(type: "bit", nullable: false) }, constraints: table => { table.PrimaryKey("PK_PendingRegistrationSessions", x => x.Id); }); migrationBuilder.CreateTable( name: "PlatformSettings", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Key = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), Value = table.Column(type: "nvarchar(max)", nullable: true), Label = table.Column(type: "nvarchar(max)", nullable: true), Description = table.Column(type: "nvarchar(max)", nullable: true), GroupName = table.Column(type: "nvarchar(max)", nullable: true), UpdatedAt = table.Column(type: "datetime2", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_PlatformSettings", x => x.Id); }); migrationBuilder.CreateTable( name: "PowderCatalogItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), VendorName = table.Column(type: "nvarchar(450)", nullable: false), Sku = table.Column(type: "nvarchar(450)", nullable: false), ColorName = table.Column(type: "nvarchar(450)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), UnitPrice = table.Column(type: "decimal(18,2)", nullable: false), PriceTiersJson = table.Column(type: "nvarchar(max)", nullable: true), ImageUrl = table.Column(type: "nvarchar(max)", nullable: true), SdsUrl = table.Column(type: "nvarchar(max)", nullable: true), TdsUrl = table.Column(type: "nvarchar(max)", nullable: true), ApplicationGuideUrl = table.Column(type: "nvarchar(max)", nullable: true), ProductUrl = table.Column(type: "nvarchar(max)", nullable: true), CureTemperatureF = table.Column(type: "decimal(18,2)", nullable: true), CureTimeMinutes = table.Column(type: "int", nullable: true), Finish = table.Column(type: "nvarchar(max)", nullable: true), ColorFamilies = table.Column(type: "nvarchar(max)", nullable: true), RequiresClearCoat = table.Column(type: "bit", nullable: true), CoverageSqFtPerLb = table.Column(type: "decimal(18,2)", nullable: true), SpecificGravity = table.Column(type: "decimal(18,2)", nullable: true), TransferEfficiency = table.Column(type: "decimal(18,2)", nullable: true), IsDiscontinued = table.Column(type: "bit", nullable: false), IsUserContributed = table.Column(type: "bit", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), LastSyncedAt = table.Column(type: "datetime2", nullable: true) }, constraints: table => { table.PrimaryKey("PK_PowderCatalogItems", x => x.Id); }); migrationBuilder.CreateTable( name: "PrepServices", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), ServiceName = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), DisplayOrder = table.Column(type: "int", nullable: false), IsActive = table.Column(type: "bit", nullable: false), RequiresBlastSetup = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_PrepServices", x => x.Id); }); migrationBuilder.CreateTable( name: "RecurringTemplates", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Name = table.Column(type: "nvarchar(max)", nullable: false), TemplateType = table.Column(type: "int", nullable: false), Frequency = table.Column(type: "int", nullable: false), IntervalCount = table.Column(type: "int", nullable: false), NextFireDate = table.Column(type: "datetime2", nullable: false), EndDate = table.Column(type: "datetime2", nullable: true), MaxOccurrences = table.Column(type: "int", nullable: true), OccurrenceCount = table.Column(type: "int", nullable: false), IsActive = table.Column(type: "bit", nullable: false), TemplateData = table.Column(type: "nvarchar(max)", nullable: false), LastError = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_RecurringTemplates", x => x.Id); }); migrationBuilder.CreateTable( name: "ReleaseNotes", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Version = table.Column(type: "nvarchar(max)", nullable: false), Title = table.Column(type: "nvarchar(max)", nullable: false), Body = table.Column(type: "nvarchar(max)", nullable: false), Tag = table.Column(type: "nvarchar(max)", nullable: false), IsPublished = table.Column(type: "bit", nullable: false), ReleasedAt = table.Column(type: "datetime2", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedByUserId = table.Column(type: "nvarchar(max)", nullable: true), CreatedByUserName = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_ReleaseNotes", x => x.Id); }); migrationBuilder.CreateTable( name: "StripeWebhookEvents", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), EventId = table.Column(type: "nvarchar(max)", nullable: false), EventType = table.Column(type: "nvarchar(max)", nullable: false), CompanyId = table.Column(type: "int", nullable: true), RawJson = table.Column(type: "nvarchar(max)", nullable: false), Status = table.Column(type: "int", nullable: false), ErrorMessage = table.Column(type: "nvarchar(max)", nullable: true), ReceivedAt = table.Column(type: "datetime2", nullable: false), ProcessedAt = table.Column(type: "datetime2", nullable: true) }, constraints: table => { table.PrimaryKey("PK_StripeWebhookEvents", x => x.Id); }); migrationBuilder.CreateTable( name: "SubscriptionPlanConfigs", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Plan = table.Column(type: "int", nullable: false), DisplayName = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), MaxUsers = table.Column(type: "int", nullable: false), MaxActiveJobs = table.Column(type: "int", nullable: false), MaxCustomers = table.Column(type: "int", nullable: false), MaxQuotes = table.Column(type: "int", nullable: false), MaxCatalogItems = table.Column(type: "int", nullable: false), MaxJobPhotos = table.Column(type: "int", nullable: false), MaxQuotePhotos = table.Column(type: "int", nullable: false), MaxAiPhotoQuotesPerMonth = table.Column(type: "int", nullable: false), MonthlyPrice = table.Column(type: "decimal(18,2)", nullable: false), AnnualPrice = table.Column(type: "decimal(18,2)", nullable: false), StripePriceIdMonthly = table.Column(type: "nvarchar(max)", nullable: true), StripePriceIdAnnual = table.Column(type: "nvarchar(max)", nullable: true), AllowOnlinePayments = table.Column(type: "bit", nullable: false), AllowAccounting = table.Column(type: "bit", nullable: false), AllowAiPhotoQuotes = table.Column(type: "bit", nullable: false), AllowAiInventoryAssist = table.Column(type: "bit", nullable: false), AllowAiCatalogPriceCheck = table.Column(type: "bit", nullable: false), AllowSms = table.Column(type: "bit", nullable: false), IsActive = table.Column(type: "bit", nullable: false), SortOrder = table.Column(type: "int", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_SubscriptionPlanConfigs", x => x.Id); }); migrationBuilder.CreateTable( name: "TaxRates", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Name = table.Column(type: "nvarchar(max)", nullable: false), Rate = table.Column(type: "decimal(18,2)", nullable: false), State = table.Column(type: "nvarchar(max)", nullable: true), Description = table.Column(type: "nvarchar(max)", nullable: true), IsDefault = table.Column(type: "bit", nullable: false), IsActive = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_TaxRates", x => x.Id); }); migrationBuilder.CreateTable( name: "TermsAcceptances", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), UserId = table.Column(type: "nvarchar(max)", nullable: false), CompanyId = table.Column(type: "int", nullable: false), TosVersion = table.Column(type: "nvarchar(max)", nullable: false), AcceptedAt = table.Column(type: "datetime2", nullable: false), IpAddress = table.Column(type: "nvarchar(max)", nullable: true), UserAgent = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_TermsAcceptances", x => x.Id); }); migrationBuilder.CreateTable( name: "UserPasskeys", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), UserId = table.Column(type: "nvarchar(max)", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CredentialId = table.Column(type: "varbinary(900)", nullable: false), PublicKey = table.Column(type: "varbinary(max)", nullable: false), UserHandle = table.Column(type: "varbinary(max)", nullable: false), SignCount = table.Column(type: "bigint", nullable: false), DeviceFriendlyName = table.Column(type: "nvarchar(max)", nullable: true), CreatedAt = table.Column(type: "datetime2", nullable: false), LastUsedAt = table.Column(type: "datetime2", nullable: true) }, constraints: table => { table.PrimaryKey("PK_UserPasskeys", x => x.Id); }); migrationBuilder.CreateTable( name: "BankReconciliations", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), AccountId = table.Column(type: "int", nullable: false), StatementDate = table.Column(type: "datetime2", nullable: false), BeginningBalance = table.Column(type: "decimal(18,2)", nullable: false), EndingBalance = table.Column(type: "decimal(18,2)", nullable: false), Status = table.Column(type: "int", nullable: false), CompletedAt = table.Column(type: "datetime2", nullable: true), CompletedBy = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_BankReconciliations", x => x.Id); table.ForeignKey( name: "FK_BankReconciliations_Accounts_AccountId", column: x => x.AccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "FixedAssets", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Name = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), PurchaseDate = table.Column(type: "datetime2", nullable: false), PurchaseCost = table.Column(type: "decimal(18,2)", nullable: false), SalvageValue = table.Column(type: "decimal(18,2)", nullable: false), UsefulLifeMonths = table.Column(type: "int", nullable: false), AccumulatedDepreciation = table.Column(type: "decimal(18,2)", nullable: false), IsDisposed = table.Column(type: "bit", nullable: false), DisposalDate = table.Column(type: "datetime2", nullable: true), AssetAccountId = table.Column(type: "int", nullable: true), DepreciationExpenseAccountId = table.Column(type: "int", nullable: true), AccumDepreciationAccountId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_FixedAssets", x => x.Id); table.ForeignKey( name: "FK_FixedAssets_Accounts_AccumDepreciationAccountId", column: x => x.AccumDepreciationAccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_FixedAssets_Accounts_AssetAccountId", column: x => x.AssetAccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_FixedAssets_Accounts_DepreciationExpenseAccountId", column: x => x.DepreciationExpenseAccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "AnnouncementDismissals", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), AnnouncementId = table.Column(type: "int", nullable: false), UserId = table.Column(type: "nvarchar(450)", nullable: false), DismissedAt = table.Column(type: "datetime2", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AnnouncementDismissals", x => x.Id); table.ForeignKey( name: "FK_AnnouncementDismissals_Announcements_AnnouncementId", column: x => x.AnnouncementId, principalTable: "Announcements", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetRoleClaims", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), RoleId = table.Column(type: "nvarchar(450)", nullable: false), ClaimType = table.Column(type: "nvarchar(max)", nullable: true), ClaimValue = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id); table.ForeignKey( name: "FK_AspNetRoleClaims_AspNetRoles_RoleId", column: x => x.RoleId, principalTable: "AspNetRoles", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "BudgetLines", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), BudgetId = table.Column(type: "int", nullable: false), AccountId = table.Column(type: "int", nullable: false), Jan = table.Column(type: "decimal(18,2)", nullable: false), Feb = table.Column(type: "decimal(18,2)", nullable: false), Mar = table.Column(type: "decimal(18,2)", nullable: false), Apr = table.Column(type: "decimal(18,2)", nullable: false), May = table.Column(type: "decimal(18,2)", nullable: false), Jun = table.Column(type: "decimal(18,2)", nullable: false), Jul = table.Column(type: "decimal(18,2)", nullable: false), Aug = table.Column(type: "decimal(18,2)", nullable: false), Sep = table.Column(type: "decimal(18,2)", nullable: false), Oct = table.Column(type: "decimal(18,2)", nullable: false), Nov = table.Column(type: "decimal(18,2)", nullable: false), Dec = table.Column(type: "decimal(18,2)", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_BudgetLines", x => x.Id); table.ForeignKey( name: "FK_BudgetLines_Accounts_AccountId", column: x => x.AccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_BudgetLines_Budgets_BudgetId", column: x => x.BudgetId, principalTable: "Budgets", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "BugReportAttachments", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), BugReportId = table.Column(type: "int", nullable: false), BlobPath = table.Column(type: "nvarchar(max)", nullable: false), FileName = table.Column(type: "nvarchar(max)", nullable: false), ContentType = table.Column(type: "nvarchar(max)", nullable: false), FileSizeBytes = table.Column(type: "bigint", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_BugReportAttachments", x => x.Id); table.ForeignKey( name: "FK_BugReportAttachments_BugReports_BugReportId", column: x => x.BugReportId, principalTable: "BugReports", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AiUsageLogs", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CompanyId = table.Column(type: "int", nullable: false), UserId = table.Column(type: "nvarchar(max)", nullable: false), Feature = table.Column(type: "nvarchar(max)", nullable: false), Success = table.Column(type: "bit", nullable: false), InputLength = table.Column(type: "int", nullable: false), CalledAt = table.Column(type: "datetime2", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AiUsageLogs", x => x.Id); table.ForeignKey( name: "FK_AiUsageLogs_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "AspNetUsers", columns: table => new { Id = table.Column(type: "nvarchar(450)", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CompanyRole = table.Column(type: "nvarchar(max)", nullable: true), FirstName = table.Column(type: "nvarchar(max)", nullable: false), LastName = table.Column(type: "nvarchar(max)", nullable: false), EmployeeNumber = table.Column(type: "nvarchar(max)", nullable: true), HireDate = table.Column(type: "datetime2", nullable: false), TerminationDate = table.Column(type: "datetime2", nullable: true), Address = table.Column(type: "nvarchar(max)", nullable: true), City = table.Column(type: "nvarchar(max)", nullable: true), State = table.Column(type: "nvarchar(max)", nullable: true), ZipCode = table.Column(type: "nvarchar(max)", nullable: true), Department = table.Column(type: "nvarchar(max)", nullable: true), Position = table.Column(type: "nvarchar(max)", nullable: true), Theme = table.Column(type: "nvarchar(max)", nullable: true), DateFormat = table.Column(type: "nvarchar(max)", nullable: true), TimeZone = table.Column(type: "nvarchar(max)", nullable: true), DashboardLayout = table.Column(type: "int", nullable: true), IsActive = table.Column(type: "bit", nullable: false), CanViewShopFloor = table.Column(type: "bit", nullable: false), CanManageJobs = table.Column(type: "bit", nullable: false), CanManageInventory = table.Column(type: "bit", nullable: false), CanManageCustomers = table.Column(type: "bit", nullable: false), CanCreateQuotes = table.Column(type: "bit", nullable: false), CanApproveQuotes = table.Column(type: "bit", nullable: false), CanManageCalendar = table.Column(type: "bit", nullable: false), CanViewCalendar = table.Column(type: "bit", nullable: false), CanManageProducts = table.Column(type: "bit", nullable: false), CanViewProducts = table.Column(type: "bit", nullable: false), CanManageEquipment = table.Column(type: "bit", nullable: false), CanManageVendors = table.Column(type: "bit", nullable: false), CanManageMaintenance = table.Column(type: "bit", nullable: false), CanManageInvoices = table.Column(type: "bit", nullable: false), CanViewReports = table.Column(type: "bit", nullable: false), CanManageBills = table.Column(type: "bit", nullable: false), CanManageAccounting = table.Column(type: "bit", nullable: false), ProfilePictureFilePath = table.Column(type: "nvarchar(max)", nullable: true), SidebarColor = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), LaborCostPerHour = table.Column(type: "decimal(18,2)", nullable: true), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), LastLoginDate = table.Column(type: "datetime2", nullable: true), PasskeyPromptDismissed = table.Column(type: "bit", nullable: false), IsBanned = table.Column(type: "bit", nullable: false), BannedAt = table.Column(type: "datetime2", nullable: true), BanReason = table.Column(type: "nvarchar(max)", nullable: true), BannedByUserId = table.Column(type: "nvarchar(max)", nullable: true), UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), NormalizedUserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), Email = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), NormalizedEmail = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), EmailConfirmed = table.Column(type: "bit", nullable: false), PasswordHash = table.Column(type: "nvarchar(max)", nullable: true), SecurityStamp = table.Column(type: "nvarchar(max)", nullable: true), ConcurrencyStamp = table.Column(type: "nvarchar(max)", nullable: true), PhoneNumber = table.Column(type: "nvarchar(max)", nullable: true), PhoneNumberConfirmed = table.Column(type: "bit", nullable: false), TwoFactorEnabled = table.Column(type: "bit", nullable: false), LockoutEnd = table.Column(type: "datetimeoffset", nullable: true), LockoutEnabled = table.Column(type: "bit", nullable: false), AccessFailedCount = table.Column(type: "int", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUsers", x => x.Id); table.ForeignKey( name: "FK_AspNetUsers_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "CatalogCategories", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Name = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), ParentCategoryId = table.Column(type: "int", nullable: true), DisplayOrder = table.Column(type: "int", nullable: false), IsActive = table.Column(type: "bit", nullable: false), IsMerchandise = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_CatalogCategories", x => x.Id); table.ForeignKey( name: "FK_CatalogCategories_CatalogCategories_ParentCategoryId", column: x => x.ParentCategoryId, principalTable: "CatalogCategories", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_CatalogCategories_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "CompanyBlastSetups", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Name = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false), SetupType = table.Column(type: "int", nullable: false), CompressorCfm = table.Column(type: "decimal(18,2)", nullable: false), BlastNozzleSize = table.Column(type: "int", nullable: false), PrimarySubstrate = table.Column(type: "int", nullable: false), BlastRateSqFtPerHourOverride = table.Column(type: "decimal(18,2)", nullable: true), IsDefault = table.Column(type: "bit", nullable: false), IsActive = table.Column(type: "bit", nullable: false), DisplayOrder = table.Column(type: "int", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_CompanyBlastSetups", x => x.Id); table.ForeignKey( name: "FK_CompanyBlastSetups_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "CompanyOperatingCosts", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CompanyId = table.Column(type: "int", nullable: false), StandardLaborRate = table.Column(type: "decimal(18,2)", nullable: false), LaborCostPerHour = table.Column(type: "decimal(18,2)", nullable: true), AdditionalCoatLaborPercent = table.Column(type: "decimal(18,2)", nullable: false), OvenOperatingCostPerHour = table.Column(type: "decimal(18,2)", nullable: false), SandblasterCostPerHour = table.Column(type: "decimal(18,2)", nullable: false), CoatingBoothCostPerHour = table.Column(type: "decimal(18,2)", nullable: false), PowderCoatingCostPerSqFt = table.Column(type: "decimal(18,2)", nullable: false), PricingMode = table.Column(type: "int", nullable: false), GeneralMarkupPercentage = table.Column(type: "decimal(18,2)", nullable: false), TargetMarginPercent = table.Column(type: "decimal(18,2)", nullable: false), TaxPercent = table.Column(type: "decimal(18,2)", nullable: false), ShopSuppliesRate = table.Column(type: "decimal(18,2)", nullable: false), DefaultOvenCycleMinutes = table.Column(type: "int", nullable: false), RushChargeType = table.Column(type: "nvarchar(max)", nullable: false), RushChargePercentage = table.Column(type: "decimal(18,2)", nullable: false), RushChargeFixedAmount = table.Column(type: "decimal(18,2)", nullable: false), ShopMinimumCharge = table.Column(type: "decimal(18,2)", nullable: false), ComplexitySimplePercent = table.Column(type: "decimal(18,2)", nullable: false), ComplexityModeratePercent = table.Column(type: "decimal(18,2)", nullable: false), ComplexityComplexPercent = table.Column(type: "decimal(18,2)", nullable: false), ComplexityExtremePercent = table.Column(type: "decimal(18,2)", nullable: false), AiContextProfile = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: true), ShopCapabilityTier = table.Column(type: "int", nullable: false), BlastSetupType = table.Column(type: "int", nullable: false), CompressorCfm = table.Column(type: "decimal(18,2)", nullable: false), BlastNozzleSize = table.Column(type: "int", nullable: false), PrimaryBlastSubstrate = table.Column(type: "int", nullable: false), BlastRateSqFtPerHourOverride = table.Column(type: "decimal(18,2)", nullable: true), CoatingGunType = table.Column(type: "int", nullable: false), CoatingRateSqFtPerHourOverride = table.Column(type: "decimal(18,2)", nullable: true), MonthlyRent = table.Column(type: "decimal(18,2)", nullable: false), MonthlyUtilities = table.Column(type: "decimal(18,2)", nullable: false), MonthlyBillableHours = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_CompanyOperatingCosts", x => x.Id); table.ForeignKey( name: "FK_CompanyOperatingCosts_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "CompanyPreferences", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CompanyId = table.Column(type: "int", nullable: false), DefaultCurrency = table.Column(type: "nvarchar(max)", nullable: false), DefaultDateFormat = table.Column(type: "nvarchar(max)", nullable: false), DefaultTimeFormat = table.Column(type: "nvarchar(max)", nullable: false), DefaultPaymentTerms = table.Column(type: "nvarchar(max)", nullable: false), DefaultQuoteValidityDays = table.Column(type: "int", nullable: false), QuoteNumberPrefix = table.Column(type: "nvarchar(max)", nullable: false), JobNumberPrefix = table.Column(type: "nvarchar(max)", nullable: false), InvoiceNumberPrefix = table.Column(type: "nvarchar(max)", nullable: false), UseMetricSystem = table.Column(type: "bit", nullable: false), DefaultJobPriority = table.Column(type: "nvarchar(max)", nullable: false), RequireCustomerPO = table.Column(type: "bit", nullable: false), AllowCustomerApproval = table.Column(type: "bit", nullable: false), DefaultTurnaroundDays = table.Column(type: "int", nullable: false), EmailFromAddress = table.Column(type: "nvarchar(max)", nullable: true), EmailFromName = table.Column(type: "nvarchar(max)", nullable: true), EmailNotificationsEnabled = table.Column(type: "bit", nullable: false), NotifyOnNewJob = table.Column(type: "bit", nullable: false), NotifyOnNewQuote = table.Column(type: "bit", nullable: false), NotifyOnJobStatusChange = table.Column(type: "bit", nullable: false), NotifyOnQuoteApproval = table.Column(type: "bit", nullable: false), NotifyOnPaymentReceived = table.Column(type: "bit", nullable: false), QuoteExpiryWarningDays = table.Column(type: "int", nullable: false), DueDateWarningDays = table.Column(type: "int", nullable: false), MaintenanceAlertDays = table.Column(type: "int", nullable: false), PaymentRemindersEnabled = table.Column(type: "bit", nullable: false), PaymentReminderDays = table.Column(type: "nvarchar(max)", nullable: false), QuoteRetentionYears = table.Column(type: "int", nullable: false), JobRetentionYears = table.Column(type: "int", nullable: false), LogRetentionDays = table.Column(type: "int", nullable: false), AutoArchiveJobsDays = table.Column(type: "int", nullable: false), DeletedRecordRetentionDays = table.Column(type: "int", nullable: false), QtAccentColor = table.Column(type: "nvarchar(max)", nullable: false), QtDefaultTerms = table.Column(type: "nvarchar(max)", nullable: true), QtFooterNote = table.Column(type: "nvarchar(max)", nullable: true), InAccentColor = table.Column(type: "nvarchar(max)", nullable: false), InDefaultTerms = table.Column(type: "nvarchar(max)", nullable: true), InFooterNote = table.Column(type: "nvarchar(max)", nullable: true), WoAccentColor = table.Column(type: "nvarchar(max)", nullable: false), WoTerms = table.Column(type: "nvarchar(max)", nullable: true), SetupWizardStarted = table.Column(type: "bit", nullable: false), SetupWizardCompleted = table.Column(type: "bit", nullable: false), SetupWizardDoneSteps = table.Column(type: "nvarchar(max)", nullable: true), SetupWizardSkippedSteps = table.Column(type: "nvarchar(max)", nullable: true), SetupWizardCompletedAt = table.Column(type: "datetime2", nullable: true), SetupWizardCompletedByUserId = table.Column(type: "nvarchar(max)", nullable: true), SetupWizardCompletedByName = table.Column(type: "nvarchar(max)", nullable: true), MigratingFromQuickBooks = table.Column(type: "bit", nullable: false), QbMigrationStateJson = table.Column(type: "nvarchar(max)", nullable: true), KioskIntakeOutput = table.Column(type: "nvarchar(max)", nullable: false), OnboardingPath = table.Column(type: "nvarchar(max)", nullable: true), FirstWorkflowCompleted = table.Column(type: "bit", nullable: false), FirstWorkflowCompletedAt = table.Column(type: "datetime2", nullable: true), FirstQuoteCreatedAt = table.Column(type: "datetime2", nullable: true), FirstJobCreatedAt = table.Column(type: "datetime2", nullable: true), FirstInvoiceCreatedAt = table.Column(type: "datetime2", nullable: true), GuidedActivationDismissedAt = table.Column(type: "datetime2", nullable: true), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_CompanyPreferences", x => x.Id); table.ForeignKey( name: "FK_CompanyPreferences_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "Equipment", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), EquipmentName = table.Column(type: "nvarchar(max)", nullable: false), EquipmentNumber = table.Column(type: "nvarchar(max)", nullable: true), EquipmentType = table.Column(type: "nvarchar(max)", nullable: false), Manufacturer = table.Column(type: "nvarchar(max)", nullable: true), Model = table.Column(type: "nvarchar(max)", nullable: true), SerialNumber = table.Column(type: "nvarchar(max)", nullable: true), PurchaseDate = table.Column(type: "datetime2", nullable: true), PurchasePrice = table.Column(type: "decimal(18,2)", nullable: false), WarrantyExpiration = table.Column(type: "datetime2", nullable: true), Status = table.Column(type: "int", nullable: false), Location = table.Column(type: "nvarchar(max)", nullable: true), RecommendedMaintenanceIntervalDays = table.Column(type: "int", nullable: false), LastMaintenanceDate = table.Column(type: "datetime2", nullable: true), NextScheduledMaintenance = table.Column(type: "datetime2", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), MaxLoadSqFt = table.Column(type: "decimal(18,2)", nullable: true), OvenCycleMinutes = table.Column(type: "int", nullable: true), ManualFilePath = table.Column(type: "nvarchar(max)", nullable: true), ManualFileName = table.Column(type: "nvarchar(max)", nullable: true), ManualFileSize = table.Column(type: "bigint", nullable: true), ManualContentType = table.Column(type: "nvarchar(max)", nullable: true), ManualUploadedDate = table.Column(type: "datetime2", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Equipment", x => x.Id); table.ForeignKey( name: "FK_Equipment_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "InventoryCategoryLookups", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CategoryCode = table.Column(type: "nvarchar(450)", nullable: false), DisplayName = table.Column(type: "nvarchar(max)", nullable: false), DisplayOrder = table.Column(type: "int", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), IsSystemDefined = table.Column(type: "bit", nullable: false), IsCoating = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_InventoryCategoryLookups", x => x.Id); table.ForeignKey( name: "FK_InventoryCategoryLookups_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "JobPriorityLookups", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), PriorityCode = table.Column(type: "nvarchar(450)", nullable: false), DisplayName = table.Column(type: "nvarchar(max)", nullable: false), DisplayOrder = table.Column(type: "int", nullable: false), ColorClass = table.Column(type: "nvarchar(max)", nullable: false), IconClass = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), IsSystemDefined = table.Column(type: "bit", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobPriorityLookups", x => x.Id); table.ForeignKey( name: "FK_JobPriorityLookups_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "JobStatusLookups", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), StatusCode = table.Column(type: "nvarchar(450)", nullable: false), DisplayName = table.Column(type: "nvarchar(max)", nullable: false), DisplayOrder = table.Column(type: "int", nullable: false), ColorClass = table.Column(type: "nvarchar(max)", nullable: false), IconClass = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), IsSystemDefined = table.Column(type: "bit", nullable: false), IsTerminalStatus = table.Column(type: "bit", nullable: false), IsWorkInProgressStatus = table.Column(type: "bit", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), WorkflowCategory = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobStatusLookups", x => x.Id); table.ForeignKey( name: "FK_JobStatusLookups_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "NotificationTemplates", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), NotificationType = table.Column(type: "int", nullable: false), Channel = table.Column(type: "int", nullable: false), DisplayName = table.Column(type: "nvarchar(max)", nullable: false), Subject = table.Column(type: "nvarchar(max)", nullable: true), Body = table.Column(type: "nvarchar(max)", nullable: false), IsActive = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_NotificationTemplates", x => x.Id); table.ForeignKey( name: "FK_NotificationTemplates_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "OvenCosts", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Label = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false), CostPerHour = table.Column(type: "decimal(18,2)", nullable: false), IsActive = table.Column(type: "bit", nullable: false), DisplayOrder = table.Column(type: "int", nullable: false), MaxLoadSqFt = table.Column(type: "decimal(18,2)", nullable: true), DefaultCycleMinutes = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_OvenCosts", x => x.Id); table.ForeignKey( name: "FK_OvenCosts_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "PricingTiers", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), TierName = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), DiscountPercent = table.Column(type: "decimal(18,2)", nullable: false), IsActive = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_PricingTiers", x => x.Id); table.ForeignKey( name: "FK_PricingTiers_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "QuoteStatusLookups", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), StatusCode = table.Column(type: "nvarchar(450)", nullable: false), DisplayName = table.Column(type: "nvarchar(max)", nullable: false), DisplayOrder = table.Column(type: "int", nullable: false), ColorClass = table.Column(type: "nvarchar(max)", nullable: false), IconClass = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), IsSystemDefined = table.Column(type: "bit", nullable: false), IsApprovedStatus = table.Column(type: "bit", nullable: false), IsConvertedStatus = table.Column(type: "bit", nullable: false), IsDraftStatus = table.Column(type: "bit", nullable: false), IsRejectedStatus = table.Column(type: "bit", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_QuoteStatusLookups", x => x.Id); table.ForeignKey( name: "FK_QuoteStatusLookups_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "Vendors", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CompanyName = table.Column(type: "nvarchar(max)", nullable: false), ContactName = table.Column(type: "nvarchar(max)", nullable: true), Email = table.Column(type: "nvarchar(max)", nullable: true), Phone = table.Column(type: "nvarchar(max)", nullable: true), Address = table.Column(type: "nvarchar(max)", nullable: true), City = table.Column(type: "nvarchar(max)", nullable: true), State = table.Column(type: "nvarchar(max)", nullable: true), ZipCode = table.Column(type: "nvarchar(max)", nullable: true), Country = table.Column(type: "nvarchar(max)", nullable: true), Website = table.Column(type: "nvarchar(max)", nullable: true), AccountNumber = table.Column(type: "nvarchar(max)", nullable: true), TaxId = table.Column(type: "nvarchar(max)", nullable: true), PaymentTerms = table.Column(type: "nvarchar(max)", nullable: true), CreditLimit = table.Column(type: "decimal(18,2)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), IsPreferred = table.Column(type: "bit", nullable: false), CurrentBalance = table.Column(type: "decimal(18,2)", nullable: false), OpeningBalance = table.Column(type: "decimal(18,2)", nullable: false), OpeningBalanceDate = table.Column(type: "datetime2", nullable: true), DefaultExpenseAccountId = table.Column(type: "int", nullable: true), Is1099Vendor = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Vendors", x => x.Id); table.ForeignKey( name: "FK_Vendors_Accounts_DefaultExpenseAccountId", column: x => x.DefaultExpenseAccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_Vendors_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "JournalEntryLines", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JournalEntryId = table.Column(type: "int", nullable: false), AccountId = table.Column(type: "int", nullable: false), DebitAmount = table.Column(type: "decimal(18,2)", nullable: false), CreditAmount = table.Column(type: "decimal(18,2)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), LineOrder = table.Column(type: "int", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JournalEntryLines", x => x.Id); table.ForeignKey( name: "FK_JournalEntryLines_Accounts_AccountId", column: x => x.AccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_JournalEntryLines_JournalEntries_JournalEntryId", column: x => x.JournalEntryId, principalTable: "JournalEntries", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "YearEndCloses", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), ClosedYear = table.Column(type: "int", nullable: false), ClosedAt = table.Column(type: "datetime2", nullable: false), ClosedBy = table.Column(type: "nvarchar(max)", nullable: true), JournalEntryId = table.Column(type: "int", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_YearEndCloses", x => x.Id); table.ForeignKey( name: "FK_YearEndCloses_JournalEntries_JournalEntryId", column: x => x.JournalEntryId, principalTable: "JournalEntries", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "FixedAssetDepreciationEntries", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), FixedAssetId = table.Column(type: "int", nullable: false), PeriodYear = table.Column(type: "int", nullable: false), PeriodMonth = table.Column(type: "int", nullable: false), Amount = table.Column(type: "decimal(18,2)", nullable: false), JournalEntryId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_FixedAssetDepreciationEntries", x => x.Id); table.ForeignKey( name: "FK_FixedAssetDepreciationEntries_FixedAssets_FixedAssetId", column: x => x.FixedAssetId, principalTable: "FixedAssets", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_FixedAssetDepreciationEntries_JournalEntries_JournalEntryId", column: x => x.JournalEntryId, principalTable: "JournalEntries", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "AspNetUserClaims", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), UserId = table.Column(type: "nvarchar(450)", nullable: false), ClaimType = table.Column(type: "nvarchar(max)", nullable: true), ClaimValue = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetUserClaims", x => x.Id); table.ForeignKey( name: "FK_AspNetUserClaims_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserLogins", columns: table => new { LoginProvider = table.Column(type: "nvarchar(450)", nullable: false), ProviderKey = table.Column(type: "nvarchar(450)", nullable: false), ProviderDisplayName = table.Column(type: "nvarchar(max)", nullable: true), UserId = table.Column(type: "nvarchar(450)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey }); table.ForeignKey( name: "FK_AspNetUserLogins_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserRoles", columns: table => new { UserId = table.Column(type: "nvarchar(450)", nullable: false), RoleId = table.Column(type: "nvarchar(450)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId }); table.ForeignKey( name: "FK_AspNetUserRoles_AspNetRoles_RoleId", column: x => x.RoleId, principalTable: "AspNetRoles", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_AspNetUserRoles_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserTokens", columns: table => new { UserId = table.Column(type: "nvarchar(450)", nullable: false), LoginProvider = table.Column(type: "nvarchar(450)", nullable: false), Name = table.Column(type: "nvarchar(450)", nullable: false), Value = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); table.ForeignKey( name: "FK_AspNetUserTokens_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "MaintenanceRecords", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), EquipmentId = table.Column(type: "int", nullable: false), MaintenanceType = table.Column(type: "nvarchar(max)", nullable: false), Status = table.Column(type: "int", nullable: false), Priority = table.Column(type: "int", nullable: false), ScheduledDate = table.Column(type: "datetime2", nullable: false), CompletedDate = table.Column(type: "datetime2", nullable: true), PerformedById = table.Column(type: "nvarchar(450)", nullable: true), AssignedUserId = table.Column(type: "nvarchar(450)", nullable: true), Description = table.Column(type: "nvarchar(max)", nullable: false), WorkPerformed = table.Column(type: "nvarchar(max)", nullable: true), PartsReplaced = table.Column(type: "nvarchar(max)", nullable: true), LaborCost = table.Column(type: "decimal(18,2)", nullable: false), PartsCost = table.Column(type: "decimal(18,2)", nullable: false), TotalCost = table.Column(type: "decimal(18,2)", nullable: false), DowntimeHours = table.Column(type: "decimal(18,2)", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), TechnicianNotes = table.Column(type: "nvarchar(max)", nullable: true), IsRecurring = table.Column(type: "bit", nullable: false), RecurrenceFrequency = table.Column(type: "int", nullable: true), RecurrenceEndDate = table.Column(type: "datetime2", nullable: true), RecurrenceGroupId = table.Column(type: "nvarchar(max)", nullable: true), RecurrenceParentId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_MaintenanceRecords", x => x.Id); table.ForeignKey( name: "FK_MaintenanceRecords_AspNetUsers_AssignedUserId", column: x => x.AssignedUserId, principalTable: "AspNetUsers", principalColumn: "Id"); table.ForeignKey( name: "FK_MaintenanceRecords_AspNetUsers_PerformedById", column: x => x.PerformedById, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_MaintenanceRecords_Equipment_EquipmentId", column: x => x.EquipmentId, principalTable: "Equipment", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_MaintenanceRecords_MaintenanceRecords_RecurrenceParentId", column: x => x.RecurrenceParentId, principalTable: "MaintenanceRecords", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "OvenBatches", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), BatchNumber = table.Column(type: "nvarchar(max)", nullable: false), EquipmentId = table.Column(type: "int", nullable: true), OvenCostId = table.Column(type: "int", nullable: true), Status = table.Column(type: "int", nullable: false), ScheduledDate = table.Column(type: "datetime2", nullable: false), ScheduledStartTime = table.Column(type: "datetime2", nullable: true), EstimatedEndTime = table.Column(type: "datetime2", nullable: true), ActualStartTime = table.Column(type: "datetime2", nullable: true), ActualEndTime = table.Column(type: "datetime2", nullable: true), TotalSurfaceAreaSqFt = table.Column(type: "decimal(18,2)", nullable: false), CureTemperatureF = table.Column(type: "decimal(18,2)", nullable: true), CycleMinutes = table.Column(type: "int", nullable: false), PrimaryColorName = table.Column(type: "nvarchar(max)", nullable: true), PrimaryColorCode = table.Column(type: "nvarchar(max)", nullable: true), AiSuggested = table.Column(type: "bit", nullable: false), AiReasoningJson = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_OvenBatches", x => x.Id); table.ForeignKey( name: "FK_OvenBatches_Equipment_EquipmentId", column: x => x.EquipmentId, principalTable: "Equipment", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_OvenBatches_OvenCosts_OvenCostId", column: x => x.OvenCostId, principalTable: "OvenCosts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "Customers", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CompanyName = table.Column(type: "nvarchar(450)", nullable: true), ContactFirstName = table.Column(type: "nvarchar(max)", nullable: true), ContactLastName = table.Column(type: "nvarchar(max)", nullable: true), Email = table.Column(type: "nvarchar(450)", nullable: true), BillingEmail = table.Column(type: "nvarchar(max)", nullable: true), Phone = table.Column(type: "nvarchar(max)", nullable: true), MobilePhone = table.Column(type: "nvarchar(max)", nullable: true), Address = table.Column(type: "nvarchar(max)", nullable: true), City = table.Column(type: "nvarchar(max)", nullable: true), State = table.Column(type: "nvarchar(max)", nullable: true), ZipCode = table.Column(type: "nvarchar(max)", nullable: true), Country = table.Column(type: "nvarchar(max)", nullable: true), IsCommercial = table.Column(type: "bit", nullable: false), TaxId = table.Column(type: "nvarchar(max)", nullable: true), CreditLimit = table.Column(type: "decimal(18,2)", nullable: false), CurrentBalance = table.Column(type: "decimal(18,2)", nullable: false), CreditBalance = table.Column(type: "decimal(18,2)", nullable: false), PaymentTerms = table.Column(type: "nvarchar(max)", nullable: true), PricingTierId = table.Column(type: "int", nullable: true), IsTaxExempt = table.Column(type: "bit", nullable: false), TaxExemptCertificateData = table.Column(type: "varbinary(max)", nullable: true), TaxExemptCertificateContentType = table.Column(type: "nvarchar(max)", nullable: true), TaxExemptCertificateFileName = table.Column(type: "nvarchar(max)", nullable: true), GeneralNotes = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), LastContactDate = table.Column(type: "datetime2", nullable: true), NotifyByEmail = table.Column(type: "bit", nullable: false), NotifyBySms = table.Column(type: "bit", nullable: false), UnsubscribeToken = table.Column(type: "nvarchar(450)", nullable: false, defaultValueSql: "REPLACE(NEWID(),'-','')"), SmsConsentedAt = table.Column(type: "datetime2", nullable: true), SmsConsentMethod = table.Column(type: "nvarchar(max)", nullable: true), SmsOptedOutAt = table.Column(type: "datetime2", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Customers", x => x.Id); table.ForeignKey( name: "FK_Customers_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Customers_PricingTiers_PricingTierId", column: x => x.PricingTierId, principalTable: "PricingTiers", principalColumn: "Id", onDelete: ReferentialAction.SetNull); }); migrationBuilder.CreateTable( name: "Bills", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), BillNumber = table.Column(type: "nvarchar(max)", nullable: false), VendorInvoiceNumber = table.Column(type: "nvarchar(max)", nullable: true), VendorId = table.Column(type: "int", nullable: false), APAccountId = table.Column(type: "int", nullable: false), BillDate = table.Column(type: "datetime2", nullable: false), DueDate = table.Column(type: "datetime2", nullable: true), Status = table.Column(type: "int", nullable: false), Terms = table.Column(type: "nvarchar(max)", nullable: true), Memo = table.Column(type: "nvarchar(max)", nullable: true), SubTotal = table.Column(type: "decimal(18,2)", nullable: false), TaxPercent = table.Column(type: "decimal(18,2)", nullable: false), TaxAmount = table.Column(type: "decimal(18,2)", nullable: false), Total = table.Column(type: "decimal(18,2)", nullable: false), AmountPaid = table.Column(type: "decimal(18,2)", nullable: false), ReceiptFilePath = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Bills", x => x.Id); table.ForeignKey( name: "FK_Bills_Accounts_APAccountId", column: x => x.APAccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Bills_Vendors_VendorId", column: x => x.VendorId, principalTable: "Vendors", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "InventoryItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), SKU = table.Column(type: "nvarchar(450)", nullable: false), Name = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), InventoryCategoryId = table.Column(type: "int", nullable: true), Category = table.Column(type: "nvarchar(max)", nullable: false), ColorName = table.Column(type: "nvarchar(max)", nullable: true), ColorCode = table.Column(type: "nvarchar(max)", nullable: true), Finish = table.Column(type: "nvarchar(max)", nullable: true), Manufacturer = table.Column(type: "nvarchar(max)", nullable: true), ManufacturerPartNumber = table.Column(type: "nvarchar(max)", nullable: true), CoverageSqFtPerLb = table.Column(type: "decimal(18,2)", nullable: true), SpecificGravity = table.Column(type: "decimal(18,2)", nullable: true), TransferEfficiency = table.Column(type: "decimal(18,2)", nullable: true), CureTemperatureF = table.Column(type: "decimal(18,2)", nullable: true), CureTimeMinutes = table.Column(type: "int", nullable: true), ColorFamilies = table.Column(type: "nvarchar(max)", nullable: true), RequiresClearCoat = table.Column(type: "bit", nullable: false), SpecPageUrl = table.Column(type: "nvarchar(max)", nullable: true), ImageUrl = table.Column(type: "nvarchar(max)", nullable: true), SdsUrl = table.Column(type: "nvarchar(max)", nullable: true), TdsUrl = table.Column(type: "nvarchar(max)", nullable: true), HasSamplePanel = table.Column(type: "bit", nullable: false), QuantityOnHand = table.Column(type: "decimal(18,2)", nullable: false), UnitOfMeasure = table.Column(type: "nvarchar(max)", nullable: false), ReorderPoint = table.Column(type: "decimal(18,2)", nullable: false), ReorderQuantity = table.Column(type: "decimal(18,2)", nullable: false), MinimumStock = table.Column(type: "decimal(18,2)", nullable: false), MaximumStock = table.Column(type: "decimal(18,2)", nullable: false), UnitCost = table.Column(type: "decimal(18,2)", nullable: false), AverageCost = table.Column(type: "decimal(18,2)", nullable: false), LastPurchasePrice = table.Column(type: "decimal(18,2)", nullable: false), LastPurchaseDate = table.Column(type: "datetime2", nullable: true), PrimaryVendorId = table.Column(type: "int", nullable: true), VendorPartNumber = table.Column(type: "nvarchar(max)", nullable: true), Location = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), DiscontinuedDate = table.Column(type: "datetime2", nullable: true), IsIncoming = table.Column(type: "bit", nullable: false), InventoryAccountId = table.Column(type: "int", nullable: true), CogsAccountId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_InventoryItems", x => x.Id); table.ForeignKey( name: "FK_InventoryItems_Accounts_CogsAccountId", column: x => x.CogsAccountId, principalTable: "Accounts", principalColumn: "Id"); table.ForeignKey( name: "FK_InventoryItems_Accounts_InventoryAccountId", column: x => x.InventoryAccountId, principalTable: "Accounts", principalColumn: "Id"); table.ForeignKey( name: "FK_InventoryItems_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_InventoryItems_InventoryCategoryLookups_InventoryCategoryId", column: x => x.InventoryCategoryId, principalTable: "InventoryCategoryLookups", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_InventoryItems_Vendors_PrimaryVendorId", column: x => x.PrimaryVendorId, principalTable: "Vendors", principalColumn: "Id", onDelete: ReferentialAction.SetNull); }); migrationBuilder.CreateTable( name: "VendorCredits", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CreditNumber = table.Column(type: "nvarchar(max)", nullable: false), VendorId = table.Column(type: "int", nullable: false), APAccountId = table.Column(type: "int", nullable: false), CreditDate = table.Column(type: "datetime2", nullable: false), Status = table.Column(type: "int", nullable: false), Total = table.Column(type: "decimal(18,2)", nullable: false), RemainingAmount = table.Column(type: "decimal(18,2)", nullable: false), Memo = table.Column(type: "nvarchar(max)", nullable: true), PostedDate = table.Column(type: "datetime2", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_VendorCredits", x => x.Id); table.ForeignKey( name: "FK_VendorCredits_Accounts_APAccountId", column: x => x.APAccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_VendorCredits_Vendors_VendorId", column: x => x.VendorId, principalTable: "Vendors", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "CustomerNotes", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CustomerId = table.Column(type: "int", nullable: false), Note = table.Column(type: "nvarchar(max)", nullable: false), IsImportant = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_CustomerNotes", x => x.Id); table.ForeignKey( name: "FK_CustomerNotes_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "GiftCertificates", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CertificateCode = table.Column(type: "nvarchar(450)", nullable: false), OriginalAmount = table.Column(type: "decimal(18,2)", nullable: false), RedeemedAmount = table.Column(type: "decimal(18,2)", nullable: false), RecipientCustomerId = table.Column(type: "int", nullable: true), RecipientName = table.Column(type: "nvarchar(max)", nullable: true), RecipientEmail = table.Column(type: "nvarchar(max)", nullable: true), IssuedReason = table.Column(type: "int", nullable: false), PurchasePrice = table.Column(type: "decimal(18,2)", nullable: true), PurchasingCustomerId = table.Column(type: "int", nullable: true), Status = table.Column(type: "int", nullable: false), IssueDate = table.Column(type: "datetime2", nullable: false), ExpiryDate = table.Column(type: "datetime2", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), IssuedById = table.Column(type: "nvarchar(450)", nullable: true), SourceInvoiceItemId = table.Column(type: "int", nullable: true), BatchId = table.Column(type: "uniqueidentifier", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_GiftCertificates", x => x.Id); table.ForeignKey( name: "FK_GiftCertificates_AspNetUsers_IssuedById", column: x => x.IssuedById, principalTable: "AspNetUsers", principalColumn: "Id"); table.ForeignKey( name: "FK_GiftCertificates_Customers_PurchasingCustomerId", column: x => x.PurchasingCustomerId, principalTable: "Customers", principalColumn: "Id"); table.ForeignKey( name: "FK_GiftCertificates_Customers_RecipientCustomerId", column: x => x.RecipientCustomerId, principalTable: "Customers", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "JobTemplates", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Name = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), CustomerId = table.Column(type: "int", nullable: true), SpecialInstructions = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false), UsageCount = table.Column(type: "int", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobTemplates", x => x.Id); table.ForeignKey( name: "FK_JobTemplates_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "Quotes", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), QuoteNumber = table.Column(type: "nvarchar(450)", nullable: false), CustomerId = table.Column(type: "int", nullable: true), PreparedById = table.Column(type: "nvarchar(450)", nullable: true), ProspectCompanyName = table.Column(type: "nvarchar(max)", nullable: true), ProspectContactName = table.Column(type: "nvarchar(max)", nullable: true), ProspectEmail = table.Column(type: "nvarchar(max)", nullable: true), ProspectPhone = table.Column(type: "nvarchar(max)", nullable: true), ProspectAddress = table.Column(type: "nvarchar(max)", nullable: true), ProspectCity = table.Column(type: "nvarchar(max)", nullable: true), ProspectState = table.Column(type: "nvarchar(max)", nullable: true), ProspectZipCode = table.Column(type: "nvarchar(max)", nullable: true), ProspectSmsConsent = table.Column(type: "bit", nullable: false), ProspectSmsConsentedAt = table.Column(type: "datetime2", nullable: true), QuoteStatusId = table.Column(type: "int", nullable: false), OvenCostId = table.Column(type: "int", nullable: true), OvenBatches = table.Column(type: "int", nullable: false), OvenCycleMinutes = table.Column(type: "int", nullable: true), IsCommercial = table.Column(type: "bit", nullable: false), IsRushJob = table.Column(type: "bit", nullable: false), QuoteDate = table.Column(type: "datetime2", nullable: false), ExpirationDate = table.Column(type: "datetime2", nullable: true), SentDate = table.Column(type: "datetime2", nullable: true), ApprovedDate = table.Column(type: "datetime2", nullable: true), MaterialCosts = table.Column(type: "decimal(18,2)", nullable: false), LaborCosts = table.Column(type: "decimal(18,2)", nullable: false), EquipmentCosts = table.Column(type: "decimal(18,2)", nullable: false), ItemsSubtotal = table.Column(type: "decimal(18,2)", nullable: false), OvenBatchCost = table.Column(type: "decimal(18,2)", nullable: false), FacilityOverheadCost = table.Column(type: "decimal(18,2)", nullable: false), FacilityOverheadRatePerHour = table.Column(type: "decimal(18,2)", nullable: false), ShopSuppliesAmount = table.Column(type: "decimal(18,2)", nullable: false), ShopSuppliesPercent = table.Column(type: "decimal(18,2)", nullable: false), OverheadAmount = table.Column(type: "decimal(18,2)", nullable: false), OverheadPercent = table.Column(type: "decimal(18,2)", nullable: false), ProfitMargin = table.Column(type: "decimal(18,2)", nullable: false), ProfitPercent = table.Column(type: "decimal(18,2)", nullable: false), SubTotal = table.Column(type: "decimal(18,2)", nullable: false), DiscountType = table.Column(type: "int", nullable: false), DiscountValue = table.Column(type: "decimal(18,2)", nullable: false), PricingTierDiscountAmount = table.Column(type: "decimal(18,2)", nullable: false), PricingTierDiscountPercent = table.Column(type: "decimal(18,2)", nullable: false), QuoteDiscountAmount = table.Column(type: "decimal(18,2)", nullable: false), QuoteDiscountPercent = table.Column(type: "decimal(18,2)", nullable: false), DiscountPercent = table.Column(type: "decimal(18,2)", nullable: false), DiscountAmount = table.Column(type: "decimal(18,2)", nullable: false), DiscountReason = table.Column(type: "nvarchar(max)", nullable: true), HideDiscountFromCustomer = table.Column(type: "bit", nullable: false), SubtotalAfterDiscount = table.Column(type: "decimal(18,2)", nullable: false), TaxPercent = table.Column(type: "decimal(18,2)", nullable: false), TaxAmount = table.Column(type: "decimal(18,2)", nullable: false), RushFee = table.Column(type: "decimal(18,2)", nullable: false), Total = table.Column(type: "decimal(18,2)", nullable: false), RequiresDeposit = table.Column(type: "bit", nullable: false), DepositPercent = table.Column(type: "decimal(18,2)", nullable: false), DepositPaymentLinkToken = table.Column(type: "nvarchar(max)", nullable: true), DepositPaymentLinkExpiresAt = table.Column(type: "datetime2", nullable: true), DepositAmountPaid = table.Column(type: "decimal(18,2)", nullable: false), DepositPaymentIntentId = table.Column(type: "nvarchar(max)", nullable: true), Description = table.Column(type: "nvarchar(max)", nullable: true), Terms = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), CustomerPO = table.Column(type: "nvarchar(max)", nullable: true), Tags = table.Column(type: "nvarchar(max)", nullable: true), ConvertedToJobId = table.Column(type: "int", nullable: true), ConvertedDate = table.Column(type: "datetime2", nullable: true), ApprovalToken = table.Column(type: "nvarchar(450)", nullable: true), ApprovalTokenExpiresAt = table.Column(type: "datetime2", nullable: true), ApprovalTokenUsedAt = table.Column(type: "datetime2", nullable: true), DeclineReason = table.Column(type: "nvarchar(max)", nullable: true), DeclinedByIp = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Quotes", x => x.Id); table.ForeignKey( name: "FK_Quotes_AspNetUsers_PreparedById", column: x => x.PreparedById, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_Quotes_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Quotes_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Quotes_OvenCosts_OvenCostId", column: x => x.OvenCostId, principalTable: "OvenCosts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Quotes_QuoteStatusLookups_QuoteStatusId", column: x => x.QuoteStatusId, principalTable: "QuoteStatusLookups", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "BillPayments", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), PaymentNumber = table.Column(type: "nvarchar(max)", nullable: false), BillId = table.Column(type: "int", nullable: false), VendorId = table.Column(type: "int", nullable: false), BankAccountId = table.Column(type: "int", nullable: false), PaymentDate = table.Column(type: "datetime2", nullable: false), Amount = table.Column(type: "decimal(18,2)", nullable: false), PaymentMethod = table.Column(type: "int", nullable: false), CheckNumber = table.Column(type: "nvarchar(max)", nullable: true), Memo = table.Column(type: "nvarchar(max)", nullable: true), IsCleared = table.Column(type: "bit", nullable: false), ClearedDate = table.Column(type: "datetime2", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_BillPayments", x => x.Id); table.ForeignKey( name: "FK_BillPayments_Accounts_BankAccountId", column: x => x.BankAccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_BillPayments_Bills_BillId", column: x => x.BillId, principalTable: "Bills", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_BillPayments_Vendors_VendorId", column: x => x.VendorId, principalTable: "Vendors", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "PurchaseOrders", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), PoNumber = table.Column(type: "nvarchar(max)", nullable: false), VendorId = table.Column(type: "int", nullable: false), Status = table.Column(type: "int", nullable: false), OrderDate = table.Column(type: "datetime2", nullable: false), ExpectedDeliveryDate = table.Column(type: "datetime2", nullable: true), ReceivedDate = table.Column(type: "datetime2", nullable: true), ShippingCost = table.Column(type: "decimal(18,2)", nullable: false), SubTotal = table.Column(type: "decimal(18,2)", nullable: false), TotalAmount = table.Column(type: "decimal(18,2)", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), InternalNotes = table.Column(type: "nvarchar(max)", nullable: true), BillId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_PurchaseOrders", x => x.Id); table.ForeignKey( name: "FK_PurchaseOrders_Bills_BillId", column: x => x.BillId, principalTable: "Bills", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_PurchaseOrders_Vendors_VendorId", column: x => x.VendorId, principalTable: "Vendors", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "CatalogItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Name = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), SKU = table.Column(type: "nvarchar(max)", nullable: true), CategoryId = table.Column(type: "int", nullable: false), DefaultPrice = table.Column(type: "decimal(18,2)", nullable: false), DefaultRequiresSandblasting = table.Column(type: "bit", nullable: false), DefaultRequiresMasking = table.Column(type: "bit", nullable: false), DefaultEstimatedMinutes = table.Column(type: "int", nullable: true), ApproximateArea = table.Column(type: "decimal(18,2)", nullable: true), DisplayOrder = table.Column(type: "int", nullable: false), IsActive = table.Column(type: "bit", nullable: false), IsMerchandise = table.Column(type: "bit", nullable: false), InventoryItemId = table.Column(type: "int", nullable: true), RevenueAccountId = table.Column(type: "int", nullable: true), CogsAccountId = table.Column(type: "int", nullable: true), ImagePath = table.Column(type: "nvarchar(max)", nullable: true), ThumbnailPath = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_CatalogItems", x => x.Id); table.ForeignKey( name: "FK_CatalogItems_Accounts_CogsAccountId", column: x => x.CogsAccountId, principalTable: "Accounts", principalColumn: "Id"); table.ForeignKey( name: "FK_CatalogItems_Accounts_RevenueAccountId", column: x => x.RevenueAccountId, principalTable: "Accounts", principalColumn: "Id"); table.ForeignKey( name: "FK_CatalogItems_CatalogCategories_CategoryId", column: x => x.CategoryId, principalTable: "CatalogCategories", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_CatalogItems_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_CatalogItems_InventoryItems_InventoryItemId", column: x => x.InventoryItemId, principalTable: "InventoryItems", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "VendorCreditApplications", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), VendorCreditId = table.Column(type: "int", nullable: false), BillId = table.Column(type: "int", nullable: false), Amount = table.Column(type: "decimal(18,2)", nullable: false), AppliedDate = table.Column(type: "datetime2", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_VendorCreditApplications", x => x.Id); table.ForeignKey( name: "FK_VendorCreditApplications_Bills_BillId", column: x => x.BillId, principalTable: "Bills", principalColumn: "Id"); table.ForeignKey( name: "FK_VendorCreditApplications_VendorCredits_VendorCreditId", column: x => x.VendorCreditId, principalTable: "VendorCredits", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "VendorCreditLineItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), VendorCreditId = table.Column(type: "int", nullable: false), AccountId = table.Column(type: "int", nullable: true), Description = table.Column(type: "nvarchar(max)", nullable: false), Amount = table.Column(type: "decimal(18,2)", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_VendorCreditLineItems", x => x.Id); table.ForeignKey( name: "FK_VendorCreditLineItems_Accounts_AccountId", column: x => x.AccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_VendorCreditLineItems_VendorCredits_VendorCreditId", column: x => x.VendorCreditId, principalTable: "VendorCredits", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "Jobs", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobNumber = table.Column(type: "nvarchar(450)", nullable: false), CustomerId = table.Column(type: "int", nullable: false), QuoteId = table.Column(type: "int", nullable: true), AssignedUserId = table.Column(type: "nvarchar(450)", nullable: true), Description = table.Column(type: "nvarchar(max)", nullable: false), JobStatusId = table.Column(type: "int", nullable: false), JobPriorityId = table.Column(type: "int", nullable: false), ScheduledDate = table.Column(type: "datetime2", nullable: true), StartedDate = table.Column(type: "datetime2", nullable: true), CompletedDate = table.Column(type: "datetime2", nullable: true), DueDate = table.Column(type: "datetime2", nullable: true), OvenCostId = table.Column(type: "int", nullable: true), OvenBatches = table.Column(type: "int", nullable: false), OvenCycleMinutes = table.Column(type: "int", nullable: true), QuotedPrice = table.Column(type: "decimal(18,2)", nullable: false), FinalPrice = table.Column(type: "decimal(18,2)", nullable: false), OvenBatchCost = table.Column(type: "decimal(18,2)", nullable: false), ShopSuppliesAmount = table.Column(type: "decimal(18,2)", nullable: false), ShopSuppliesPercent = table.Column(type: "decimal(18,2)", nullable: false), IsRushJob = table.Column(type: "bit", nullable: false), DiscountType = table.Column(type: "int", nullable: false), DiscountValue = table.Column(type: "decimal(18,2)", nullable: false), DiscountReason = table.Column(type: "nvarchar(max)", nullable: true), ActualTimeSpentHours = table.Column(type: "decimal(18,2)", nullable: true), CustomerPO = table.Column(type: "nvarchar(max)", nullable: true), SpecialInstructions = table.Column(type: "nvarchar(max)", nullable: true), InternalNotes = table.Column(type: "nvarchar(max)", nullable: true), Tags = table.Column(type: "nvarchar(max)", nullable: true), RequiresCustomerApproval = table.Column(type: "bit", nullable: false), IsCustomerApproved = table.Column(type: "bit", nullable: false), ShopAccessCode = table.Column(type: "uniqueidentifier", nullable: false, defaultValueSql: "NEWID()"), IntakeDate = table.Column(type: "datetime2", nullable: true), IntakeConditionNotes = table.Column(type: "nvarchar(max)", nullable: true), IntakePartCount = table.Column(type: "int", nullable: true), IntakeCheckedByUserId = table.Column(type: "nvarchar(450)", nullable: true), QuoteSnapshotUpdatedAt = table.Column(type: "datetime2", nullable: true), PricingBreakdownJson = table.Column(type: "nvarchar(max)", nullable: true), IsReworkJob = table.Column(type: "bit", nullable: false), OriginalJobId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Jobs", x => x.Id); table.ForeignKey( name: "FK_Jobs_AspNetUsers_AssignedUserId", column: x => x.AssignedUserId, principalTable: "AspNetUsers", principalColumn: "Id"); table.ForeignKey( name: "FK_Jobs_AspNetUsers_IntakeCheckedByUserId", column: x => x.IntakeCheckedByUserId, principalTable: "AspNetUsers", principalColumn: "Id"); table.ForeignKey( name: "FK_Jobs_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Jobs_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Jobs_JobPriorityLookups_JobPriorityId", column: x => x.JobPriorityId, principalTable: "JobPriorityLookups", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Jobs_JobStatusLookups_JobStatusId", column: x => x.JobStatusId, principalTable: "JobStatusLookups", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Jobs_Jobs_OriginalJobId", column: x => x.OriginalJobId, principalTable: "Jobs", principalColumn: "Id"); table.ForeignKey( name: "FK_Jobs_OvenCosts_OvenCostId", column: x => x.OvenCostId, principalTable: "OvenCosts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Jobs_Quotes_QuoteId", column: x => x.QuoteId, principalTable: "Quotes", principalColumn: "Id", onDelete: ReferentialAction.SetNull); }); migrationBuilder.CreateTable( name: "QuoteChangeHistories", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), QuoteId = table.Column(type: "int", nullable: false), ChangedByUserId = table.Column(type: "nvarchar(450)", nullable: true), ChangedAt = table.Column(type: "datetime2", nullable: false), FieldName = table.Column(type: "nvarchar(max)", nullable: false), OldValue = table.Column(type: "nvarchar(max)", nullable: true), NewValue = table.Column(type: "nvarchar(max)", nullable: true), ChangeDescription = table.Column(type: "nvarchar(max)", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_QuoteChangeHistories", x => x.Id); table.ForeignKey( name: "FK_QuoteChangeHistories_AspNetUsers_ChangedByUserId", column: x => x.ChangedByUserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_QuoteChangeHistories_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_QuoteChangeHistories_Quotes_QuoteId", column: x => x.QuoteId, principalTable: "Quotes", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "QuotePhotos", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), QuoteId = table.Column(type: "int", nullable: true), TempId = table.Column(type: "nvarchar(max)", nullable: false), FilePath = table.Column(type: "nvarchar(max)", nullable: false), FileName = table.Column(type: "nvarchar(max)", nullable: false), FileSize = table.Column(type: "bigint", nullable: false), ContentType = table.Column(type: "nvarchar(max)", nullable: false), Caption = table.Column(type: "nvarchar(max)", nullable: true), IsAiAnalysisPhoto = table.Column(type: "bit", nullable: false), UploadedById = table.Column(type: "nvarchar(450)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_QuotePhotos", x => x.Id); table.ForeignKey( name: "FK_QuotePhotos_AspNetUsers_UploadedById", column: x => x.UploadedById, principalTable: "AspNetUsers", principalColumn: "Id"); table.ForeignKey( name: "FK_QuotePhotos_Quotes_QuoteId", column: x => x.QuoteId, principalTable: "Quotes", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "QuotePrepServices", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), QuoteId = table.Column(type: "int", nullable: false), PrepServiceId = table.Column(type: "int", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_QuotePrepServices", x => x.Id); table.ForeignKey( name: "FK_QuotePrepServices_PrepServices_PrepServiceId", column: x => x.PrepServiceId, principalTable: "PrepServices", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_QuotePrepServices_Quotes_QuoteId", column: x => x.QuoteId, principalTable: "Quotes", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "PurchaseOrderItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), PurchaseOrderId = table.Column(type: "int", nullable: false), InventoryItemId = table.Column(type: "int", nullable: true), Description = table.Column(type: "nvarchar(max)", nullable: true), UnitOfMeasure = table.Column(type: "nvarchar(max)", nullable: true), QuantityOrdered = table.Column(type: "decimal(18,2)", nullable: false), QuantityReceived = table.Column(type: "decimal(18,2)", nullable: false), UnitCost = table.Column(type: "decimal(18,2)", nullable: false), LineTotal = table.Column(type: "decimal(18,2)", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_PurchaseOrderItems", x => x.Id); table.ForeignKey( name: "FK_PurchaseOrderItems_InventoryItems_InventoryItemId", column: x => x.InventoryItemId, principalTable: "InventoryItems", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_PurchaseOrderItems_PurchaseOrders_PurchaseOrderId", column: x => x.PurchaseOrderId, principalTable: "PurchaseOrders", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "JobTemplateItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobTemplateId = table.Column(type: "int", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: false), Quantity = table.Column(type: "decimal(18,2)", nullable: false), SurfaceAreaSqFt = table.Column(type: "decimal(18,2)", nullable: false), CatalogItemId = table.Column(type: "int", nullable: true), IsGenericItem = table.Column(type: "bit", nullable: false), IsLaborItem = table.Column(type: "bit", nullable: false), IsSalesItem = table.Column(type: "bit", nullable: false), Sku = table.Column(type: "nvarchar(max)", nullable: true), ManualUnitPrice = table.Column(type: "decimal(18,2)", nullable: true), RequiresSandblasting = table.Column(type: "bit", nullable: false), RequiresMasking = table.Column(type: "bit", nullable: false), IncludePrepCost = table.Column(type: "bit", nullable: false), EstimatedMinutes = table.Column(type: "int", nullable: false), Complexity = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), DisplayOrder = table.Column(type: "int", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobTemplateItems", x => x.Id); table.ForeignKey( name: "FK_JobTemplateItems_CatalogItems_CatalogItemId", column: x => x.CatalogItemId, principalTable: "CatalogItems", principalColumn: "Id"); table.ForeignKey( name: "FK_JobTemplateItems_JobTemplates_JobTemplateId", column: x => x.JobTemplateId, principalTable: "JobTemplates", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "QuoteItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), QuoteId = table.Column(type: "int", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: false), Quantity = table.Column(type: "decimal(18,2)", nullable: false), SurfaceArea = table.Column(type: "decimal(18,2)", nullable: true), SurfaceAreaSqFt = table.Column(type: "decimal(18,2)", nullable: false), CatalogItemId = table.Column(type: "int", nullable: true), UnitPrice = table.Column(type: "decimal(18,2)", nullable: false), TotalPrice = table.Column(type: "decimal(18,2)", nullable: false), ItemMaterialCost = table.Column(type: "decimal(18,2)", nullable: false), ItemLaborCost = table.Column(type: "decimal(18,2)", nullable: false), ItemEquipmentCost = table.Column(type: "decimal(18,2)", nullable: false), IsGenericItem = table.Column(type: "bit", nullable: false), ManualUnitPrice = table.Column(type: "decimal(18,2)", nullable: true), PowderCostOverride = table.Column(type: "decimal(18,2)", nullable: true), IsLaborItem = table.Column(type: "bit", nullable: false), IsSalesItem = table.Column(type: "bit", nullable: false), Sku = table.Column(type: "nvarchar(max)", nullable: true), RequiresSandblasting = table.Column(type: "bit", nullable: false), RequiresMasking = table.Column(type: "bit", nullable: false), EstimatedMinutes = table.Column(type: "int", nullable: false), IncludePrepCost = table.Column(type: "bit", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), Complexity = table.Column(type: "nvarchar(max)", nullable: true), IsAiItem = table.Column(type: "bit", nullable: false), AiTags = table.Column(type: "nvarchar(max)", nullable: true), AiPredictionId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_QuoteItems", x => x.Id); table.ForeignKey( name: "FK_QuoteItems_AiItemPredictions_AiPredictionId", column: x => x.AiPredictionId, principalTable: "AiItemPredictions", principalColumn: "Id"); table.ForeignKey( name: "FK_QuoteItems_CatalogItems_CatalogItemId", column: x => x.CatalogItemId, principalTable: "CatalogItems", principalColumn: "Id"); table.ForeignKey( name: "FK_QuoteItems_Quotes_QuoteId", column: x => x.QuoteId, principalTable: "Quotes", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "Appointments", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), AppointmentNumber = table.Column(type: "nvarchar(max)", nullable: false), Title = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: true), CustomerId = table.Column(type: "int", nullable: true), JobId = table.Column(type: "int", nullable: true), AppointmentStatusId = table.Column(type: "int", nullable: false), AppointmentTypeId = table.Column(type: "int", nullable: false), AssignedUserId = table.Column(type: "nvarchar(450)", nullable: true), ScheduledStartTime = table.Column(type: "datetime2", nullable: false), ScheduledEndTime = table.Column(type: "datetime2", nullable: false), IsAllDay = table.Column(type: "bit", nullable: false), ActualStartTime = table.Column(type: "datetime2", nullable: true), ActualEndTime = table.Column(type: "datetime2", nullable: true), Location = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), IsReminderEnabled = table.Column(type: "bit", nullable: false), ReminderMinutesBefore = table.Column(type: "int", nullable: false), ReminderSentAt = table.Column(type: "datetime2", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Appointments", x => x.Id); table.ForeignKey( name: "FK_Appointments_AppointmentStatusLookups_AppointmentStatusId", column: x => x.AppointmentStatusId, principalTable: "AppointmentStatusLookups", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_Appointments_AppointmentTypeLookups_AppointmentTypeId", column: x => x.AppointmentTypeId, principalTable: "AppointmentTypeLookups", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_Appointments_AspNetUsers_AssignedUserId", column: x => x.AssignedUserId, principalTable: "AspNetUsers", principalColumn: "Id"); table.ForeignKey( name: "FK_Appointments_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id"); table.ForeignKey( name: "FK_Appointments_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "BillLineItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), BillId = table.Column(type: "int", nullable: false), AccountId = table.Column(type: "int", nullable: true), JobId = table.Column(type: "int", nullable: true), Description = table.Column(type: "nvarchar(max)", nullable: false), Quantity = table.Column(type: "decimal(18,2)", nullable: false), UnitPrice = table.Column(type: "decimal(18,2)", nullable: false), Amount = table.Column(type: "decimal(18,2)", nullable: false), DisplayOrder = table.Column(type: "int", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_BillLineItems", x => x.Id); table.ForeignKey( name: "FK_BillLineItems_Accounts_AccountId", column: x => x.AccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_BillLineItems_Bills_BillId", column: x => x.BillId, principalTable: "Bills", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_BillLineItems_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "Expenses", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), ExpenseNumber = table.Column(type: "nvarchar(max)", nullable: false), Date = table.Column(type: "datetime2", nullable: false), VendorId = table.Column(type: "int", nullable: true), ExpenseAccountId = table.Column(type: "int", nullable: false), PaymentAccountId = table.Column(type: "int", nullable: false), JobId = table.Column(type: "int", nullable: true), PaymentMethod = table.Column(type: "int", nullable: false), Amount = table.Column(type: "decimal(18,2)", nullable: false), Memo = table.Column(type: "nvarchar(max)", nullable: true), ReceiptFilePath = table.Column(type: "nvarchar(max)", nullable: true), IsCleared = table.Column(type: "bit", nullable: false), ClearedDate = table.Column(type: "datetime2", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Expenses", x => x.Id); table.ForeignKey( name: "FK_Expenses_Accounts_ExpenseAccountId", column: x => x.ExpenseAccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Expenses_Accounts_PaymentAccountId", column: x => x.PaymentAccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Expenses_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id"); table.ForeignKey( name: "FK_Expenses_Vendors_VendorId", column: x => x.VendorId, principalTable: "Vendors", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "InventoryTransactions", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), InventoryItemId = table.Column(type: "int", nullable: false), TransactionType = table.Column(type: "int", nullable: false), Quantity = table.Column(type: "decimal(18,2)", nullable: false), UnitCost = table.Column(type: "decimal(18,2)", nullable: false), TotalCost = table.Column(type: "decimal(18,2)", nullable: false), TransactionDate = table.Column(type: "datetime2", nullable: false), Reference = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), BalanceAfter = table.Column(type: "decimal(18,2)", nullable: false), PurchaseOrderId = table.Column(type: "int", nullable: true), JobId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_InventoryTransactions", x => x.Id); table.ForeignKey( name: "FK_InventoryTransactions_InventoryItems_InventoryItemId", column: x => x.InventoryItemId, principalTable: "InventoryItems", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_InventoryTransactions_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id"); table.ForeignKey( name: "FK_InventoryTransactions_PurchaseOrders_PurchaseOrderId", column: x => x.PurchaseOrderId, principalTable: "PurchaseOrders", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "Invoices", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), InvoiceNumber = table.Column(type: "nvarchar(450)", nullable: false), JobId = table.Column(type: "int", nullable: true), CustomerId = table.Column(type: "int", nullable: false), PreparedById = table.Column(type: "nvarchar(450)", nullable: true), Status = table.Column(type: "int", nullable: false), InvoiceDate = table.Column(type: "datetime2", nullable: false), DueDate = table.Column(type: "datetime2", nullable: true), SentDate = table.Column(type: "datetime2", nullable: true), PaidDate = table.Column(type: "datetime2", nullable: true), SubTotal = table.Column(type: "decimal(18,2)", nullable: false), TaxPercent = table.Column(type: "decimal(18,2)", nullable: false), TaxAmount = table.Column(type: "decimal(18,2)", nullable: false), DiscountAmount = table.Column(type: "decimal(18,2)", nullable: false), Total = table.Column(type: "decimal(18,2)", nullable: false), AmountPaid = table.Column(type: "decimal(18,2)", nullable: false), CreditApplied = table.Column(type: "decimal(18,2)", nullable: false), GiftCertificateRedeemed = table.Column(type: "decimal(18,2)", nullable: false), PublicViewToken = table.Column(type: "nvarchar(max)", nullable: true), OnlinePaymentStatus = table.Column(type: "int", nullable: false), PaymentLinkToken = table.Column(type: "nvarchar(max)", nullable: true), PaymentLinkExpiresAt = table.Column(type: "datetime2", nullable: true), StripePaymentIntentId = table.Column(type: "nvarchar(max)", nullable: true), OnlineAmountPaid = table.Column(type: "decimal(18,2)", nullable: false), OnlineSurchargeCollected = table.Column(type: "decimal(18,2)", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), InternalNotes = table.Column(type: "nvarchar(max)", nullable: true), Terms = table.Column(type: "nvarchar(max)", nullable: true), CustomerPO = table.Column(type: "nvarchar(max)", nullable: true), EarlyPaymentDiscountPercent = table.Column(type: "decimal(18,2)", nullable: false), EarlyPaymentDiscountDays = table.Column(type: "int", nullable: false), ExternalReference = table.Column(type: "nvarchar(450)", nullable: true), SalesTaxAccountId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Invoices", x => x.Id); table.ForeignKey( name: "FK_Invoices_Accounts_SalesTaxAccountId", column: x => x.SalesTaxAccountId, principalTable: "Accounts", principalColumn: "Id"); table.ForeignKey( name: "FK_Invoices_AspNetUsers_PreparedById", column: x => x.PreparedById, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_Invoices_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Invoices_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Invoices_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "JobChangeHistories", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobId = table.Column(type: "int", nullable: false), ChangedByUserId = table.Column(type: "nvarchar(450)", nullable: true), ChangedAt = table.Column(type: "datetime2", nullable: false), FieldName = table.Column(type: "nvarchar(max)", nullable: false), OldValue = table.Column(type: "nvarchar(max)", nullable: true), NewValue = table.Column(type: "nvarchar(max)", nullable: true), ChangeDescription = table.Column(type: "nvarchar(max)", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobChangeHistories", x => x.Id); table.ForeignKey( name: "FK_JobChangeHistories_AspNetUsers_ChangedByUserId", column: x => x.ChangedByUserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_JobChangeHistories_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_JobChangeHistories_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "JobDailyPriorities", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobId = table.Column(type: "int", nullable: false), ScheduledDate = table.Column(type: "datetime2", nullable: false), DisplayOrder = table.Column(type: "int", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobDailyPriorities", x => x.Id); table.ForeignKey( name: "FK_JobDailyPriorities_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "JobItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobId = table.Column(type: "int", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: false), Quantity = table.Column(type: "decimal(18,2)", nullable: false), ColorName = table.Column(type: "nvarchar(max)", nullable: true), ColorCode = table.Column(type: "nvarchar(max)", nullable: true), Finish = table.Column(type: "nvarchar(max)", nullable: true), SurfaceArea = table.Column(type: "decimal(18,2)", nullable: true), SurfaceAreaSqFt = table.Column(type: "decimal(18,2)", nullable: false), CatalogItemId = table.Column(type: "int", nullable: true), UnitPrice = table.Column(type: "decimal(18,2)", nullable: false), TotalPrice = table.Column(type: "decimal(18,2)", nullable: false), LaborCost = table.Column(type: "decimal(18,2)", nullable: false), IsGenericItem = table.Column(type: "bit", nullable: false), ManualUnitPrice = table.Column(type: "decimal(18,2)", nullable: true), PowderCostOverride = table.Column(type: "decimal(18,2)", nullable: true), IsLaborItem = table.Column(type: "bit", nullable: false), IsSalesItem = table.Column(type: "bit", nullable: false), Sku = table.Column(type: "nvarchar(max)", nullable: true), IncludePrepCost = table.Column(type: "bit", nullable: false), RequiresSandblasting = table.Column(type: "bit", nullable: false), RequiresMasking = table.Column(type: "bit", nullable: false), EstimatedMinutes = table.Column(type: "int", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), Complexity = table.Column(type: "nvarchar(max)", nullable: true), IsAiItem = table.Column(type: "bit", nullable: false), AiTags = table.Column(type: "nvarchar(max)", nullable: true), AiPredictionId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobItems", x => x.Id); table.ForeignKey( name: "FK_JobItems_AiItemPredictions_AiPredictionId", column: x => x.AiPredictionId, principalTable: "AiItemPredictions", principalColumn: "Id"); table.ForeignKey( name: "FK_JobItems_CatalogItems_CatalogItemId", column: x => x.CatalogItemId, principalTable: "CatalogItems", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_JobItems_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "JobNotes", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobId = table.Column(type: "int", nullable: false), Note = table.Column(type: "nvarchar(max)", nullable: false), IsImportant = table.Column(type: "bit", nullable: false), IsInternal = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobNotes", x => x.Id); table.ForeignKey( name: "FK_JobNotes_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "JobPhotos", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobId = table.Column(type: "int", nullable: false), FilePath = table.Column(type: "nvarchar(max)", nullable: false), FileName = table.Column(type: "nvarchar(max)", nullable: false), FileSize = table.Column(type: "bigint", nullable: false), ContentType = table.Column(type: "nvarchar(max)", nullable: false), Caption = table.Column(type: "nvarchar(max)", nullable: true), PhotoType = table.Column(type: "int", nullable: false), DisplayOrder = table.Column(type: "int", nullable: false), UploadedById = table.Column(type: "nvarchar(450)", nullable: false), UploadedDate = table.Column(type: "datetime2", nullable: false), Tags = table.Column(type: "nvarchar(max)", nullable: true), IsAiAnalysisPhoto = table.Column(type: "bit", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobPhotos", x => x.Id); table.ForeignKey( name: "FK_JobPhotos_AspNetUsers_UploadedById", column: x => x.UploadedById, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_JobPhotos_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "JobPrepServices", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobId = table.Column(type: "int", nullable: false), PrepServiceId = table.Column(type: "int", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobPrepServices", x => x.Id); table.ForeignKey( name: "FK_JobPrepServices_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_JobPrepServices_PrepServices_PrepServiceId", column: x => x.PrepServiceId, principalTable: "PrepServices", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "JobStatusHistory", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobId = table.Column(type: "int", nullable: false), FromStatusId = table.Column(type: "int", nullable: false), ToStatusId = table.Column(type: "int", nullable: false), ChangedDate = table.Column(type: "datetime2", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobStatusHistory", x => x.Id); table.ForeignKey( name: "FK_JobStatusHistory_JobStatusLookups_FromStatusId", column: x => x.FromStatusId, principalTable: "JobStatusLookups", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_JobStatusHistory_JobStatusLookups_ToStatusId", column: x => x.ToStatusId, principalTable: "JobStatusLookups", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_JobStatusHistory_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "JobTimeEntries", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobId = table.Column(type: "int", nullable: false), UserId = table.Column(type: "nvarchar(max)", nullable: true), UserDisplayName = table.Column(type: "nvarchar(max)", nullable: true), WorkDate = table.Column(type: "datetime2", nullable: false), HoursWorked = table.Column(type: "decimal(18,2)", nullable: false), Stage = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobTimeEntries", x => x.Id); table.ForeignKey( name: "FK_JobTimeEntries_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "KioskSessions", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), SessionToken = table.Column(type: "uniqueidentifier", nullable: false), SessionType = table.Column(type: "int", nullable: false), Status = table.Column(type: "int", nullable: false), CustomerFirstName = table.Column(type: "nvarchar(max)", nullable: false), CustomerLastName = table.Column(type: "nvarchar(max)", nullable: false), CustomerPhone = table.Column(type: "nvarchar(max)", nullable: false), CustomerEmail = table.Column(type: "nvarchar(max)", nullable: false), IsReturningCustomer = table.Column(type: "bit", nullable: false), JobDescription = table.Column(type: "nvarchar(max)", nullable: false), HowDidYouHearAboutUs = table.Column(type: "nvarchar(max)", nullable: true), AgreedToTerms = table.Column(type: "bit", nullable: false), AgreedToTermsAt = table.Column(type: "datetime2", nullable: true), SmsOptIn = table.Column(type: "bit", nullable: false), SignatureDataBase64 = table.Column(type: "nvarchar(max)", nullable: true), LinkedCustomerId = table.Column(type: "int", nullable: true), LinkedJobId = table.Column(type: "int", nullable: true), LinkedQuoteId = table.Column(type: "int", nullable: true), SubmittedAt = table.Column(type: "datetime2", nullable: true), ExpiresAt = table.Column(type: "datetime2", nullable: false), RemoteLinkEmail = table.Column(type: "nvarchar(max)", nullable: true), RemoteLinkSentAt = table.Column(type: "datetime2", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_KioskSessions", x => x.Id); table.ForeignKey( name: "FK_KioskSessions_Customers_LinkedCustomerId", column: x => x.LinkedCustomerId, principalTable: "Customers", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_KioskSessions_Jobs_LinkedJobId", column: x => x.LinkedJobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.SetNull); }); migrationBuilder.CreateTable( name: "JobTemplateItemCoats", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobTemplateItemId = table.Column(type: "int", nullable: false), CoatName = table.Column(type: "nvarchar(max)", nullable: false), Sequence = table.Column(type: "int", nullable: false), InventoryItemId = table.Column(type: "int", nullable: true), ColorName = table.Column(type: "nvarchar(max)", nullable: true), VendorId = table.Column(type: "int", nullable: true), ColorCode = table.Column(type: "nvarchar(max)", nullable: true), Finish = table.Column(type: "nvarchar(max)", nullable: true), CoverageSqFtPerLb = table.Column(type: "decimal(18,2)", nullable: false), TransferEfficiency = table.Column(type: "decimal(18,2)", nullable: false), PowderCostPerLb = table.Column(type: "decimal(18,2)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobTemplateItemCoats", x => x.Id); table.ForeignKey( name: "FK_JobTemplateItemCoats_InventoryItems_InventoryItemId", column: x => x.InventoryItemId, principalTable: "InventoryItems", principalColumn: "Id"); table.ForeignKey( name: "FK_JobTemplateItemCoats_JobTemplateItems_JobTemplateItemId", column: x => x.JobTemplateItemId, principalTable: "JobTemplateItems", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_JobTemplateItemCoats_Vendors_VendorId", column: x => x.VendorId, principalTable: "Vendors", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "JobTemplateItemPrepServices", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobTemplateItemId = table.Column(type: "int", nullable: false), PrepServiceId = table.Column(type: "int", nullable: false), EstimatedMinutes = table.Column(type: "int", nullable: false), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobTemplateItemPrepServices", x => x.Id); table.ForeignKey( name: "FK_JobTemplateItemPrepServices_JobTemplateItems_JobTemplateItemId", column: x => x.JobTemplateItemId, principalTable: "JobTemplateItems", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_JobTemplateItemPrepServices_PrepServices_PrepServiceId", column: x => x.PrepServiceId, principalTable: "PrepServices", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "QuoteItemCoats", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), QuoteItemId = table.Column(type: "int", nullable: false), CoatName = table.Column(type: "nvarchar(max)", nullable: false), Sequence = table.Column(type: "int", nullable: false), InventoryItemId = table.Column(type: "int", nullable: true), ColorName = table.Column(type: "nvarchar(max)", nullable: true), VendorId = table.Column(type: "int", nullable: true), ColorCode = table.Column(type: "nvarchar(max)", nullable: true), Finish = table.Column(type: "nvarchar(max)", nullable: true), CoverageSqFtPerLb = table.Column(type: "decimal(18,2)", nullable: false), TransferEfficiency = table.Column(type: "decimal(18,2)", nullable: false), PowderCostPerLb = table.Column(type: "decimal(18,2)", nullable: true), PowderToOrder = table.Column(type: "decimal(18,2)", nullable: true), CoatMaterialCost = table.Column(type: "decimal(18,2)", nullable: false), CoatLaborCost = table.Column(type: "decimal(18,2)", nullable: false), CoatTotalCost = table.Column(type: "decimal(18,2)", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_QuoteItemCoats", x => x.Id); table.ForeignKey( name: "FK_QuoteItemCoats_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_QuoteItemCoats_InventoryItems_InventoryItemId", column: x => x.InventoryItemId, principalTable: "InventoryItems", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_QuoteItemCoats_QuoteItems_QuoteItemId", column: x => x.QuoteItemId, principalTable: "QuoteItems", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_QuoteItemCoats_Vendors_VendorId", column: x => x.VendorId, principalTable: "Vendors", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "QuoteItemPrepServices", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), QuoteItemId = table.Column(type: "int", nullable: false), PrepServiceId = table.Column(type: "int", nullable: false), EstimatedMinutes = table.Column(type: "int", nullable: false), BlastSetupId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_QuoteItemPrepServices", x => x.Id); table.ForeignKey( name: "FK_QuoteItemPrepServices_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_QuoteItemPrepServices_CompanyBlastSetups_BlastSetupId", column: x => x.BlastSetupId, principalTable: "CompanyBlastSetups", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_QuoteItemPrepServices_PrepServices_PrepServiceId", column: x => x.PrepServiceId, principalTable: "PrepServices", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_QuoteItemPrepServices_QuoteItems_QuoteItemId", column: x => x.QuoteItemId, principalTable: "QuoteItems", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "Deposits", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), ReceiptNumber = table.Column(type: "nvarchar(max)", nullable: false), CustomerId = table.Column(type: "int", nullable: false), JobId = table.Column(type: "int", nullable: true), QuoteId = table.Column(type: "int", nullable: true), Amount = table.Column(type: "decimal(18,2)", nullable: false), PaymentMethod = table.Column(type: "int", nullable: false), ReceivedDate = table.Column(type: "datetime2", nullable: false), Reference = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), RecordedById = table.Column(type: "nvarchar(450)", nullable: true), DepositAccountId = table.Column(type: "int", nullable: true), AppliedToInvoiceId = table.Column(type: "int", nullable: true), AppliedDate = table.Column(type: "datetime2", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Deposits", x => x.Id); table.ForeignKey( name: "FK_Deposits_AspNetUsers_RecordedById", column: x => x.RecordedById, principalTable: "AspNetUsers", principalColumn: "Id"); table.ForeignKey( name: "FK_Deposits_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_Deposits_Invoices_AppliedToInvoiceId", column: x => x.AppliedToInvoiceId, principalTable: "Invoices", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_Deposits_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id"); table.ForeignKey( name: "FK_Deposits_Quotes_QuoteId", column: x => x.QuoteId, principalTable: "Quotes", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "GiftCertificateRedemptions", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), GiftCertificateId = table.Column(type: "int", nullable: false), InvoiceId = table.Column(type: "int", nullable: false), AmountRedeemed = table.Column(type: "decimal(18,2)", nullable: false), RedeemedDate = table.Column(type: "datetime2", nullable: false), RedeemedById = table.Column(type: "nvarchar(450)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_GiftCertificateRedemptions", x => x.Id); table.ForeignKey( name: "FK_GiftCertificateRedemptions_AspNetUsers_RedeemedById", column: x => x.RedeemedById, principalTable: "AspNetUsers", principalColumn: "Id"); table.ForeignKey( name: "FK_GiftCertificateRedemptions_GiftCertificates_GiftCertificateId", column: x => x.GiftCertificateId, principalTable: "GiftCertificates", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_GiftCertificateRedemptions_Invoices_InvoiceId", column: x => x.InvoiceId, principalTable: "Invoices", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "InAppNotifications", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Title = table.Column(type: "nvarchar(max)", nullable: false), Message = table.Column(type: "nvarchar(max)", nullable: false), Link = table.Column(type: "nvarchar(max)", nullable: true), NotificationType = table.Column(type: "nvarchar(max)", nullable: false), IsRead = table.Column(type: "bit", nullable: false), ReadAt = table.Column(type: "datetime2", nullable: true), QuoteId = table.Column(type: "int", nullable: true), InvoiceId = table.Column(type: "int", nullable: true), CustomerId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_InAppNotifications", x => x.Id); table.ForeignKey( name: "FK_InAppNotifications_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id"); table.ForeignKey( name: "FK_InAppNotifications_Invoices_InvoiceId", column: x => x.InvoiceId, principalTable: "Invoices", principalColumn: "Id"); table.ForeignKey( name: "FK_InAppNotifications_Quotes_QuoteId", column: x => x.QuoteId, principalTable: "Quotes", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "NotificationLogs", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Channel = table.Column(type: "int", nullable: false), NotificationType = table.Column(type: "int", nullable: false), Status = table.Column(type: "int", nullable: false), RecipientName = table.Column(type: "nvarchar(max)", nullable: false), Recipient = table.Column(type: "nvarchar(max)", nullable: false), Subject = table.Column(type: "nvarchar(max)", nullable: true), Message = table.Column(type: "nvarchar(max)", nullable: false), ErrorMessage = table.Column(type: "nvarchar(max)", nullable: true), SentAt = table.Column(type: "datetime2", nullable: false), CustomerId = table.Column(type: "int", nullable: true), JobId = table.Column(type: "int", nullable: true), QuoteId = table.Column(type: "int", nullable: true), InvoiceId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_NotificationLogs", x => x.Id); table.ForeignKey( name: "FK_NotificationLogs_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_NotificationLogs_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_NotificationLogs_Invoices_InvoiceId", column: x => x.InvoiceId, principalTable: "Invoices", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_NotificationLogs_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_NotificationLogs_Quotes_QuoteId", column: x => x.QuoteId, principalTable: "Quotes", principalColumn: "Id", onDelete: ReferentialAction.SetNull); }); migrationBuilder.CreateTable( name: "Payments", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), InvoiceId = table.Column(type: "int", nullable: false), Amount = table.Column(type: "decimal(18,2)", nullable: false), PaymentDate = table.Column(type: "datetime2", nullable: false), PaymentMethod = table.Column(type: "int", nullable: false), Reference = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), RecordedById = table.Column(type: "nvarchar(450)", nullable: true), DepositAccountId = table.Column(type: "int", nullable: true), IsCleared = table.Column(type: "bit", nullable: false), ClearedDate = table.Column(type: "datetime2", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Payments", x => x.Id); table.ForeignKey( name: "FK_Payments_Accounts_DepositAccountId", column: x => x.DepositAccountId, principalTable: "Accounts", principalColumn: "Id"); table.ForeignKey( name: "FK_Payments_AspNetUsers_RecordedById", column: x => x.RecordedById, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_Payments_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Payments_Invoices_InvoiceId", column: x => x.InvoiceId, principalTable: "Invoices", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "InvoiceItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), InvoiceId = table.Column(type: "int", nullable: false), SourceJobItemId = table.Column(type: "int", nullable: true), CatalogItemId = table.Column(type: "int", nullable: true), Description = table.Column(type: "nvarchar(max)", nullable: false), Quantity = table.Column(type: "decimal(18,2)", nullable: false), UnitPrice = table.Column(type: "decimal(18,2)", nullable: false), TotalPrice = table.Column(type: "decimal(18,2)", nullable: false), ColorName = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), DisplayOrder = table.Column(type: "int", nullable: false), RevenueAccountId = table.Column(type: "int", nullable: true), IsGiftCertificate = table.Column(type: "bit", nullable: false), GcRecipientName = table.Column(type: "nvarchar(max)", nullable: true), GcRecipientEmail = table.Column(type: "nvarchar(max)", nullable: true), GcExpiryDate = table.Column(type: "datetime2", nullable: true), GeneratedGiftCertificateId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_InvoiceItems", x => x.Id); table.ForeignKey( name: "FK_InvoiceItems_Accounts_RevenueAccountId", column: x => x.RevenueAccountId, principalTable: "Accounts", principalColumn: "Id"); table.ForeignKey( name: "FK_InvoiceItems_CatalogItems_CatalogItemId", column: x => x.CatalogItemId, principalTable: "CatalogItems", principalColumn: "Id"); table.ForeignKey( name: "FK_InvoiceItems_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_InvoiceItems_GiftCertificates_GeneratedGiftCertificateId", column: x => x.GeneratedGiftCertificateId, principalTable: "GiftCertificates", principalColumn: "Id"); table.ForeignKey( name: "FK_InvoiceItems_Invoices_InvoiceId", column: x => x.InvoiceId, principalTable: "Invoices", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_InvoiceItems_JobItems_SourceJobItemId", column: x => x.SourceJobItemId, principalTable: "JobItems", principalColumn: "Id", onDelete: ReferentialAction.SetNull); }); migrationBuilder.CreateTable( name: "JobItemCoats", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobItemId = table.Column(type: "int", nullable: false), CoatName = table.Column(type: "nvarchar(max)", nullable: false), Sequence = table.Column(type: "int", nullable: false), InventoryItemId = table.Column(type: "int", nullable: true), ColorName = table.Column(type: "nvarchar(max)", nullable: true), VendorId = table.Column(type: "int", nullable: true), ColorCode = table.Column(type: "nvarchar(max)", nullable: true), Finish = table.Column(type: "nvarchar(max)", nullable: true), CoverageSqFtPerLb = table.Column(type: "decimal(18,2)", nullable: false), TransferEfficiency = table.Column(type: "decimal(18,2)", nullable: false), PowderCostPerLb = table.Column(type: "decimal(18,2)", nullable: true), PowderToOrder = table.Column(type: "decimal(18,2)", nullable: true), ActualPowderUsedLbs = table.Column(type: "decimal(18,2)", nullable: true), PowderOrdered = table.Column(type: "bit", nullable: false), PowderOrderedAt = table.Column(type: "datetime2", nullable: true), PowderOrderedByUserId = table.Column(type: "nvarchar(max)", nullable: true), PowderReceived = table.Column(type: "bit", nullable: false), PowderReceivedAt = table.Column(type: "datetime2", nullable: true), PowderReceivedByUserId = table.Column(type: "nvarchar(max)", nullable: true), PowderReceivedLbs = table.Column(type: "decimal(18,2)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobItemCoats", x => x.Id); table.ForeignKey( name: "FK_JobItemCoats_InventoryItems_InventoryItemId", column: x => x.InventoryItemId, principalTable: "InventoryItems", principalColumn: "Id"); table.ForeignKey( name: "FK_JobItemCoats_JobItems_JobItemId", column: x => x.JobItemId, principalTable: "JobItems", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_JobItemCoats_Vendors_VendorId", column: x => x.VendorId, principalTable: "Vendors", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "JobItemPrepServices", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobItemId = table.Column(type: "int", nullable: false), PrepServiceId = table.Column(type: "int", nullable: false), EstimatedMinutes = table.Column(type: "int", nullable: false), BlastSetupId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_JobItemPrepServices", x => x.Id); table.ForeignKey( name: "FK_JobItemPrepServices_Companies_CompanyId", column: x => x.CompanyId, principalTable: "Companies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_JobItemPrepServices_CompanyBlastSetups_BlastSetupId", column: x => x.BlastSetupId, principalTable: "CompanyBlastSetups", principalColumn: "Id", onDelete: ReferentialAction.SetNull); table.ForeignKey( name: "FK_JobItemPrepServices_JobItems_JobItemId", column: x => x.JobItemId, principalTable: "JobItems", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_JobItemPrepServices_PrepServices_PrepServiceId", column: x => x.PrepServiceId, principalTable: "PrepServices", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "ReworkRecords", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobId = table.Column(type: "int", nullable: false), JobItemId = table.Column(type: "int", nullable: true), ReworkJobId = table.Column(type: "int", nullable: true), ReworkType = table.Column(type: "int", nullable: false), Reason = table.Column(type: "int", nullable: false), DefectDescription = table.Column(type: "nvarchar(max)", nullable: false), DiscoveredBy = table.Column(type: "int", nullable: false), DiscoveredDate = table.Column(type: "datetime2", nullable: false), ReportedByName = table.Column(type: "nvarchar(max)", nullable: true), EstimatedReworkCost = table.Column(type: "decimal(18,2)", nullable: false), ActualReworkCost = table.Column(type: "decimal(18,2)", nullable: false), IsBillableToCustomer = table.Column(type: "bit", nullable: false), BillingNotes = table.Column(type: "nvarchar(max)", nullable: true), Status = table.Column(type: "int", nullable: false), Resolution = table.Column(type: "int", nullable: true), ResolvedDate = table.Column(type: "datetime2", nullable: true), ResolutionNotes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_ReworkRecords", x => x.Id); table.ForeignKey( name: "FK_ReworkRecords_JobItems_JobItemId", column: x => x.JobItemId, principalTable: "JobItems", principalColumn: "Id"); table.ForeignKey( name: "FK_ReworkRecords_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_ReworkRecords_Jobs_ReworkJobId", column: x => x.ReworkJobId, principalTable: "Jobs", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "OvenBatchItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), OvenBatchId = table.Column(type: "int", nullable: false), JobId = table.Column(type: "int", nullable: false), JobItemId = table.Column(type: "int", nullable: false), JobItemCoatId = table.Column(type: "int", nullable: false), SurfaceAreaContribution = table.Column(type: "decimal(18,2)", nullable: false), CoatPassNumber = table.Column(type: "int", nullable: false), SortOrder = table.Column(type: "int", nullable: false), Status = table.Column(type: "int", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_OvenBatchItems", x => x.Id); table.ForeignKey( name: "FK_OvenBatchItems_JobItemCoats_JobItemCoatId", column: x => x.JobItemCoatId, principalTable: "JobItemCoats", principalColumn: "Id"); table.ForeignKey( name: "FK_OvenBatchItems_JobItems_JobItemId", column: x => x.JobItemId, principalTable: "JobItems", principalColumn: "Id"); table.ForeignKey( name: "FK_OvenBatchItems_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id"); table.ForeignKey( name: "FK_OvenBatchItems_OvenBatches_OvenBatchId", column: x => x.OvenBatchId, principalTable: "OvenBatches", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "PowderUsageLogs", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), JobId = table.Column(type: "int", nullable: false), JobItemId = table.Column(type: "int", nullable: false), JobItemCoatId = table.Column(type: "int", nullable: false), InventoryItemId = table.Column(type: "int", nullable: true), InventoryTransactionId = table.Column(type: "int", nullable: true), ActualLbsUsed = table.Column(type: "decimal(18,2)", nullable: false), EstimatedLbs = table.Column(type: "decimal(18,2)", nullable: false), VarianceLbs = table.Column(type: "decimal(18,2)", nullable: false), RecordedByUserId = table.Column(type: "nvarchar(max)", nullable: false), RecordedAt = table.Column(type: "datetime2", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_PowderUsageLogs", x => x.Id); table.ForeignKey( name: "FK_PowderUsageLogs_InventoryItems_InventoryItemId", column: x => x.InventoryItemId, principalTable: "InventoryItems", principalColumn: "Id"); table.ForeignKey( name: "FK_PowderUsageLogs_InventoryTransactions_InventoryTransactionId", column: x => x.InventoryTransactionId, principalTable: "InventoryTransactions", principalColumn: "Id"); table.ForeignKey( name: "FK_PowderUsageLogs_JobItemCoats_JobItemCoatId", column: x => x.JobItemCoatId, principalTable: "JobItemCoats", principalColumn: "Id"); table.ForeignKey( name: "FK_PowderUsageLogs_JobItems_JobItemId", column: x => x.JobItemId, principalTable: "JobItems", principalColumn: "Id"); table.ForeignKey( name: "FK_PowderUsageLogs_Jobs_JobId", column: x => x.JobId, principalTable: "Jobs", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "CreditMemos", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), MemoNumber = table.Column(type: "nvarchar(450)", nullable: false), CustomerId = table.Column(type: "int", nullable: false), OriginalInvoiceId = table.Column(type: "int", nullable: true), ReworkRecordId = table.Column(type: "int", nullable: true), Amount = table.Column(type: "decimal(18,2)", nullable: false), AmountApplied = table.Column(type: "decimal(18,2)", nullable: false), IssueDate = table.Column(type: "datetime2", nullable: false), ExpiryDate = table.Column(type: "datetime2", nullable: true), Reason = table.Column(type: "nvarchar(max)", nullable: false), Notes = table.Column(type: "nvarchar(max)", nullable: true), Status = table.Column(type: "int", nullable: false), IssuedById = table.Column(type: "nvarchar(450)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_CreditMemos", x => x.Id); table.ForeignKey( name: "FK_CreditMemos_AspNetUsers_IssuedById", column: x => x.IssuedById, principalTable: "AspNetUsers", principalColumn: "Id"); table.ForeignKey( name: "FK_CreditMemos_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_CreditMemos_Invoices_OriginalInvoiceId", column: x => x.OriginalInvoiceId, principalTable: "Invoices", principalColumn: "Id"); table.ForeignKey( name: "FK_CreditMemos_ReworkRecords_ReworkRecordId", column: x => x.ReworkRecordId, principalTable: "ReworkRecords", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "CreditMemoApplications", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CreditMemoId = table.Column(type: "int", nullable: false), InvoiceId = table.Column(type: "int", nullable: false), AmountApplied = table.Column(type: "decimal(18,2)", nullable: false), AppliedDate = table.Column(type: "datetime2", nullable: false), AppliedById = table.Column(type: "nvarchar(450)", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_CreditMemoApplications", x => x.Id); table.ForeignKey( name: "FK_CreditMemoApplications_AspNetUsers_AppliedById", column: x => x.AppliedById, principalTable: "AspNetUsers", principalColumn: "Id"); table.ForeignKey( name: "FK_CreditMemoApplications_CreditMemos_CreditMemoId", column: x => x.CreditMemoId, principalTable: "CreditMemos", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_CreditMemoApplications_Invoices_InvoiceId", column: x => x.InvoiceId, principalTable: "Invoices", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "Refunds", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), InvoiceId = table.Column(type: "int", nullable: false), PaymentId = table.Column(type: "int", nullable: true), Amount = table.Column(type: "decimal(18,2)", nullable: false), RefundDate = table.Column(type: "datetime2", nullable: false), RefundMethod = table.Column(type: "int", nullable: false), Reason = table.Column(type: "nvarchar(max)", nullable: false), Reference = table.Column(type: "nvarchar(max)", nullable: true), Notes = table.Column(type: "nvarchar(max)", nullable: true), Status = table.Column(type: "int", nullable: false), IssuedDate = table.Column(type: "datetime2", nullable: true), IssuedById = table.Column(type: "nvarchar(450)", nullable: true), DepositAccountId = table.Column(type: "int", nullable: true), CreditMemoId = table.Column(type: "int", nullable: true), CompanyId = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false), UpdatedAt = table.Column(type: "datetime2", nullable: true), CreatedBy = table.Column(type: "nvarchar(max)", nullable: true), UpdatedBy = table.Column(type: "nvarchar(max)", nullable: true), IsDeleted = table.Column(type: "bit", nullable: false), DeletedAt = table.Column(type: "datetime2", nullable: true), DeletedBy = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Refunds", x => x.Id); table.ForeignKey( name: "FK_Refunds_AspNetUsers_IssuedById", column: x => x.IssuedById, principalTable: "AspNetUsers", principalColumn: "Id"); table.ForeignKey( name: "FK_Refunds_CreditMemos_CreditMemoId", column: x => x.CreditMemoId, principalTable: "CreditMemos", principalColumn: "Id"); table.ForeignKey( name: "FK_Refunds_Invoices_InvoiceId", column: x => x.InvoiceId, principalTable: "Invoices", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Refunds_Payments_PaymentId", column: x => x.PaymentId, principalTable: "Payments", principalColumn: "Id"); }); // PricingTier seed rows (CompanyId=0) omitted — they violate the Companies FK // on a fresh database. These tiers are created per-company by SeedDataService. migrationBuilder.CreateIndex( name: "IX_Accounts_ParentAccountId", table: "Accounts", column: "ParentAccountId"); migrationBuilder.CreateIndex( name: "IX_AiUsageLogs_CompanyId_CalledAt", table: "AiUsageLogs", columns: new[] { "CompanyId", "CalledAt" }); migrationBuilder.CreateIndex( name: "IX_AnnouncementDismissals_AnnouncementId_UserId", table: "AnnouncementDismissals", columns: new[] { "AnnouncementId", "UserId" }, unique: true); migrationBuilder.CreateIndex( name: "IX_Appointments_AppointmentStatusId", table: "Appointments", column: "AppointmentStatusId"); migrationBuilder.CreateIndex( name: "IX_Appointments_AppointmentTypeId", table: "Appointments", column: "AppointmentTypeId"); migrationBuilder.CreateIndex( name: "IX_Appointments_AssignedUserId", table: "Appointments", column: "AssignedUserId"); migrationBuilder.CreateIndex( name: "IX_Appointments_CompanyId_AppointmentStatusId", table: "Appointments", columns: new[] { "CompanyId", "AppointmentStatusId" }); migrationBuilder.CreateIndex( name: "IX_Appointments_CompanyId_ScheduledStartTime", table: "Appointments", columns: new[] { "CompanyId", "ScheduledStartTime" }); migrationBuilder.CreateIndex( name: "IX_Appointments_CustomerId", table: "Appointments", column: "CustomerId"); migrationBuilder.CreateIndex( name: "IX_Appointments_JobId", table: "Appointments", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_Appointments_ScheduledStartTime", table: "Appointments", column: "ScheduledStartTime"); migrationBuilder.CreateIndex( name: "IX_AspNetRoleClaims_RoleId", table: "AspNetRoleClaims", column: "RoleId"); migrationBuilder.CreateIndex( name: "RoleNameIndex", table: "AspNetRoles", column: "NormalizedName", unique: true, filter: "[NormalizedName] IS NOT NULL"); migrationBuilder.CreateIndex( name: "IX_AspNetUserClaims_UserId", table: "AspNetUserClaims", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_AspNetUserLogins_UserId", table: "AspNetUserLogins", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_AspNetUserRoles_RoleId", table: "AspNetUserRoles", column: "RoleId"); migrationBuilder.CreateIndex( name: "EmailIndex", table: "AspNetUsers", column: "NormalizedEmail"); migrationBuilder.CreateIndex( name: "IX_AspNetUsers_CompanyId", table: "AspNetUsers", column: "CompanyId"); migrationBuilder.CreateIndex( name: "UserNameIndex", table: "AspNetUsers", column: "NormalizedUserName", unique: true, filter: "[NormalizedUserName] IS NOT NULL"); migrationBuilder.CreateIndex( name: "IX_AuditLogs_CompanyId_Timestamp", table: "AuditLogs", columns: new[] { "CompanyId", "Timestamp" }); migrationBuilder.CreateIndex( name: "IX_AuditLogs_EntityType_EntityId", table: "AuditLogs", columns: new[] { "EntityType", "EntityId" }); migrationBuilder.CreateIndex( name: "IX_BankReconciliations_AccountId", table: "BankReconciliations", column: "AccountId"); migrationBuilder.CreateIndex( name: "IX_BillLineItems_AccountId", table: "BillLineItems", column: "AccountId"); migrationBuilder.CreateIndex( name: "IX_BillLineItems_BillId", table: "BillLineItems", column: "BillId"); migrationBuilder.CreateIndex( name: "IX_BillLineItems_JobId", table: "BillLineItems", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_BillPayments_BankAccountId", table: "BillPayments", column: "BankAccountId"); migrationBuilder.CreateIndex( name: "IX_BillPayments_BillId", table: "BillPayments", column: "BillId"); migrationBuilder.CreateIndex( name: "IX_BillPayments_VendorId", table: "BillPayments", column: "VendorId"); migrationBuilder.CreateIndex( name: "IX_Bills_APAccountId", table: "Bills", column: "APAccountId"); migrationBuilder.CreateIndex( name: "IX_Bills_CompanyId_Status", table: "Bills", columns: new[] { "CompanyId", "Status" }); migrationBuilder.CreateIndex( name: "IX_Bills_DueDate", table: "Bills", column: "DueDate"); migrationBuilder.CreateIndex( name: "IX_Bills_Status", table: "Bills", column: "Status"); migrationBuilder.CreateIndex( name: "IX_Bills_VendorId", table: "Bills", column: "VendorId"); migrationBuilder.CreateIndex( name: "IX_BudgetLines_AccountId", table: "BudgetLines", column: "AccountId"); migrationBuilder.CreateIndex( name: "IX_BudgetLines_BudgetId", table: "BudgetLines", column: "BudgetId"); migrationBuilder.CreateIndex( name: "IX_BugReportAttachments_BugReportId", table: "BugReportAttachments", column: "BugReportId"); migrationBuilder.CreateIndex( name: "IX_CatalogCategories_CompanyId", table: "CatalogCategories", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_CatalogCategories_ParentCategoryId", table: "CatalogCategories", column: "ParentCategoryId"); migrationBuilder.CreateIndex( name: "IX_CatalogItems_CategoryId", table: "CatalogItems", column: "CategoryId"); migrationBuilder.CreateIndex( name: "IX_CatalogItems_CogsAccountId", table: "CatalogItems", column: "CogsAccountId"); migrationBuilder.CreateIndex( name: "IX_CatalogItems_CompanyId", table: "CatalogItems", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_CatalogItems_InventoryItemId", table: "CatalogItems", column: "InventoryItemId"); migrationBuilder.CreateIndex( name: "IX_CatalogItems_RevenueAccountId", table: "CatalogItems", column: "RevenueAccountId"); migrationBuilder.CreateIndex( name: "IX_Companies_CompanyCode", table: "Companies", column: "CompanyCode", unique: true, filter: "[CompanyCode] IS NOT NULL"); migrationBuilder.CreateIndex( name: "IX_CompanyBlastSetups_CompanyId", table: "CompanyBlastSetups", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_CompanyOperatingCosts_CompanyId", table: "CompanyOperatingCosts", column: "CompanyId", unique: true); migrationBuilder.CreateIndex( name: "IX_CompanyPreferences_CompanyId", table: "CompanyPreferences", column: "CompanyId", unique: true); migrationBuilder.CreateIndex( name: "IX_CreditMemoApplications_AppliedById", table: "CreditMemoApplications", column: "AppliedById"); migrationBuilder.CreateIndex( name: "IX_CreditMemoApplications_CreditMemoId", table: "CreditMemoApplications", column: "CreditMemoId"); migrationBuilder.CreateIndex( name: "IX_CreditMemoApplications_InvoiceId", table: "CreditMemoApplications", column: "InvoiceId"); migrationBuilder.CreateIndex( name: "IX_CreditMemos_CompanyId_MemoNumber", table: "CreditMemos", columns: new[] { "CompanyId", "MemoNumber" }, unique: true); migrationBuilder.CreateIndex( name: "IX_CreditMemos_CustomerId", table: "CreditMemos", column: "CustomerId"); migrationBuilder.CreateIndex( name: "IX_CreditMemos_IssuedById", table: "CreditMemos", column: "IssuedById"); migrationBuilder.CreateIndex( name: "IX_CreditMemos_OriginalInvoiceId", table: "CreditMemos", column: "OriginalInvoiceId"); migrationBuilder.CreateIndex( name: "IX_CreditMemos_ReworkRecordId", table: "CreditMemos", column: "ReworkRecordId"); migrationBuilder.CreateIndex( name: "IX_CustomerNotes_CustomerId_CreatedAt", table: "CustomerNotes", columns: new[] { "CustomerId", "CreatedAt" }); migrationBuilder.CreateIndex( name: "IX_Customers_CompanyId", table: "Customers", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_Customers_CompanyId_Email", table: "Customers", columns: new[] { "CompanyId", "Email" }, unique: true, filter: "[Email] IS NOT NULL"); migrationBuilder.CreateIndex( name: "IX_Customers_CompanyName", table: "Customers", column: "CompanyName"); migrationBuilder.CreateIndex( name: "IX_Customers_PricingTierId", table: "Customers", column: "PricingTierId"); migrationBuilder.CreateIndex( name: "IX_Customers_UnsubscribeToken", table: "Customers", column: "UnsubscribeToken", unique: true); migrationBuilder.CreateIndex( name: "IX_Deposits_AppliedToInvoiceId", table: "Deposits", column: "AppliedToInvoiceId"); migrationBuilder.CreateIndex( name: "IX_Deposits_CustomerId", table: "Deposits", column: "CustomerId"); migrationBuilder.CreateIndex( name: "IX_Deposits_JobId", table: "Deposits", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_Deposits_QuoteId", table: "Deposits", column: "QuoteId"); migrationBuilder.CreateIndex( name: "IX_Deposits_RecordedById", table: "Deposits", column: "RecordedById"); migrationBuilder.CreateIndex( name: "IX_Equipment_CompanyId", table: "Equipment", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_Equipment_CompanyId_Status", table: "Equipment", columns: new[] { "CompanyId", "Status" }); migrationBuilder.CreateIndex( name: "IX_Expenses_ExpenseAccountId", table: "Expenses", column: "ExpenseAccountId"); migrationBuilder.CreateIndex( name: "IX_Expenses_JobId", table: "Expenses", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_Expenses_PaymentAccountId", table: "Expenses", column: "PaymentAccountId"); migrationBuilder.CreateIndex( name: "IX_Expenses_VendorId", table: "Expenses", column: "VendorId"); migrationBuilder.CreateIndex( name: "IX_FixedAssetDepreciationEntries_FixedAssetId", table: "FixedAssetDepreciationEntries", column: "FixedAssetId"); migrationBuilder.CreateIndex( name: "IX_FixedAssetDepreciationEntries_JournalEntryId", table: "FixedAssetDepreciationEntries", column: "JournalEntryId"); migrationBuilder.CreateIndex( name: "IX_FixedAssets_AccumDepreciationAccountId", table: "FixedAssets", column: "AccumDepreciationAccountId"); migrationBuilder.CreateIndex( name: "IX_FixedAssets_AssetAccountId", table: "FixedAssets", column: "AssetAccountId"); migrationBuilder.CreateIndex( name: "IX_FixedAssets_DepreciationExpenseAccountId", table: "FixedAssets", column: "DepreciationExpenseAccountId"); migrationBuilder.CreateIndex( name: "IX_GiftCertificateRedemptions_GiftCertificateId", table: "GiftCertificateRedemptions", column: "GiftCertificateId"); migrationBuilder.CreateIndex( name: "IX_GiftCertificateRedemptions_InvoiceId", table: "GiftCertificateRedemptions", column: "InvoiceId"); migrationBuilder.CreateIndex( name: "IX_GiftCertificateRedemptions_RedeemedById", table: "GiftCertificateRedemptions", column: "RedeemedById"); migrationBuilder.CreateIndex( name: "IX_GiftCertificates_CompanyId_CertificateCode", table: "GiftCertificates", columns: new[] { "CompanyId", "CertificateCode" }, unique: true); migrationBuilder.CreateIndex( name: "IX_GiftCertificates_IssuedById", table: "GiftCertificates", column: "IssuedById"); migrationBuilder.CreateIndex( name: "IX_GiftCertificates_PurchasingCustomerId", table: "GiftCertificates", column: "PurchasingCustomerId"); migrationBuilder.CreateIndex( name: "IX_GiftCertificates_RecipientCustomerId", table: "GiftCertificates", column: "RecipientCustomerId"); migrationBuilder.CreateIndex( name: "IX_InAppNotifications_CustomerId", table: "InAppNotifications", column: "CustomerId"); migrationBuilder.CreateIndex( name: "IX_InAppNotifications_InvoiceId", table: "InAppNotifications", column: "InvoiceId"); migrationBuilder.CreateIndex( name: "IX_InAppNotifications_QuoteId", table: "InAppNotifications", column: "QuoteId"); migrationBuilder.CreateIndex( name: "IX_InventoryCategoryLookups_CompanyId", table: "InventoryCategoryLookups", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_InventoryCategoryLookups_CompanyId_CategoryCode", table: "InventoryCategoryLookups", columns: new[] { "CompanyId", "CategoryCode" }, unique: true); migrationBuilder.CreateIndex( name: "IX_InventoryItems_CogsAccountId", table: "InventoryItems", column: "CogsAccountId"); migrationBuilder.CreateIndex( name: "IX_InventoryItems_CompanyId", table: "InventoryItems", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_InventoryItems_CompanyId_IsActive", table: "InventoryItems", columns: new[] { "CompanyId", "IsActive" }); migrationBuilder.CreateIndex( name: "IX_InventoryItems_CompanyId_Quantity_Reorder", table: "InventoryItems", columns: new[] { "CompanyId", "QuantityOnHand", "ReorderPoint" }); migrationBuilder.CreateIndex( name: "IX_InventoryItems_CompanyId_SKU", table: "InventoryItems", columns: new[] { "CompanyId", "SKU" }, unique: true); migrationBuilder.CreateIndex( name: "IX_InventoryItems_InventoryAccountId", table: "InventoryItems", column: "InventoryAccountId"); migrationBuilder.CreateIndex( name: "IX_InventoryItems_InventoryCategoryId", table: "InventoryItems", column: "InventoryCategoryId"); migrationBuilder.CreateIndex( name: "IX_InventoryItems_IsActive", table: "InventoryItems", column: "IsActive"); migrationBuilder.CreateIndex( name: "IX_InventoryItems_PrimaryVendorId", table: "InventoryItems", column: "PrimaryVendorId"); migrationBuilder.CreateIndex( name: "IX_InventoryTransactions_InventoryItemId", table: "InventoryTransactions", column: "InventoryItemId"); migrationBuilder.CreateIndex( name: "IX_InventoryTransactions_JobId", table: "InventoryTransactions", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_InventoryTransactions_PurchaseOrderId", table: "InventoryTransactions", column: "PurchaseOrderId"); migrationBuilder.CreateIndex( name: "IX_InventoryTransactions_TransactionType_TransactionDate", table: "InventoryTransactions", columns: new[] { "TransactionType", "TransactionDate" }); migrationBuilder.CreateIndex( name: "IX_InvoiceItems_CatalogItemId", table: "InvoiceItems", column: "CatalogItemId"); migrationBuilder.CreateIndex( name: "IX_InvoiceItems_CompanyId", table: "InvoiceItems", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_InvoiceItems_GeneratedGiftCertificateId", table: "InvoiceItems", column: "GeneratedGiftCertificateId"); migrationBuilder.CreateIndex( name: "IX_InvoiceItems_InvoiceId", table: "InvoiceItems", column: "InvoiceId"); migrationBuilder.CreateIndex( name: "IX_InvoiceItems_RevenueAccountId", table: "InvoiceItems", column: "RevenueAccountId"); migrationBuilder.CreateIndex( name: "IX_InvoiceItems_SourceJobItemId", table: "InvoiceItems", column: "SourceJobItemId"); migrationBuilder.CreateIndex( name: "IX_Invoices_CompanyId_CustomerId", table: "Invoices", columns: new[] { "CompanyId", "CustomerId" }); migrationBuilder.CreateIndex( name: "IX_Invoices_CompanyId_DueDate", table: "Invoices", columns: new[] { "CompanyId", "DueDate" }); migrationBuilder.CreateIndex( name: "IX_Invoices_CompanyId_ExternalReference", table: "Invoices", columns: new[] { "CompanyId", "ExternalReference" }); migrationBuilder.CreateIndex( name: "IX_Invoices_CompanyId_InvoiceNumber", table: "Invoices", columns: new[] { "CompanyId", "InvoiceNumber" }, unique: true); migrationBuilder.CreateIndex( name: "IX_Invoices_CompanyId_IsDeleted", table: "Invoices", columns: new[] { "CompanyId", "IsDeleted" }); migrationBuilder.CreateIndex( name: "IX_Invoices_CompanyId_JobId", table: "Invoices", columns: new[] { "CompanyId", "JobId" }, unique: true, filter: "[JobId] IS NOT NULL"); migrationBuilder.CreateIndex( name: "IX_Invoices_CompanyId_Status", table: "Invoices", columns: new[] { "CompanyId", "Status" }); migrationBuilder.CreateIndex( name: "IX_Invoices_CustomerId", table: "Invoices", column: "CustomerId"); migrationBuilder.CreateIndex( name: "IX_Invoices_DueDate", table: "Invoices", column: "DueDate"); migrationBuilder.CreateIndex( name: "IX_Invoices_InvoiceDate", table: "Invoices", column: "InvoiceDate"); migrationBuilder.CreateIndex( name: "IX_Invoices_JobId", table: "Invoices", column: "JobId", unique: true, filter: "[JobId] IS NOT NULL"); migrationBuilder.CreateIndex( name: "IX_Invoices_PreparedById", table: "Invoices", column: "PreparedById"); migrationBuilder.CreateIndex( name: "IX_Invoices_SalesTaxAccountId", table: "Invoices", column: "SalesTaxAccountId"); migrationBuilder.CreateIndex( name: "IX_Invoices_Status", table: "Invoices", column: "Status"); migrationBuilder.CreateIndex( name: "IX_JobChangeHistories_ChangedByUserId", table: "JobChangeHistories", column: "ChangedByUserId"); migrationBuilder.CreateIndex( name: "IX_JobChangeHistories_CompanyId", table: "JobChangeHistories", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_JobChangeHistories_JobId", table: "JobChangeHistories", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_JobDailyPriorities_JobId", table: "JobDailyPriorities", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_JobItemCoats_InventoryItemId", table: "JobItemCoats", column: "InventoryItemId"); migrationBuilder.CreateIndex( name: "IX_JobItemCoats_JobItemId", table: "JobItemCoats", column: "JobItemId"); migrationBuilder.CreateIndex( name: "IX_JobItemCoats_VendorId", table: "JobItemCoats", column: "VendorId"); migrationBuilder.CreateIndex( name: "IX_JobItemPrepServices_BlastSetupId", table: "JobItemPrepServices", column: "BlastSetupId"); migrationBuilder.CreateIndex( name: "IX_JobItemPrepServices_CompanyId", table: "JobItemPrepServices", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_JobItemPrepServices_JobItemId", table: "JobItemPrepServices", column: "JobItemId"); migrationBuilder.CreateIndex( name: "IX_JobItemPrepServices_PrepServiceId", table: "JobItemPrepServices", column: "PrepServiceId"); migrationBuilder.CreateIndex( name: "IX_JobItems_AiPredictionId", table: "JobItems", column: "AiPredictionId"); migrationBuilder.CreateIndex( name: "IX_JobItems_CatalogItemId", table: "JobItems", column: "CatalogItemId"); migrationBuilder.CreateIndex( name: "IX_JobItems_JobId", table: "JobItems", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_JobItems_JobId_IsDeleted", table: "JobItems", columns: new[] { "JobId", "IsDeleted" }); migrationBuilder.CreateIndex( name: "IX_JobNotes_JobId_CreatedAt", table: "JobNotes", columns: new[] { "JobId", "CreatedAt" }); migrationBuilder.CreateIndex( name: "IX_JobPhotos_JobId_IsDeleted_DisplayOrder", table: "JobPhotos", columns: new[] { "JobId", "IsDeleted", "DisplayOrder" }); migrationBuilder.CreateIndex( name: "IX_JobPhotos_UploadedById", table: "JobPhotos", column: "UploadedById"); migrationBuilder.CreateIndex( name: "IX_JobPrepServices_JobId", table: "JobPrepServices", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_JobPrepServices_PrepServiceId", table: "JobPrepServices", column: "PrepServiceId"); migrationBuilder.CreateIndex( name: "IX_JobPriorityLookups_CompanyId", table: "JobPriorityLookups", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_JobPriorityLookups_CompanyId_PriorityCode", table: "JobPriorityLookups", columns: new[] { "CompanyId", "PriorityCode" }, unique: true); migrationBuilder.CreateIndex( name: "IX_Jobs_AssignedUserId", table: "Jobs", column: "AssignedUserId"); migrationBuilder.CreateIndex( name: "IX_Jobs_CompanyId", table: "Jobs", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_Jobs_CompanyId_CustomerId", table: "Jobs", columns: new[] { "CompanyId", "CustomerId" }); migrationBuilder.CreateIndex( name: "IX_Jobs_CompanyId_DueDate", table: "Jobs", columns: new[] { "CompanyId", "DueDate" }); migrationBuilder.CreateIndex( name: "IX_Jobs_CompanyId_IsDeleted", table: "Jobs", columns: new[] { "CompanyId", "IsDeleted" }); migrationBuilder.CreateIndex( name: "IX_Jobs_CompanyId_JobNumber", table: "Jobs", columns: new[] { "CompanyId", "JobNumber" }, unique: true); migrationBuilder.CreateIndex( name: "IX_Jobs_CompanyId_JobPriorityId", table: "Jobs", columns: new[] { "CompanyId", "JobPriorityId" }); migrationBuilder.CreateIndex( name: "IX_Jobs_CompanyId_JobStatusId", table: "Jobs", columns: new[] { "CompanyId", "JobStatusId" }); migrationBuilder.CreateIndex( name: "IX_Jobs_CompanyId_ScheduledDate", table: "Jobs", columns: new[] { "CompanyId", "ScheduledDate" }); migrationBuilder.CreateIndex( name: "IX_Jobs_CompanyId_ShopAccessCode", table: "Jobs", columns: new[] { "CompanyId", "ShopAccessCode" }, unique: true); migrationBuilder.CreateIndex( name: "IX_Jobs_CustomerId", table: "Jobs", column: "CustomerId"); migrationBuilder.CreateIndex( name: "IX_Jobs_DueDate", table: "Jobs", column: "DueDate"); migrationBuilder.CreateIndex( name: "IX_Jobs_IntakeCheckedByUserId", table: "Jobs", column: "IntakeCheckedByUserId"); migrationBuilder.CreateIndex( name: "IX_Jobs_JobPriorityId", table: "Jobs", column: "JobPriorityId"); migrationBuilder.CreateIndex( name: "IX_Jobs_JobStatusId", table: "Jobs", column: "JobStatusId"); migrationBuilder.CreateIndex( name: "IX_Jobs_OriginalJobId", table: "Jobs", column: "OriginalJobId"); migrationBuilder.CreateIndex( name: "IX_Jobs_OvenCostId", table: "Jobs", column: "OvenCostId"); migrationBuilder.CreateIndex( name: "IX_Jobs_QuoteId", table: "Jobs", column: "QuoteId", unique: true, filter: "[QuoteId] IS NOT NULL"); migrationBuilder.CreateIndex( name: "IX_Jobs_ScheduledDate", table: "Jobs", column: "ScheduledDate"); migrationBuilder.CreateIndex( name: "IX_JobStatusHistory_FromStatusId", table: "JobStatusHistory", column: "FromStatusId"); migrationBuilder.CreateIndex( name: "IX_JobStatusHistory_JobId", table: "JobStatusHistory", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_JobStatusHistory_ToStatusId", table: "JobStatusHistory", column: "ToStatusId"); migrationBuilder.CreateIndex( name: "IX_JobStatusLookups_CompanyId", table: "JobStatusLookups", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_JobStatusLookups_CompanyId_StatusCode", table: "JobStatusLookups", columns: new[] { "CompanyId", "StatusCode" }, unique: true); migrationBuilder.CreateIndex( name: "IX_JobTemplateItemCoats_InventoryItemId", table: "JobTemplateItemCoats", column: "InventoryItemId"); migrationBuilder.CreateIndex( name: "IX_JobTemplateItemCoats_JobTemplateItemId", table: "JobTemplateItemCoats", column: "JobTemplateItemId"); migrationBuilder.CreateIndex( name: "IX_JobTemplateItemCoats_VendorId", table: "JobTemplateItemCoats", column: "VendorId"); migrationBuilder.CreateIndex( name: "IX_JobTemplateItemPrepServices_JobTemplateItemId", table: "JobTemplateItemPrepServices", column: "JobTemplateItemId"); migrationBuilder.CreateIndex( name: "IX_JobTemplateItemPrepServices_PrepServiceId", table: "JobTemplateItemPrepServices", column: "PrepServiceId"); migrationBuilder.CreateIndex( name: "IX_JobTemplateItems_CatalogItemId", table: "JobTemplateItems", column: "CatalogItemId"); migrationBuilder.CreateIndex( name: "IX_JobTemplateItems_JobTemplateId", table: "JobTemplateItems", column: "JobTemplateId"); migrationBuilder.CreateIndex( name: "IX_JobTemplates_CustomerId", table: "JobTemplates", column: "CustomerId"); migrationBuilder.CreateIndex( name: "IX_JobTimeEntries_JobId", table: "JobTimeEntries", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_JournalEntries_ReversalOfId", table: "JournalEntries", column: "ReversalOfId"); migrationBuilder.CreateIndex( name: "IX_JournalEntryLines_AccountId", table: "JournalEntryLines", column: "AccountId"); migrationBuilder.CreateIndex( name: "IX_JournalEntryLines_JournalEntryId", table: "JournalEntryLines", column: "JournalEntryId"); migrationBuilder.CreateIndex( name: "IX_KioskSessions_LinkedCustomerId", table: "KioskSessions", column: "LinkedCustomerId"); migrationBuilder.CreateIndex( name: "IX_KioskSessions_LinkedJobId", table: "KioskSessions", column: "LinkedJobId"); migrationBuilder.CreateIndex( name: "IX_KioskSessions_SessionToken", table: "KioskSessions", column: "SessionToken", unique: true); migrationBuilder.CreateIndex( name: "IX_MaintenanceRecords_AssignedUserId", table: "MaintenanceRecords", column: "AssignedUserId"); migrationBuilder.CreateIndex( name: "IX_MaintenanceRecords_CompanyId_ScheduledDate", table: "MaintenanceRecords", columns: new[] { "CompanyId", "ScheduledDate" }); migrationBuilder.CreateIndex( name: "IX_MaintenanceRecords_CompanyId_Status", table: "MaintenanceRecords", columns: new[] { "CompanyId", "Status" }); migrationBuilder.CreateIndex( name: "IX_MaintenanceRecords_EquipmentId", table: "MaintenanceRecords", column: "EquipmentId"); migrationBuilder.CreateIndex( name: "IX_MaintenanceRecords_PerformedById", table: "MaintenanceRecords", column: "PerformedById"); migrationBuilder.CreateIndex( name: "IX_MaintenanceRecords_RecurrenceParentId", table: "MaintenanceRecords", column: "RecurrenceParentId"); migrationBuilder.CreateIndex( name: "IX_MaintenanceRecords_ScheduledDate", table: "MaintenanceRecords", column: "ScheduledDate"); migrationBuilder.CreateIndex( name: "IX_MaintenanceRecords_Status", table: "MaintenanceRecords", column: "Status"); migrationBuilder.CreateIndex( name: "IX_NotificationLogs_CompanyId_SentAt", table: "NotificationLogs", columns: new[] { "CompanyId", "SentAt" }); migrationBuilder.CreateIndex( name: "IX_NotificationLogs_CompanyId_Status", table: "NotificationLogs", columns: new[] { "CompanyId", "Status" }); migrationBuilder.CreateIndex( name: "IX_NotificationLogs_CustomerId", table: "NotificationLogs", column: "CustomerId"); migrationBuilder.CreateIndex( name: "IX_NotificationLogs_InvoiceId", table: "NotificationLogs", column: "InvoiceId"); migrationBuilder.CreateIndex( name: "IX_NotificationLogs_JobId", table: "NotificationLogs", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_NotificationLogs_QuoteId", table: "NotificationLogs", column: "QuoteId"); migrationBuilder.CreateIndex( name: "IX_NotificationTemplates_Company_Type_Channel", table: "NotificationTemplates", columns: new[] { "CompanyId", "NotificationType", "Channel" }, unique: true); migrationBuilder.CreateIndex( name: "IX_OvenBatches_EquipmentId", table: "OvenBatches", column: "EquipmentId"); migrationBuilder.CreateIndex( name: "IX_OvenBatches_OvenCostId", table: "OvenBatches", column: "OvenCostId"); migrationBuilder.CreateIndex( name: "IX_OvenBatches_ScheduledDate_Status", table: "OvenBatches", columns: new[] { "ScheduledDate", "Status" }); migrationBuilder.CreateIndex( name: "IX_OvenBatchItems_JobId", table: "OvenBatchItems", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_OvenBatchItems_JobItemCoatId", table: "OvenBatchItems", column: "JobItemCoatId"); migrationBuilder.CreateIndex( name: "IX_OvenBatchItems_JobItemId", table: "OvenBatchItems", column: "JobItemId"); migrationBuilder.CreateIndex( name: "IX_OvenBatchItems_OvenBatchId", table: "OvenBatchItems", column: "OvenBatchId"); migrationBuilder.CreateIndex( name: "IX_OvenCosts_CompanyId", table: "OvenCosts", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_Payments_CompanyId_PaymentDate", table: "Payments", columns: new[] { "CompanyId", "PaymentDate" }); migrationBuilder.CreateIndex( name: "IX_Payments_DepositAccountId", table: "Payments", column: "DepositAccountId"); migrationBuilder.CreateIndex( name: "IX_Payments_InvoiceId", table: "Payments", column: "InvoiceId"); migrationBuilder.CreateIndex( name: "IX_Payments_PaymentDate", table: "Payments", column: "PaymentDate"); migrationBuilder.CreateIndex( name: "IX_Payments_RecordedById", table: "Payments", column: "RecordedById"); migrationBuilder.CreateIndex( name: "IX_PowderCatalogItems_ColorName", table: "PowderCatalogItems", column: "ColorName"); migrationBuilder.CreateIndex( name: "IX_PowderCatalogItems_Vendor_Sku", table: "PowderCatalogItems", columns: new[] { "VendorName", "Sku" }, unique: true); migrationBuilder.CreateIndex( name: "IX_PowderUsageLogs_InventoryItemId", table: "PowderUsageLogs", column: "InventoryItemId"); migrationBuilder.CreateIndex( name: "IX_PowderUsageLogs_InventoryTransactionId", table: "PowderUsageLogs", column: "InventoryTransactionId"); migrationBuilder.CreateIndex( name: "IX_PowderUsageLogs_JobId", table: "PowderUsageLogs", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_PowderUsageLogs_JobItemCoatId", table: "PowderUsageLogs", column: "JobItemCoatId"); migrationBuilder.CreateIndex( name: "IX_PowderUsageLogs_JobItemId", table: "PowderUsageLogs", column: "JobItemId"); migrationBuilder.CreateIndex( name: "IX_PricingTiers_CompanyId", table: "PricingTiers", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_PurchaseOrderItems_InventoryItemId", table: "PurchaseOrderItems", column: "InventoryItemId"); migrationBuilder.CreateIndex( name: "IX_PurchaseOrderItems_PurchaseOrderId", table: "PurchaseOrderItems", column: "PurchaseOrderId"); migrationBuilder.CreateIndex( name: "IX_PurchaseOrders_BillId", table: "PurchaseOrders", column: "BillId"); migrationBuilder.CreateIndex( name: "IX_PurchaseOrders_VendorId", table: "PurchaseOrders", column: "VendorId"); migrationBuilder.CreateIndex( name: "IX_QuoteChangeHistories_ChangedByUserId", table: "QuoteChangeHistories", column: "ChangedByUserId"); migrationBuilder.CreateIndex( name: "IX_QuoteChangeHistories_CompanyId", table: "QuoteChangeHistories", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_QuoteChangeHistories_QuoteId", table: "QuoteChangeHistories", column: "QuoteId"); migrationBuilder.CreateIndex( name: "IX_QuoteItemCoats_CompanyId", table: "QuoteItemCoats", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_QuoteItemCoats_InventoryItemId", table: "QuoteItemCoats", column: "InventoryItemId"); migrationBuilder.CreateIndex( name: "IX_QuoteItemCoats_QuoteItemId", table: "QuoteItemCoats", column: "QuoteItemId"); migrationBuilder.CreateIndex( name: "IX_QuoteItemCoats_VendorId", table: "QuoteItemCoats", column: "VendorId"); migrationBuilder.CreateIndex( name: "IX_QuoteItemPrepServices_BlastSetupId", table: "QuoteItemPrepServices", column: "BlastSetupId"); migrationBuilder.CreateIndex( name: "IX_QuoteItemPrepServices_CompanyId", table: "QuoteItemPrepServices", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_QuoteItemPrepServices_PrepServiceId", table: "QuoteItemPrepServices", column: "PrepServiceId"); migrationBuilder.CreateIndex( name: "IX_QuoteItemPrepServices_QuoteItemId", table: "QuoteItemPrepServices", column: "QuoteItemId"); migrationBuilder.CreateIndex( name: "IX_QuoteItems_AiPredictionId", table: "QuoteItems", column: "AiPredictionId"); migrationBuilder.CreateIndex( name: "IX_QuoteItems_CatalogItemId", table: "QuoteItems", column: "CatalogItemId"); migrationBuilder.CreateIndex( name: "IX_QuoteItems_QuoteId", table: "QuoteItems", column: "QuoteId"); migrationBuilder.CreateIndex( name: "IX_QuotePhotos_QuoteId", table: "QuotePhotos", column: "QuoteId"); migrationBuilder.CreateIndex( name: "IX_QuotePhotos_UploadedById", table: "QuotePhotos", column: "UploadedById"); migrationBuilder.CreateIndex( name: "IX_QuotePrepServices_PrepServiceId", table: "QuotePrepServices", column: "PrepServiceId"); migrationBuilder.CreateIndex( name: "IX_QuotePrepServices_QuoteId", table: "QuotePrepServices", column: "QuoteId"); migrationBuilder.CreateIndex( name: "IX_Quotes_ApprovalToken", table: "Quotes", column: "ApprovalToken", unique: true, filter: "[ApprovalToken] IS NOT NULL"); migrationBuilder.CreateIndex( name: "IX_Quotes_CompanyId", table: "Quotes", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_Quotes_CompanyId_ExpirationDate", table: "Quotes", columns: new[] { "CompanyId", "ExpirationDate" }); migrationBuilder.CreateIndex( name: "IX_Quotes_CompanyId_IsDeleted", table: "Quotes", columns: new[] { "CompanyId", "IsDeleted" }); migrationBuilder.CreateIndex( name: "IX_Quotes_CompanyId_QuoteNumber", table: "Quotes", columns: new[] { "CompanyId", "QuoteNumber" }, unique: true); migrationBuilder.CreateIndex( name: "IX_Quotes_CompanyId_QuoteStatusId", table: "Quotes", columns: new[] { "CompanyId", "QuoteStatusId" }); migrationBuilder.CreateIndex( name: "IX_Quotes_CustomerId", table: "Quotes", column: "CustomerId"); migrationBuilder.CreateIndex( name: "IX_Quotes_ExpirationDate", table: "Quotes", column: "ExpirationDate"); migrationBuilder.CreateIndex( name: "IX_Quotes_OvenCostId", table: "Quotes", column: "OvenCostId"); migrationBuilder.CreateIndex( name: "IX_Quotes_PreparedById", table: "Quotes", column: "PreparedById"); migrationBuilder.CreateIndex( name: "IX_Quotes_QuoteStatusId", table: "Quotes", column: "QuoteStatusId"); migrationBuilder.CreateIndex( name: "IX_QuoteStatusLookups_CompanyId", table: "QuoteStatusLookups", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_QuoteStatusLookups_CompanyId_StatusCode", table: "QuoteStatusLookups", columns: new[] { "CompanyId", "StatusCode" }, unique: true); migrationBuilder.CreateIndex( name: "IX_Refunds_CreditMemoId", table: "Refunds", column: "CreditMemoId"); migrationBuilder.CreateIndex( name: "IX_Refunds_InvoiceId", table: "Refunds", column: "InvoiceId"); migrationBuilder.CreateIndex( name: "IX_Refunds_IssuedById", table: "Refunds", column: "IssuedById"); migrationBuilder.CreateIndex( name: "IX_Refunds_PaymentId", table: "Refunds", column: "PaymentId"); migrationBuilder.CreateIndex( name: "IX_ReworkRecords_JobId", table: "ReworkRecords", column: "JobId"); migrationBuilder.CreateIndex( name: "IX_ReworkRecords_JobItemId", table: "ReworkRecords", column: "JobItemId"); migrationBuilder.CreateIndex( name: "IX_ReworkRecords_ReworkJobId", table: "ReworkRecords", column: "ReworkJobId"); migrationBuilder.CreateIndex( name: "IX_UserPasskeys_CredentialId", table: "UserPasskeys", column: "CredentialId", unique: true); migrationBuilder.CreateIndex( name: "IX_VendorCreditApplications_BillId", table: "VendorCreditApplications", column: "BillId"); migrationBuilder.CreateIndex( name: "IX_VendorCreditApplications_VendorCreditId", table: "VendorCreditApplications", column: "VendorCreditId"); migrationBuilder.CreateIndex( name: "IX_VendorCreditLineItems_AccountId", table: "VendorCreditLineItems", column: "AccountId"); migrationBuilder.CreateIndex( name: "IX_VendorCreditLineItems_VendorCreditId", table: "VendorCreditLineItems", column: "VendorCreditId"); migrationBuilder.CreateIndex( name: "IX_VendorCredits_APAccountId", table: "VendorCredits", column: "APAccountId"); migrationBuilder.CreateIndex( name: "IX_VendorCredits_VendorId", table: "VendorCredits", column: "VendorId"); migrationBuilder.CreateIndex( name: "IX_Vendors_CompanyId", table: "Vendors", column: "CompanyId"); migrationBuilder.CreateIndex( name: "IX_Vendors_DefaultExpenseAccountId", table: "Vendors", column: "DefaultExpenseAccountId"); migrationBuilder.CreateIndex( name: "IX_YearEndCloses_JournalEntryId", table: "YearEndCloses", column: "JournalEntryId"); // Mark all pre-existing delta migrations as applied so EF does not attempt to // re-run them on a fresh database. InitialCreate already creates the full schema; // the deltas would fail with "column/object already exists" if allowed to run. // On existing databases these rows are already present, so the INSERT is skipped. migrationBuilder.Sql(@" DECLARE @ver NVARCHAR(32) = '8.0.11'; INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) SELECT v.[MigrationId], @ver FROM (VALUES ('20260316155002_Baseline'), ('20260317121938_AddAiContextProfile'), ('20260317205927_FixLaborItemQuantityDecimal'), ('20260318124847_AddJobTimeEntries'), ('20260318131500_AddJobShopAccessCode'), ('20260318132857_AddShopWorkerRoleCosts'), ('20260318134236_AddReworkTracking'), ('20260318222648_AddRefundsAndCreditMemos'), ('20260319023827_AddJobTemplates'), ('20260319154506_AddGiftCertificates'), ('20260320002450_AddRefundStoreCreditLink'), ('20260320005106_AddQuoteItemIsAiItem'), ('20260320011057_AddQuotePricingSnapshot'), ('20260320231509_AddStripeConnectAndOnlinePayments'), ('20260326230438_AddQuotePhotoSubscriptionLimits'), ('20260328133627_AddJobPhotoIsAiAnalysisPhoto'), ('20260329003300_AddJobDiscountRushFields'), ('20260329005838_AddDeposits'), ('20260329134753_AddMerchandise'), ('20260329141137_AddGiftCertificateInvoiceItems'), ('20260330234034_AddSalesItemFields'), ('20260401125630_AddQuoteDepositPaymentFields'), ('20260401131724_AddUniqueDocumentNumberConstraints'), ('20260401141653_FixGiftCertificateUniqueIndexPerCompany'), ('20260402015422_AddInvoiceExternalReference'), ('20260402032156_AddMigratingFromQuickBooks'), ('20260402165758_AddQbMigrationStateJson'), ('20260402184721_FixInventorySkuUniqueIndex'), ('20260402185216_FixJobShopAccessCodeUniqueIndex'), ('20260402224949_AddDashboardTips'), ('20260403000650_AddStripeWebhookEvents'), ('20260404151636_AddAllowAccountingToPlan'), ('20260404194126_AddBillReceiptFilePath'), ('20260404200000_SeedInitialDashboardTips'), ('20260404210000_AddReleaseNotes'), ('20260405003350_AddPerformanceIndexes'), ('20260405155653_AddPlatformSettings'), ('20260405161241_AddPlatformSettingsV2'), ('20260405162137_UpdateAdminEmailDescription'), ('20260406191501_MakeBillLineItemAccountIdNullable'), ('20260408205345_AddJobIntakeFields'), ('20260409013822_AddInAppNotifications'), ('20260410021934_AddLegalCompliance'), ('20260410025353_AddAiFeaturesToPlanConfig'), ('20260410032027_AddTrialsEnabledSetting'), ('20260412005228_AddMaxTenantsSetting'), ('20260412174157_AddCompanyFeatureOverrides'), ('20260412183411_AddIsAnnualBilling'), ('20260414135810_AddPendingRegistrationSession'), ('20260415010203_AddSetupWizardCompletionTracking'), ('20260415120000_AddAuditLogTable'), ('20260417044255_AddInventoryTransactionJobId'), ('20260417160645_AddSamplePanel'), ('20260417170543_DropItemIsCoatingColumn'), ('20260418220837_AddWorkOrderTemplate'), ('20260419201818_AddInvoiceNumberPrefix'), ('20260419215302_AddContactSubmissions'), ('20260420233610_AddShopCapabilityProfile'), ('20260421003346_AddCompanyBlastSetups'), ('20260421012409_AddCompanyBlastSetupsTable'), ('20260421125956_AddQuoteCostBreakdownColumns2'), ('20260421132123_AddQuoteItemCostSnapshot'), ('20260421135923_AddPricingModeAndHideDiscount'), ('20260422040844_AddUserBan'), ('20260422042129_AddBannedIps'), ('20260423011936_AddAiUsageLog'), ('20260423015446_AddSmsOptedOutAt'), ('20260424232825_AddFacilityOverheadFields'), ('20260425123256_AddCatalogItemImages'), ('20260425182712_AddUserPasskeys'), ('20260425223454_AddCatalogPriceCheckReport'), ('20260426122625_AddAiCatalogPriceCheckGating'), ('20260426142825_AddPasskeyPromptDismissed'), ('20260428164026_AddGuidedActivationFields'), ('20260429220019_AddJobQuoteSnapshotUpdatedAt'), ('20260429221217_AddInventoryItemImageUrl'), ('20260502000902_AddSmsGating'), ('20260502002653_AddCompanySmsAgreement'), ('20260503165943_AddPowderCatalogItem'), ('20260503203048_AddPowderCatalogSpecFields'), ('20260505161757_AddGracePeriodDaysSetting'), ('20260505191333_AddGracePeriodAppliesToTrials'), ('20260505231018_MigrateTimeEntriesToUserId'), ('20260506020726_AddDataProtectionKeys'), ('20260506123541_AddSpecificGravityToPowderCatalogAndInventory'), ('20260506195959_AddQuoteItemIncludePrepCost'), ('20260507224749_AddCustomerBillingEmail'), ('20260508002432_AddProspectSmsConsent'), ('20260508013707_AddInventoryIsIncoming'), ('20260508142155_AddShopSuppliesAmountToJob'), ('20260510011252_AddJobTemplateItemSalesFields'), ('20260510032513_AddAccountingMethod'), ('20260510034535_AddJournalEntries'), ('20260510035830_AddVendorCredits'), ('20260510040609_AddBankReconciliation'), ('20260510144855_AddPaymentTermsAndTaxRates'), ('20260510150158_AddRecurringTemplates'), ('20260510152530_DropOrphanVendorCreditId1'), ('20260510160053_AddFixedAssetsLockAnd1099'), ('20260510165511_AddBudgetsAndYearEndClose'), ('20260510234058_AddAccountantRolePermissions'), ('20260511142327_AddJobOvenBatchCost'), ('20260513013449_AddMissingPlatformSettings'), ('20260513133925_SeedSalesDiscountsAccount'), ('20260513142448_AccountingGapsPhase2'), ('20260513145734_AccountingDepositsGL'), ('20260513184018_AddKioskIntakeSession'), ('20260513192847_AddInvoicePublicViewToken'), ('20260514022731_AddKioskIntakeOutputSetting'), ('20260514200543_AddJobOvenBatchFields'), ('20260514204347_AddJobItemIsAiItem'), ('20260515003030_AddGiftCertificateBatchId'), ('20260515162936_AddJobPricingSnapshot'), ('20260515194344_AddQuotePricingSnapshotFields'), ('20260515234413_AddLaborCostPerHour'), ('20260519151303_AddAppointmentReminderSentAt') ) AS v([MigrationId]) WHERE NOT EXISTS ( SELECT 1 FROM [__EFMigrationsHistory] WHERE [MigrationId] = v.[MigrationId] ); "); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "AiUsageLogs"); migrationBuilder.DropTable( name: "AnnouncementDismissals"); migrationBuilder.DropTable( name: "Appointments"); migrationBuilder.DropTable( name: "AspNetRoleClaims"); migrationBuilder.DropTable( name: "AspNetUserClaims"); migrationBuilder.DropTable( name: "AspNetUserLogins"); migrationBuilder.DropTable( name: "AspNetUserRoles"); migrationBuilder.DropTable( name: "AspNetUserTokens"); migrationBuilder.DropTable( name: "AuditLogs"); migrationBuilder.DropTable( name: "BankReconciliations"); migrationBuilder.DropTable( name: "BannedIps"); migrationBuilder.DropTable( name: "BillLineItems"); migrationBuilder.DropTable( name: "BillPayments"); migrationBuilder.DropTable( name: "BudgetLines"); migrationBuilder.DropTable( name: "BugReportAttachments"); migrationBuilder.DropTable( name: "CatalogPriceCheckReports"); migrationBuilder.DropTable( name: "CompanyOperatingCosts"); migrationBuilder.DropTable( name: "CompanyPreferences"); migrationBuilder.DropTable( name: "CompanySmsAgreements"); migrationBuilder.DropTable( name: "ContactSubmissions"); migrationBuilder.DropTable( name: "CreditMemoApplications"); migrationBuilder.DropTable( name: "CustomerNotes"); migrationBuilder.DropTable( name: "DashboardTips"); migrationBuilder.DropTable( name: "DataProtectionKeys"); migrationBuilder.DropTable( name: "Deposits"); migrationBuilder.DropTable( name: "Expenses"); migrationBuilder.DropTable( name: "FixedAssetDepreciationEntries"); migrationBuilder.DropTable( name: "GiftCertificateRedemptions"); migrationBuilder.DropTable( name: "InAppNotifications"); migrationBuilder.DropTable( name: "InvoiceItems"); migrationBuilder.DropTable( name: "JobChangeHistories"); migrationBuilder.DropTable( name: "JobDailyPriorities"); migrationBuilder.DropTable( name: "JobItemPrepServices"); migrationBuilder.DropTable( name: "JobNotes"); migrationBuilder.DropTable( name: "JobPhotos"); migrationBuilder.DropTable( name: "JobPrepServices"); migrationBuilder.DropTable( name: "JobStatusHistory"); migrationBuilder.DropTable( name: "JobTemplateItemCoats"); migrationBuilder.DropTable( name: "JobTemplateItemPrepServices"); migrationBuilder.DropTable( name: "JobTimeEntries"); migrationBuilder.DropTable( name: "JournalEntryLines"); migrationBuilder.DropTable( name: "KioskSessions"); migrationBuilder.DropTable( name: "MaintenanceRecords"); migrationBuilder.DropTable( name: "ManufacturerLookupPatterns"); migrationBuilder.DropTable( name: "NotificationLogs"); migrationBuilder.DropTable( name: "NotificationTemplates"); migrationBuilder.DropTable( name: "OvenBatchItems"); migrationBuilder.DropTable( name: "PendingRegistrationSessions"); migrationBuilder.DropTable( name: "PlatformSettings"); migrationBuilder.DropTable( name: "PowderCatalogItems"); migrationBuilder.DropTable( name: "PowderUsageLogs"); migrationBuilder.DropTable( name: "PurchaseOrderItems"); migrationBuilder.DropTable( name: "QuoteChangeHistories"); migrationBuilder.DropTable( name: "QuoteItemCoats"); migrationBuilder.DropTable( name: "QuoteItemPrepServices"); migrationBuilder.DropTable( name: "QuotePhotos"); migrationBuilder.DropTable( name: "QuotePrepServices"); migrationBuilder.DropTable( name: "RecurringTemplates"); migrationBuilder.DropTable( name: "Refunds"); migrationBuilder.DropTable( name: "ReleaseNotes"); migrationBuilder.DropTable( name: "StripeWebhookEvents"); migrationBuilder.DropTable( name: "SubscriptionPlanConfigs"); migrationBuilder.DropTable( name: "TaxRates"); migrationBuilder.DropTable( name: "TermsAcceptances"); migrationBuilder.DropTable( name: "UserPasskeys"); migrationBuilder.DropTable( name: "VendorCreditApplications"); migrationBuilder.DropTable( name: "VendorCreditLineItems"); migrationBuilder.DropTable( name: "YearEndCloses"); migrationBuilder.DropTable( name: "Announcements"); migrationBuilder.DropTable( name: "AppointmentStatusLookups"); migrationBuilder.DropTable( name: "AppointmentTypeLookups"); migrationBuilder.DropTable( name: "AspNetRoles"); migrationBuilder.DropTable( name: "Budgets"); migrationBuilder.DropTable( name: "BugReports"); migrationBuilder.DropTable( name: "FixedAssets"); migrationBuilder.DropTable( name: "GiftCertificates"); migrationBuilder.DropTable( name: "JobTemplateItems"); migrationBuilder.DropTable( name: "OvenBatches"); migrationBuilder.DropTable( name: "InventoryTransactions"); migrationBuilder.DropTable( name: "JobItemCoats"); migrationBuilder.DropTable( name: "CompanyBlastSetups"); migrationBuilder.DropTable( name: "QuoteItems"); migrationBuilder.DropTable( name: "PrepServices"); migrationBuilder.DropTable( name: "CreditMemos"); migrationBuilder.DropTable( name: "Payments"); migrationBuilder.DropTable( name: "VendorCredits"); migrationBuilder.DropTable( name: "JournalEntries"); migrationBuilder.DropTable( name: "JobTemplates"); migrationBuilder.DropTable( name: "Equipment"); migrationBuilder.DropTable( name: "PurchaseOrders"); migrationBuilder.DropTable( name: "ReworkRecords"); migrationBuilder.DropTable( name: "Invoices"); migrationBuilder.DropTable( name: "Bills"); migrationBuilder.DropTable( name: "JobItems"); migrationBuilder.DropTable( name: "AiItemPredictions"); migrationBuilder.DropTable( name: "CatalogItems"); migrationBuilder.DropTable( name: "Jobs"); migrationBuilder.DropTable( name: "CatalogCategories"); migrationBuilder.DropTable( name: "InventoryItems"); migrationBuilder.DropTable( name: "JobPriorityLookups"); migrationBuilder.DropTable( name: "JobStatusLookups"); migrationBuilder.DropTable( name: "Quotes"); migrationBuilder.DropTable( name: "InventoryCategoryLookups"); migrationBuilder.DropTable( name: "Vendors"); migrationBuilder.DropTable( name: "AspNetUsers"); migrationBuilder.DropTable( name: "Customers"); migrationBuilder.DropTable( name: "OvenCosts"); migrationBuilder.DropTable( name: "QuoteStatusLookups"); migrationBuilder.DropTable( name: "Accounts"); migrationBuilder.DropTable( name: "PricingTiers"); migrationBuilder.DropTable( name: "Companies"); } } }