Files
PowderCoatingLogix/src/PowderCoating.Infrastructure/Migrations/20260101000000_InitialCreate.cs
T
spouliot 2bf8871892 Fix NoExtraLayerCharge persistence, appointment reminders, coat notes display, scroll restoration, and invoice Send dead-button
- Appointment reminders: add AppointmentReminderBackgroundService (60s poll), ReminderSentAt
  dedup stamp, NotifyAppointmentReminderAsync sends both customer email and creator staff email;
  AppointmentReminderStaff notification type + default template added; DateTime.Now used instead
  of UtcNow to match locally-stored ScheduledStartTime; ToLocalTime() double-conversion removed

- NoExtraLayerCharge not persisted: flag existed on CreateQuoteItemCoatDto and was used by
  pricing engine but never written to JobItemCoat/QuoteItemCoat entities — every edit reset it
  to false and re-applied the extra layer charge; added column to both entities (migration
  AddNoExtraLayerChargeToCoats), both read DTOs, all 3 JobItemAssemblyService overloads,
  JobItemCoatSeed inner class, and existingItemsData JSON in all 5 wizard views; fixed JS
  template path that hard-coded noExtraLayerCharge: false

- Coat notes not visible: notes were rendered in desktop job details but missing from the wizard
  item card summary and the mobile card view; both fixed

- Scroll position lost on item save: sessionStorage save/restore added to item-wizard.js owner
  form submit handler; path-keyed so cross-page navigation does not restore stale position;
  requestAnimationFrame used for reliable mobile scroll restoration

- Invoice Send dead button: #sendChannelModal was gated inside @if (isDraft) but the button
  targeting it fires for Sent/Overdue invoices too when customer has both email and SMS; modal
  moved outside the Draft guard

- InitialCreate migration added for fresh database installs; Baseline migration guarded with
  IF OBJECT_ID check so it no-ops on fresh DBs; Razor scoping bug fixed in Customers/Index.cshtml

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 15:48:16 -04:00

6498 lines
366 KiB
C#

using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
namespace PowderCoating.Infrastructure.Migrations
{
/// <inheritdoc />
public partial class InitialCreate : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Accounts",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
AccountNumber = table.Column<string>(type: "nvarchar(max)", nullable: false),
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
AccountType = table.Column<int>(type: "int", nullable: false),
AccountSubType = table.Column<int>(type: "int", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
ParentAccountId = table.Column<int>(type: "int", nullable: true),
IsSystem = table.Column<bool>(type: "bit", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
OpeningBalance = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
OpeningBalanceDate = table.Column<DateTime>(type: "datetime2", nullable: true),
CurrentBalance = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
PredictedSurfaceAreaSqFt = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PredictedMinutes = table.Column<int>(type: "int", nullable: false),
PredictedComplexity = table.Column<string>(type: "nvarchar(max)", nullable: false),
PredictedUnitPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Confidence = table.Column<string>(type: "nvarchar(max)", nullable: false),
Reasoning = table.Column<string>(type: "nvarchar(max)", nullable: true),
AiTags = table.Column<string>(type: "nvarchar(max)", nullable: true),
ConversationRounds = table.Column<int>(type: "int", nullable: false),
UserOverrodeEstimate = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AiItemPredictions", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Announcements",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Title = table.Column<string>(type: "nvarchar(max)", nullable: false),
Message = table.Column<string>(type: "nvarchar(max)", nullable: false),
Type = table.Column<string>(type: "nvarchar(max)", nullable: false),
Target = table.Column<string>(type: "nvarchar(max)", nullable: false),
TargetPlan = table.Column<int>(type: "int", nullable: true),
TargetCompanyId = table.Column<int>(type: "int", nullable: true),
StartsAt = table.Column<DateTime>(type: "datetime2", nullable: false),
ExpiresAt = table.Column<DateTime>(type: "datetime2", nullable: true),
IsDismissible = table.Column<bool>(type: "bit", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
CreatedByUserId = table.Column<string>(type: "nvarchar(max)", nullable: false),
CreatedByUserName = table.Column<string>(type: "nvarchar(max)", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Announcements", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AppointmentStatusLookups",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
StatusCode = table.Column<string>(type: "nvarchar(max)", nullable: false),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
ColorClass = table.Column<string>(type: "nvarchar(max)", nullable: false),
IconClass = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
IsSystemDefined = table.Column<bool>(type: "bit", nullable: false),
IsTerminalStatus = table.Column<bool>(type: "bit", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AppointmentStatusLookups", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AppointmentTypeLookups",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TypeCode = table.Column<string>(type: "nvarchar(max)", nullable: false),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
ColorClass = table.Column<string>(type: "nvarchar(max)", nullable: false),
IconClass = table.Column<string>(type: "nvarchar(max)", nullable: true),
RequiresJobLink = table.Column<bool>(type: "bit", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
IsSystemDefined = table.Column<bool>(type: "bit", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AppointmentTypeLookups", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AspNetRoles",
columns: table => new
{
Id = table.Column<string>(type: "nvarchar(450)", nullable: false),
Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
NormalizedName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
ConcurrencyStamp = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetRoles", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AuditLogs",
columns: table => new
{
Id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
UserId = table.Column<string>(type: "nvarchar(max)", nullable: true),
UserName = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: true),
CompanyName = table.Column<string>(type: "nvarchar(max)", nullable: true),
Action = table.Column<string>(type: "nvarchar(max)", nullable: false),
EntityType = table.Column<string>(type: "nvarchar(450)", nullable: false),
EntityId = table.Column<string>(type: "nvarchar(450)", nullable: true),
EntityDescription = table.Column<string>(type: "nvarchar(max)", nullable: true),
OldValues = table.Column<string>(type: "nvarchar(max)", nullable: true),
NewValues = table.Column<string>(type: "nvarchar(max)", nullable: true),
IpAddress = table.Column<string>(type: "nvarchar(max)", nullable: true),
Timestamp = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AuditLogs", x => x.Id);
});
migrationBuilder.CreateTable(
name: "BannedIps",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
IpAddress = table.Column<string>(type: "nvarchar(max)", nullable: false),
Reason = table.Column<string>(type: "nvarchar(max)", nullable: true),
BannedByUserId = table.Column<string>(type: "nvarchar(max)", nullable: true),
BannedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
ExpiresAt = table.Column<DateTime>(type: "datetime2", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_BannedIps", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Budgets",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
FiscalYear = table.Column<int>(type: "int", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDefault = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Budgets", x => x.Id);
});
migrationBuilder.CreateTable(
name: "BugReports",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Title = table.Column<string>(type: "nvarchar(max)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: false),
SubmittedByUserId = table.Column<string>(type: "nvarchar(max)", nullable: false),
SubmittedByUserName = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyName = table.Column<string>(type: "nvarchar(max)", nullable: true),
Priority = table.Column<int>(type: "int", nullable: false),
Status = table.Column<int>(type: "int", nullable: false),
ResolutionNotes = table.Column<string>(type: "nvarchar(max)", nullable: true),
ResolvedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
ResolvedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_BugReports", x => x.Id);
});
migrationBuilder.CreateTable(
name: "CatalogPriceCheckReports",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
RunAt = table.Column<DateTime>(type: "datetime2", nullable: false),
ItemsChecked = table.Column<int>(type: "int", nullable: false),
ResultsJson = table.Column<string>(type: "nvarchar(max)", nullable: false),
OperatingCostsSummary = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_CatalogPriceCheckReports", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Companies",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CompanyName = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyCode = table.Column<string>(type: "nvarchar(450)", nullable: true),
PrimaryContactName = table.Column<string>(type: "nvarchar(max)", nullable: false),
PrimaryContactEmail = table.Column<string>(type: "nvarchar(max)", nullable: false),
Phone = table.Column<string>(type: "nvarchar(max)", nullable: true),
Address = table.Column<string>(type: "nvarchar(max)", nullable: true),
City = table.Column<string>(type: "nvarchar(max)", nullable: true),
State = table.Column<string>(type: "nvarchar(max)", nullable: true),
ZipCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
SubscriptionStartDate = table.Column<DateTime>(type: "datetime2", nullable: false),
SubscriptionEndDate = table.Column<DateTime>(type: "datetime2", nullable: true),
SubscriptionPlan = table.Column<int>(type: "int", nullable: false),
SubscriptionStatus = table.Column<int>(type: "int", nullable: false),
StripeCustomerId = table.Column<string>(type: "nvarchar(max)", nullable: true),
StripeSubscriptionId = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsComped = table.Column<bool>(type: "bit", nullable: false),
StripeAccountId = table.Column<string>(type: "nvarchar(max)", nullable: true),
StripeConnectStatus = table.Column<int>(type: "int", nullable: false),
OnlinePaymentSurchargeType = table.Column<int>(type: "int", nullable: false),
OnlinePaymentSurchargeValue = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
OnlineSurchargeAcknowledged = table.Column<bool>(type: "bit", nullable: false),
SubscriptionNotes = table.Column<string>(type: "nvarchar(max)", nullable: true),
MaxUsersOverride = table.Column<int>(type: "int", nullable: true),
MaxActiveJobsOverride = table.Column<int>(type: "int", nullable: true),
MaxCustomersOverride = table.Column<int>(type: "int", nullable: true),
MaxQuotesOverride = table.Column<int>(type: "int", nullable: true),
MaxCatalogItemsOverride = table.Column<int>(type: "int", nullable: true),
MaxJobPhotosOverride = table.Column<int>(type: "int", nullable: true),
MaxQuotePhotosOverride = table.Column<int>(type: "int", nullable: true),
MaxAiPhotoQuotesPerMonthOverride = table.Column<int>(type: "int", nullable: true),
AiPhotoQuotesEnabled = table.Column<bool>(type: "bit", nullable: false),
AiInventoryAssistEnabled = table.Column<bool>(type: "bit", nullable: false),
AiCatalogPriceCheckEnabled = table.Column<bool>(type: "bit", nullable: false),
IsAnnualBilling = table.Column<bool>(type: "bit", nullable: false),
OnlinePaymentsOverride = table.Column<bool>(type: "bit", nullable: true),
AccountingOverride = table.Column<bool>(type: "bit", nullable: true),
SmsEnabled = table.Column<bool>(type: "bit", nullable: false),
SmsDisabledByAdmin = table.Column<bool>(type: "bit", nullable: false),
MarketingEmailOptOut = table.Column<bool>(type: "bit", nullable: false),
MarketingUnsubscribeToken = table.Column<string>(type: "nvarchar(max)", nullable: false),
AccountingMethod = table.Column<int>(type: "int", nullable: false),
BookLockedThrough = table.Column<DateTime>(type: "datetime2", nullable: true),
TimeZone = table.Column<string>(type: "nvarchar(max)", nullable: true),
LogoData = table.Column<byte[]>(type: "varbinary(max)", nullable: true),
LogoContentType = table.Column<string>(type: "nvarchar(max)", nullable: true),
LogoFilePath = table.Column<string>(type: "nvarchar(max)", nullable: true),
KioskActivationToken = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Companies", x => x.Id);
});
migrationBuilder.CreateTable(
name: "CompanySmsAgreements",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
AgreedByUserId = table.Column<string>(type: "nvarchar(max)", nullable: false),
AgreedByUserName = table.Column<string>(type: "nvarchar(max)", nullable: false),
AgreedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
IpAddress = table.Column<string>(type: "nvarchar(max)", nullable: true),
UserAgent = table.Column<string>(type: "nvarchar(max)", nullable: true),
TermsVersion = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_CompanySmsAgreements", x => x.Id);
});
migrationBuilder.CreateTable(
name: "ContactSubmissions",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
SenderName = table.Column<string>(type: "nvarchar(max)", nullable: false),
SenderEmail = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Category = table.Column<string>(type: "nvarchar(max)", nullable: false),
Subject = table.Column<string>(type: "nvarchar(max)", nullable: false),
Message = table.Column<string>(type: "nvarchar(max)", nullable: false),
IsRead = table.Column<bool>(type: "bit", nullable: false),
ReadAt = table.Column<DateTime>(type: "datetime2", nullable: true),
ReadByUserId = table.Column<string>(type: "nvarchar(max)", nullable: true),
ReadByUserName = table.Column<string>(type: "nvarchar(max)", nullable: true),
AdminNotes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_ContactSubmissions", x => x.Id);
});
migrationBuilder.CreateTable(
name: "DashboardTips",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TipText = table.Column<string>(type: "nvarchar(max)", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_DashboardTips", x => x.Id);
});
migrationBuilder.CreateTable(
name: "DataProtectionKeys",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
FriendlyName = table.Column<string>(type: "nvarchar(max)", nullable: true),
Xml = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_DataProtectionKeys", x => x.Id);
});
migrationBuilder.CreateTable(
name: "JournalEntries",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
EntryNumber = table.Column<string>(type: "nvarchar(max)", nullable: false),
EntryDate = table.Column<DateTime>(type: "datetime2", nullable: false),
Reference = table.Column<string>(type: "nvarchar(max)", nullable: true),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
Status = table.Column<int>(type: "int", nullable: false),
IsReversal = table.Column<bool>(type: "bit", nullable: false),
ReversalOfId = table.Column<int>(type: "int", nullable: true),
PostedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
PostedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ManufacturerName = table.Column<string>(type: "nvarchar(max)", nullable: false),
ProductUrlTemplate = table.Column<string>(type: "nvarchar(max)", nullable: true),
SlugTransform = table.Column<string>(type: "nvarchar(max)", nullable: false),
Domain = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_ManufacturerLookupPatterns", x => x.Id);
});
migrationBuilder.CreateTable(
name: "PendingRegistrationSessions",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Token = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyName = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyPhone = table.Column<string>(type: "nvarchar(max)", nullable: true),
FirstName = table.Column<string>(type: "nvarchar(max)", nullable: false),
LastName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Email = table.Column<string>(type: "nvarchar(max)", nullable: false),
Plan = table.Column<int>(type: "int", nullable: false),
IsAnnual = table.Column<bool>(type: "bit", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
IsCompleted = table.Column<bool>(type: "bit", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_PendingRegistrationSessions", x => x.Id);
});
migrationBuilder.CreateTable(
name: "PlatformSettings",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Key = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
Value = table.Column<string>(type: "nvarchar(max)", nullable: true),
Label = table.Column<string>(type: "nvarchar(max)", nullable: true),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
GroupName = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_PlatformSettings", x => x.Id);
});
migrationBuilder.CreateTable(
name: "PowderCatalogItems",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
VendorName = table.Column<string>(type: "nvarchar(450)", nullable: false),
Sku = table.Column<string>(type: "nvarchar(450)", nullable: false),
ColorName = table.Column<string>(type: "nvarchar(450)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
UnitPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PriceTiersJson = table.Column<string>(type: "nvarchar(max)", nullable: true),
ImageUrl = table.Column<string>(type: "nvarchar(max)", nullable: true),
SdsUrl = table.Column<string>(type: "nvarchar(max)", nullable: true),
TdsUrl = table.Column<string>(type: "nvarchar(max)", nullable: true),
ApplicationGuideUrl = table.Column<string>(type: "nvarchar(max)", nullable: true),
ProductUrl = table.Column<string>(type: "nvarchar(max)", nullable: true),
CureTemperatureF = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
CureTimeMinutes = table.Column<int>(type: "int", nullable: true),
Finish = table.Column<string>(type: "nvarchar(max)", nullable: true),
ColorFamilies = table.Column<string>(type: "nvarchar(max)", nullable: true),
RequiresClearCoat = table.Column<bool>(type: "bit", nullable: true),
CoverageSqFtPerLb = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
SpecificGravity = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
TransferEfficiency = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
IsDiscontinued = table.Column<bool>(type: "bit", nullable: false),
IsUserContributed = table.Column<bool>(type: "bit", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
LastSyncedAt = table.Column<DateTime>(type: "datetime2", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_PowderCatalogItems", x => x.Id);
});
migrationBuilder.CreateTable(
name: "PrepServices",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ServiceName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
RequiresBlastSetup = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_PrepServices", x => x.Id);
});
migrationBuilder.CreateTable(
name: "RecurringTemplates",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
TemplateType = table.Column<int>(type: "int", nullable: false),
Frequency = table.Column<int>(type: "int", nullable: false),
IntervalCount = table.Column<int>(type: "int", nullable: false),
NextFireDate = table.Column<DateTime>(type: "datetime2", nullable: false),
EndDate = table.Column<DateTime>(type: "datetime2", nullable: true),
MaxOccurrences = table.Column<int>(type: "int", nullable: true),
OccurrenceCount = table.Column<int>(type: "int", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
TemplateData = table.Column<string>(type: "nvarchar(max)", nullable: false),
LastError = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_RecurringTemplates", x => x.Id);
});
migrationBuilder.CreateTable(
name: "ReleaseNotes",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Version = table.Column<string>(type: "nvarchar(max)", nullable: false),
Title = table.Column<string>(type: "nvarchar(max)", nullable: false),
Body = table.Column<string>(type: "nvarchar(max)", nullable: false),
Tag = table.Column<string>(type: "nvarchar(max)", nullable: false),
IsPublished = table.Column<bool>(type: "bit", nullable: false),
ReleasedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedByUserId = table.Column<string>(type: "nvarchar(max)", nullable: true),
CreatedByUserName = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_ReleaseNotes", x => x.Id);
});
migrationBuilder.CreateTable(
name: "StripeWebhookEvents",
columns: table => new
{
Id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
EventId = table.Column<string>(type: "nvarchar(max)", nullable: false),
EventType = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: true),
RawJson = table.Column<string>(type: "nvarchar(max)", nullable: false),
Status = table.Column<int>(type: "int", nullable: false),
ErrorMessage = table.Column<string>(type: "nvarchar(max)", nullable: true),
ReceivedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
ProcessedAt = table.Column<DateTime>(type: "datetime2", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_StripeWebhookEvents", x => x.Id);
});
migrationBuilder.CreateTable(
name: "SubscriptionPlanConfigs",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Plan = table.Column<int>(type: "int", nullable: false),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
MaxUsers = table.Column<int>(type: "int", nullable: false),
MaxActiveJobs = table.Column<int>(type: "int", nullable: false),
MaxCustomers = table.Column<int>(type: "int", nullable: false),
MaxQuotes = table.Column<int>(type: "int", nullable: false),
MaxCatalogItems = table.Column<int>(type: "int", nullable: false),
MaxJobPhotos = table.Column<int>(type: "int", nullable: false),
MaxQuotePhotos = table.Column<int>(type: "int", nullable: false),
MaxAiPhotoQuotesPerMonth = table.Column<int>(type: "int", nullable: false),
MonthlyPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
AnnualPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
StripePriceIdMonthly = table.Column<string>(type: "nvarchar(max)", nullable: true),
StripePriceIdAnnual = table.Column<string>(type: "nvarchar(max)", nullable: true),
AllowOnlinePayments = table.Column<bool>(type: "bit", nullable: false),
AllowAccounting = table.Column<bool>(type: "bit", nullable: false),
AllowAiPhotoQuotes = table.Column<bool>(type: "bit", nullable: false),
AllowAiInventoryAssist = table.Column<bool>(type: "bit", nullable: false),
AllowAiCatalogPriceCheck = table.Column<bool>(type: "bit", nullable: false),
AllowSms = table.Column<bool>(type: "bit", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
SortOrder = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_SubscriptionPlanConfigs", x => x.Id);
});
migrationBuilder.CreateTable(
name: "TaxRates",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
Rate = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
State = table.Column<string>(type: "nvarchar(max)", nullable: true),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDefault = table.Column<bool>(type: "bit", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TaxRates", x => x.Id);
});
migrationBuilder.CreateTable(
name: "TermsAcceptances",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
UserId = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
TosVersion = table.Column<string>(type: "nvarchar(max)", nullable: false),
AcceptedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
IpAddress = table.Column<string>(type: "nvarchar(max)", nullable: true),
UserAgent = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TermsAcceptances", x => x.Id);
});
migrationBuilder.CreateTable(
name: "UserPasskeys",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
UserId = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CredentialId = table.Column<byte[]>(type: "varbinary(900)", nullable: false),
PublicKey = table.Column<byte[]>(type: "varbinary(max)", nullable: false),
UserHandle = table.Column<byte[]>(type: "varbinary(max)", nullable: false),
SignCount = table.Column<long>(type: "bigint", nullable: false),
DeviceFriendlyName = table.Column<string>(type: "nvarchar(max)", nullable: true),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
LastUsedAt = table.Column<DateTime>(type: "datetime2", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_UserPasskeys", x => x.Id);
});
migrationBuilder.CreateTable(
name: "BankReconciliations",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
AccountId = table.Column<int>(type: "int", nullable: false),
StatementDate = table.Column<DateTime>(type: "datetime2", nullable: false),
BeginningBalance = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
EndingBalance = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Status = table.Column<int>(type: "int", nullable: false),
CompletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CompletedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
PurchaseDate = table.Column<DateTime>(type: "datetime2", nullable: false),
PurchaseCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
SalvageValue = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
UsefulLifeMonths = table.Column<int>(type: "int", nullable: false),
AccumulatedDepreciation = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
IsDisposed = table.Column<bool>(type: "bit", nullable: false),
DisposalDate = table.Column<DateTime>(type: "datetime2", nullable: true),
AssetAccountId = table.Column<int>(type: "int", nullable: true),
DepreciationExpenseAccountId = table.Column<int>(type: "int", nullable: true),
AccumDepreciationAccountId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
AnnouncementId = table.Column<int>(type: "int", nullable: false),
UserId = table.Column<string>(type: "nvarchar(450)", nullable: false),
DismissedAt = table.Column<DateTime>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
RoleId = table.Column<string>(type: "nvarchar(450)", nullable: false),
ClaimType = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClaimValue = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
BudgetId = table.Column<int>(type: "int", nullable: false),
AccountId = table.Column<int>(type: "int", nullable: false),
Jan = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Feb = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Mar = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Apr = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
May = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Jun = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Jul = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Aug = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Sep = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Oct = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Nov = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Dec = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
BugReportId = table.Column<int>(type: "int", nullable: false),
BlobPath = table.Column<string>(type: "nvarchar(max)", nullable: false),
FileName = table.Column<string>(type: "nvarchar(max)", nullable: false),
ContentType = table.Column<string>(type: "nvarchar(max)", nullable: false),
FileSizeBytes = table.Column<long>(type: "bigint", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CompanyId = table.Column<int>(type: "int", nullable: false),
UserId = table.Column<string>(type: "nvarchar(max)", nullable: false),
Feature = table.Column<string>(type: "nvarchar(max)", nullable: false),
Success = table.Column<bool>(type: "bit", nullable: false),
InputLength = table.Column<int>(type: "int", nullable: false),
CalledAt = table.Column<DateTime>(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<string>(type: "nvarchar(450)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CompanyRole = table.Column<string>(type: "nvarchar(max)", nullable: true),
FirstName = table.Column<string>(type: "nvarchar(max)", nullable: false),
LastName = table.Column<string>(type: "nvarchar(max)", nullable: false),
EmployeeNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
HireDate = table.Column<DateTime>(type: "datetime2", nullable: false),
TerminationDate = table.Column<DateTime>(type: "datetime2", nullable: true),
Address = table.Column<string>(type: "nvarchar(max)", nullable: true),
City = table.Column<string>(type: "nvarchar(max)", nullable: true),
State = table.Column<string>(type: "nvarchar(max)", nullable: true),
ZipCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
Department = table.Column<string>(type: "nvarchar(max)", nullable: true),
Position = table.Column<string>(type: "nvarchar(max)", nullable: true),
Theme = table.Column<string>(type: "nvarchar(max)", nullable: true),
DateFormat = table.Column<string>(type: "nvarchar(max)", nullable: true),
TimeZone = table.Column<string>(type: "nvarchar(max)", nullable: true),
DashboardLayout = table.Column<int>(type: "int", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
CanViewShopFloor = table.Column<bool>(type: "bit", nullable: false),
CanManageJobs = table.Column<bool>(type: "bit", nullable: false),
CanManageInventory = table.Column<bool>(type: "bit", nullable: false),
CanManageCustomers = table.Column<bool>(type: "bit", nullable: false),
CanCreateQuotes = table.Column<bool>(type: "bit", nullable: false),
CanApproveQuotes = table.Column<bool>(type: "bit", nullable: false),
CanManageCalendar = table.Column<bool>(type: "bit", nullable: false),
CanViewCalendar = table.Column<bool>(type: "bit", nullable: false),
CanManageProducts = table.Column<bool>(type: "bit", nullable: false),
CanViewProducts = table.Column<bool>(type: "bit", nullable: false),
CanManageEquipment = table.Column<bool>(type: "bit", nullable: false),
CanManageVendors = table.Column<bool>(type: "bit", nullable: false),
CanManageMaintenance = table.Column<bool>(type: "bit", nullable: false),
CanManageInvoices = table.Column<bool>(type: "bit", nullable: false),
CanViewReports = table.Column<bool>(type: "bit", nullable: false),
CanManageBills = table.Column<bool>(type: "bit", nullable: false),
CanManageAccounting = table.Column<bool>(type: "bit", nullable: false),
ProfilePictureFilePath = table.Column<string>(type: "nvarchar(max)", nullable: true),
SidebarColor = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
LaborCostPerHour = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
LastLoginDate = table.Column<DateTime>(type: "datetime2", nullable: true),
PasskeyPromptDismissed = table.Column<bool>(type: "bit", nullable: false),
IsBanned = table.Column<bool>(type: "bit", nullable: false),
BannedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
BanReason = table.Column<string>(type: "nvarchar(max)", nullable: true),
BannedByUserId = table.Column<string>(type: "nvarchar(max)", nullable: true),
UserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
NormalizedUserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
Email = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
NormalizedEmail = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
EmailConfirmed = table.Column<bool>(type: "bit", nullable: false),
PasswordHash = table.Column<string>(type: "nvarchar(max)", nullable: true),
SecurityStamp = table.Column<string>(type: "nvarchar(max)", nullable: true),
ConcurrencyStamp = table.Column<string>(type: "nvarchar(max)", nullable: true),
PhoneNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
PhoneNumberConfirmed = table.Column<bool>(type: "bit", nullable: false),
TwoFactorEnabled = table.Column<bool>(type: "bit", nullable: false),
LockoutEnd = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
LockoutEnabled = table.Column<bool>(type: "bit", nullable: false),
AccessFailedCount = table.Column<int>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
ParentCategoryId = table.Column<int>(type: "int", nullable: true),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
IsMerchandise = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
SetupType = table.Column<int>(type: "int", nullable: false),
CompressorCfm = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
BlastNozzleSize = table.Column<int>(type: "int", nullable: false),
PrimarySubstrate = table.Column<int>(type: "int", nullable: false),
BlastRateSqFtPerHourOverride = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
IsDefault = table.Column<bool>(type: "bit", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CompanyId = table.Column<int>(type: "int", nullable: false),
StandardLaborRate = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
LaborCostPerHour = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
AdditionalCoatLaborPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
OvenOperatingCostPerHour = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
SandblasterCostPerHour = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CoatingBoothCostPerHour = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PowderCoatingCostPerSqFt = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PricingMode = table.Column<int>(type: "int", nullable: false),
GeneralMarkupPercentage = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TargetMarginPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TaxPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ShopSuppliesRate = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DefaultOvenCycleMinutes = table.Column<int>(type: "int", nullable: false),
RushChargeType = table.Column<string>(type: "nvarchar(max)", nullable: false),
RushChargePercentage = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
RushChargeFixedAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ShopMinimumCharge = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ComplexitySimplePercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ComplexityModeratePercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ComplexityComplexPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ComplexityExtremePercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
AiContextProfile = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: true),
ShopCapabilityTier = table.Column<int>(type: "int", nullable: false),
BlastSetupType = table.Column<int>(type: "int", nullable: false),
CompressorCfm = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
BlastNozzleSize = table.Column<int>(type: "int", nullable: false),
PrimaryBlastSubstrate = table.Column<int>(type: "int", nullable: false),
BlastRateSqFtPerHourOverride = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
CoatingGunType = table.Column<int>(type: "int", nullable: false),
CoatingRateSqFtPerHourOverride = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
MonthlyRent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
MonthlyUtilities = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
MonthlyBillableHours = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CompanyId = table.Column<int>(type: "int", nullable: false),
DefaultCurrency = table.Column<string>(type: "nvarchar(max)", nullable: false),
DefaultDateFormat = table.Column<string>(type: "nvarchar(max)", nullable: false),
DefaultTimeFormat = table.Column<string>(type: "nvarchar(max)", nullable: false),
DefaultPaymentTerms = table.Column<string>(type: "nvarchar(max)", nullable: false),
DefaultQuoteValidityDays = table.Column<int>(type: "int", nullable: false),
QuoteNumberPrefix = table.Column<string>(type: "nvarchar(max)", nullable: false),
JobNumberPrefix = table.Column<string>(type: "nvarchar(max)", nullable: false),
InvoiceNumberPrefix = table.Column<string>(type: "nvarchar(max)", nullable: false),
UseMetricSystem = table.Column<bool>(type: "bit", nullable: false),
DefaultJobPriority = table.Column<string>(type: "nvarchar(max)", nullable: false),
RequireCustomerPO = table.Column<bool>(type: "bit", nullable: false),
AllowCustomerApproval = table.Column<bool>(type: "bit", nullable: false),
DefaultTurnaroundDays = table.Column<int>(type: "int", nullable: false),
EmailFromAddress = table.Column<string>(type: "nvarchar(max)", nullable: true),
EmailFromName = table.Column<string>(type: "nvarchar(max)", nullable: true),
EmailNotificationsEnabled = table.Column<bool>(type: "bit", nullable: false),
NotifyOnNewJob = table.Column<bool>(type: "bit", nullable: false),
NotifyOnNewQuote = table.Column<bool>(type: "bit", nullable: false),
NotifyOnJobStatusChange = table.Column<bool>(type: "bit", nullable: false),
NotifyOnQuoteApproval = table.Column<bool>(type: "bit", nullable: false),
NotifyOnPaymentReceived = table.Column<bool>(type: "bit", nullable: false),
QuoteExpiryWarningDays = table.Column<int>(type: "int", nullable: false),
DueDateWarningDays = table.Column<int>(type: "int", nullable: false),
MaintenanceAlertDays = table.Column<int>(type: "int", nullable: false),
PaymentRemindersEnabled = table.Column<bool>(type: "bit", nullable: false),
PaymentReminderDays = table.Column<string>(type: "nvarchar(max)", nullable: false),
QuoteRetentionYears = table.Column<int>(type: "int", nullable: false),
JobRetentionYears = table.Column<int>(type: "int", nullable: false),
LogRetentionDays = table.Column<int>(type: "int", nullable: false),
AutoArchiveJobsDays = table.Column<int>(type: "int", nullable: false),
DeletedRecordRetentionDays = table.Column<int>(type: "int", nullable: false),
QtAccentColor = table.Column<string>(type: "nvarchar(max)", nullable: false),
QtDefaultTerms = table.Column<string>(type: "nvarchar(max)", nullable: true),
QtFooterNote = table.Column<string>(type: "nvarchar(max)", nullable: true),
InAccentColor = table.Column<string>(type: "nvarchar(max)", nullable: false),
InDefaultTerms = table.Column<string>(type: "nvarchar(max)", nullable: true),
InFooterNote = table.Column<string>(type: "nvarchar(max)", nullable: true),
WoAccentColor = table.Column<string>(type: "nvarchar(max)", nullable: false),
WoTerms = table.Column<string>(type: "nvarchar(max)", nullable: true),
SetupWizardStarted = table.Column<bool>(type: "bit", nullable: false),
SetupWizardCompleted = table.Column<bool>(type: "bit", nullable: false),
SetupWizardDoneSteps = table.Column<string>(type: "nvarchar(max)", nullable: true),
SetupWizardSkippedSteps = table.Column<string>(type: "nvarchar(max)", nullable: true),
SetupWizardCompletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
SetupWizardCompletedByUserId = table.Column<string>(type: "nvarchar(max)", nullable: true),
SetupWizardCompletedByName = table.Column<string>(type: "nvarchar(max)", nullable: true),
MigratingFromQuickBooks = table.Column<bool>(type: "bit", nullable: false),
QbMigrationStateJson = table.Column<string>(type: "nvarchar(max)", nullable: true),
KioskIntakeOutput = table.Column<string>(type: "nvarchar(max)", nullable: false),
OnboardingPath = table.Column<string>(type: "nvarchar(max)", nullable: true),
FirstWorkflowCompleted = table.Column<bool>(type: "bit", nullable: false),
FirstWorkflowCompletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
FirstQuoteCreatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
FirstJobCreatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
FirstInvoiceCreatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
GuidedActivationDismissedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
EquipmentName = table.Column<string>(type: "nvarchar(max)", nullable: false),
EquipmentNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
EquipmentType = table.Column<string>(type: "nvarchar(max)", nullable: false),
Manufacturer = table.Column<string>(type: "nvarchar(max)", nullable: true),
Model = table.Column<string>(type: "nvarchar(max)", nullable: true),
SerialNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
PurchaseDate = table.Column<DateTime>(type: "datetime2", nullable: true),
PurchasePrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
WarrantyExpiration = table.Column<DateTime>(type: "datetime2", nullable: true),
Status = table.Column<int>(type: "int", nullable: false),
Location = table.Column<string>(type: "nvarchar(max)", nullable: true),
RecommendedMaintenanceIntervalDays = table.Column<int>(type: "int", nullable: false),
LastMaintenanceDate = table.Column<DateTime>(type: "datetime2", nullable: true),
NextScheduledMaintenance = table.Column<DateTime>(type: "datetime2", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
MaxLoadSqFt = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
OvenCycleMinutes = table.Column<int>(type: "int", nullable: true),
ManualFilePath = table.Column<string>(type: "nvarchar(max)", nullable: true),
ManualFileName = table.Column<string>(type: "nvarchar(max)", nullable: true),
ManualFileSize = table.Column<long>(type: "bigint", nullable: true),
ManualContentType = table.Column<string>(type: "nvarchar(max)", nullable: true),
ManualUploadedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CategoryCode = table.Column<string>(type: "nvarchar(450)", nullable: false),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
IsSystemDefined = table.Column<bool>(type: "bit", nullable: false),
IsCoating = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
PriorityCode = table.Column<string>(type: "nvarchar(450)", nullable: false),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
ColorClass = table.Column<string>(type: "nvarchar(max)", nullable: false),
IconClass = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
IsSystemDefined = table.Column<bool>(type: "bit", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
StatusCode = table.Column<string>(type: "nvarchar(450)", nullable: false),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
ColorClass = table.Column<string>(type: "nvarchar(max)", nullable: false),
IconClass = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
IsSystemDefined = table.Column<bool>(type: "bit", nullable: false),
IsTerminalStatus = table.Column<bool>(type: "bit", nullable: false),
IsWorkInProgressStatus = table.Column<bool>(type: "bit", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
WorkflowCategory = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
NotificationType = table.Column<int>(type: "int", nullable: false),
Channel = table.Column<int>(type: "int", nullable: false),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Subject = table.Column<string>(type: "nvarchar(max)", nullable: true),
Body = table.Column<string>(type: "nvarchar(max)", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Label = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
CostPerHour = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
MaxLoadSqFt = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
DefaultCycleMinutes = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TierName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
DiscountPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
StatusCode = table.Column<string>(type: "nvarchar(450)", nullable: false),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
ColorClass = table.Column<string>(type: "nvarchar(max)", nullable: false),
IconClass = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
IsSystemDefined = table.Column<bool>(type: "bit", nullable: false),
IsApprovedStatus = table.Column<bool>(type: "bit", nullable: false),
IsConvertedStatus = table.Column<bool>(type: "bit", nullable: false),
IsDraftStatus = table.Column<bool>(type: "bit", nullable: false),
IsRejectedStatus = table.Column<bool>(type: "bit", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CompanyName = table.Column<string>(type: "nvarchar(max)", nullable: false),
ContactName = table.Column<string>(type: "nvarchar(max)", nullable: true),
Email = table.Column<string>(type: "nvarchar(max)", nullable: true),
Phone = table.Column<string>(type: "nvarchar(max)", nullable: true),
Address = table.Column<string>(type: "nvarchar(max)", nullable: true),
City = table.Column<string>(type: "nvarchar(max)", nullable: true),
State = table.Column<string>(type: "nvarchar(max)", nullable: true),
ZipCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
Country = table.Column<string>(type: "nvarchar(max)", nullable: true),
Website = table.Column<string>(type: "nvarchar(max)", nullable: true),
AccountNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
TaxId = table.Column<string>(type: "nvarchar(max)", nullable: true),
PaymentTerms = table.Column<string>(type: "nvarchar(max)", nullable: true),
CreditLimit = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
IsPreferred = table.Column<bool>(type: "bit", nullable: false),
CurrentBalance = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
OpeningBalance = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
OpeningBalanceDate = table.Column<DateTime>(type: "datetime2", nullable: true),
DefaultExpenseAccountId = table.Column<int>(type: "int", nullable: true),
Is1099Vendor = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JournalEntryId = table.Column<int>(type: "int", nullable: false),
AccountId = table.Column<int>(type: "int", nullable: false),
DebitAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CreditAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
LineOrder = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ClosedYear = table.Column<int>(type: "int", nullable: false),
ClosedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
ClosedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
JournalEntryId = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
FixedAssetId = table.Column<int>(type: "int", nullable: false),
PeriodYear = table.Column<int>(type: "int", nullable: false),
PeriodMonth = table.Column<int>(type: "int", nullable: false),
Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
JournalEntryId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
UserId = table.Column<string>(type: "nvarchar(450)", nullable: false),
ClaimType = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClaimValue = table.Column<string>(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<string>(type: "nvarchar(450)", nullable: false),
ProviderKey = table.Column<string>(type: "nvarchar(450)", nullable: false),
ProviderDisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true),
UserId = table.Column<string>(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<string>(type: "nvarchar(450)", nullable: false),
RoleId = table.Column<string>(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<string>(type: "nvarchar(450)", nullable: false),
LoginProvider = table.Column<string>(type: "nvarchar(450)", nullable: false),
Name = table.Column<string>(type: "nvarchar(450)", nullable: false),
Value = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
EquipmentId = table.Column<int>(type: "int", nullable: false),
MaintenanceType = table.Column<string>(type: "nvarchar(max)", nullable: false),
Status = table.Column<int>(type: "int", nullable: false),
Priority = table.Column<int>(type: "int", nullable: false),
ScheduledDate = table.Column<DateTime>(type: "datetime2", nullable: false),
CompletedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
PerformedById = table.Column<string>(type: "nvarchar(450)", nullable: true),
AssignedUserId = table.Column<string>(type: "nvarchar(450)", nullable: true),
Description = table.Column<string>(type: "nvarchar(max)", nullable: false),
WorkPerformed = table.Column<string>(type: "nvarchar(max)", nullable: true),
PartsReplaced = table.Column<string>(type: "nvarchar(max)", nullable: true),
LaborCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PartsCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TotalCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DowntimeHours = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
TechnicianNotes = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsRecurring = table.Column<bool>(type: "bit", nullable: false),
RecurrenceFrequency = table.Column<int>(type: "int", nullable: true),
RecurrenceEndDate = table.Column<DateTime>(type: "datetime2", nullable: true),
RecurrenceGroupId = table.Column<string>(type: "nvarchar(max)", nullable: true),
RecurrenceParentId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
BatchNumber = table.Column<string>(type: "nvarchar(max)", nullable: false),
EquipmentId = table.Column<int>(type: "int", nullable: true),
OvenCostId = table.Column<int>(type: "int", nullable: true),
Status = table.Column<int>(type: "int", nullable: false),
ScheduledDate = table.Column<DateTime>(type: "datetime2", nullable: false),
ScheduledStartTime = table.Column<DateTime>(type: "datetime2", nullable: true),
EstimatedEndTime = table.Column<DateTime>(type: "datetime2", nullable: true),
ActualStartTime = table.Column<DateTime>(type: "datetime2", nullable: true),
ActualEndTime = table.Column<DateTime>(type: "datetime2", nullable: true),
TotalSurfaceAreaSqFt = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CureTemperatureF = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
CycleMinutes = table.Column<int>(type: "int", nullable: false),
PrimaryColorName = table.Column<string>(type: "nvarchar(max)", nullable: true),
PrimaryColorCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
AiSuggested = table.Column<bool>(type: "bit", nullable: false),
AiReasoningJson = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CompanyName = table.Column<string>(type: "nvarchar(450)", nullable: true),
ContactFirstName = table.Column<string>(type: "nvarchar(max)", nullable: true),
ContactLastName = table.Column<string>(type: "nvarchar(max)", nullable: true),
Email = table.Column<string>(type: "nvarchar(450)", nullable: true),
BillingEmail = table.Column<string>(type: "nvarchar(max)", nullable: true),
Phone = table.Column<string>(type: "nvarchar(max)", nullable: true),
MobilePhone = table.Column<string>(type: "nvarchar(max)", nullable: true),
Address = table.Column<string>(type: "nvarchar(max)", nullable: true),
City = table.Column<string>(type: "nvarchar(max)", nullable: true),
State = table.Column<string>(type: "nvarchar(max)", nullable: true),
ZipCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
Country = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsCommercial = table.Column<bool>(type: "bit", nullable: false),
TaxId = table.Column<string>(type: "nvarchar(max)", nullable: true),
CreditLimit = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CurrentBalance = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CreditBalance = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PaymentTerms = table.Column<string>(type: "nvarchar(max)", nullable: true),
PricingTierId = table.Column<int>(type: "int", nullable: true),
IsTaxExempt = table.Column<bool>(type: "bit", nullable: false),
TaxExemptCertificateData = table.Column<byte[]>(type: "varbinary(max)", nullable: true),
TaxExemptCertificateContentType = table.Column<string>(type: "nvarchar(max)", nullable: true),
TaxExemptCertificateFileName = table.Column<string>(type: "nvarchar(max)", nullable: true),
GeneralNotes = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
LastContactDate = table.Column<DateTime>(type: "datetime2", nullable: true),
NotifyByEmail = table.Column<bool>(type: "bit", nullable: false),
NotifyBySms = table.Column<bool>(type: "bit", nullable: false),
UnsubscribeToken = table.Column<string>(type: "nvarchar(450)", nullable: false, defaultValueSql: "REPLACE(NEWID(),'-','')"),
SmsConsentedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
SmsConsentMethod = table.Column<string>(type: "nvarchar(max)", nullable: true),
SmsOptedOutAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
BillNumber = table.Column<string>(type: "nvarchar(max)", nullable: false),
VendorInvoiceNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
VendorId = table.Column<int>(type: "int", nullable: false),
APAccountId = table.Column<int>(type: "int", nullable: false),
BillDate = table.Column<DateTime>(type: "datetime2", nullable: false),
DueDate = table.Column<DateTime>(type: "datetime2", nullable: true),
Status = table.Column<int>(type: "int", nullable: false),
Terms = table.Column<string>(type: "nvarchar(max)", nullable: true),
Memo = table.Column<string>(type: "nvarchar(max)", nullable: true),
SubTotal = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TaxPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TaxAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Total = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
AmountPaid = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ReceiptFilePath = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
SKU = table.Column<string>(type: "nvarchar(450)", nullable: false),
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
InventoryCategoryId = table.Column<int>(type: "int", nullable: true),
Category = table.Column<string>(type: "nvarchar(max)", nullable: false),
ColorName = table.Column<string>(type: "nvarchar(max)", nullable: true),
ColorCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
Finish = table.Column<string>(type: "nvarchar(max)", nullable: true),
Manufacturer = table.Column<string>(type: "nvarchar(max)", nullable: true),
ManufacturerPartNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
CoverageSqFtPerLb = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
SpecificGravity = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
TransferEfficiency = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
CureTemperatureF = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
CureTimeMinutes = table.Column<int>(type: "int", nullable: true),
ColorFamilies = table.Column<string>(type: "nvarchar(max)", nullable: true),
RequiresClearCoat = table.Column<bool>(type: "bit", nullable: false),
SpecPageUrl = table.Column<string>(type: "nvarchar(max)", nullable: true),
ImageUrl = table.Column<string>(type: "nvarchar(max)", nullable: true),
SdsUrl = table.Column<string>(type: "nvarchar(max)", nullable: true),
TdsUrl = table.Column<string>(type: "nvarchar(max)", nullable: true),
HasSamplePanel = table.Column<bool>(type: "bit", nullable: false),
QuantityOnHand = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
UnitOfMeasure = table.Column<string>(type: "nvarchar(max)", nullable: false),
ReorderPoint = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ReorderQuantity = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
MinimumStock = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
MaximumStock = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
UnitCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
AverageCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
LastPurchasePrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
LastPurchaseDate = table.Column<DateTime>(type: "datetime2", nullable: true),
PrimaryVendorId = table.Column<int>(type: "int", nullable: true),
VendorPartNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
Location = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
DiscontinuedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
IsIncoming = table.Column<bool>(type: "bit", nullable: false),
InventoryAccountId = table.Column<int>(type: "int", nullable: true),
CogsAccountId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CreditNumber = table.Column<string>(type: "nvarchar(max)", nullable: false),
VendorId = table.Column<int>(type: "int", nullable: false),
APAccountId = table.Column<int>(type: "int", nullable: false),
CreditDate = table.Column<DateTime>(type: "datetime2", nullable: false),
Status = table.Column<int>(type: "int", nullable: false),
Total = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
RemainingAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Memo = table.Column<string>(type: "nvarchar(max)", nullable: true),
PostedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CustomerId = table.Column<int>(type: "int", nullable: false),
Note = table.Column<string>(type: "nvarchar(max)", nullable: false),
IsImportant = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CertificateCode = table.Column<string>(type: "nvarchar(450)", nullable: false),
OriginalAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
RedeemedAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
RecipientCustomerId = table.Column<int>(type: "int", nullable: true),
RecipientName = table.Column<string>(type: "nvarchar(max)", nullable: true),
RecipientEmail = table.Column<string>(type: "nvarchar(max)", nullable: true),
IssuedReason = table.Column<int>(type: "int", nullable: false),
PurchasePrice = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
PurchasingCustomerId = table.Column<int>(type: "int", nullable: true),
Status = table.Column<int>(type: "int", nullable: false),
IssueDate = table.Column<DateTime>(type: "datetime2", nullable: false),
ExpiryDate = table.Column<DateTime>(type: "datetime2", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
IssuedById = table.Column<string>(type: "nvarchar(450)", nullable: true),
SourceInvoiceItemId = table.Column<int>(type: "int", nullable: true),
BatchId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
CustomerId = table.Column<int>(type: "int", nullable: true),
SpecialInstructions = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false),
UsageCount = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
QuoteNumber = table.Column<string>(type: "nvarchar(450)", nullable: false),
CustomerId = table.Column<int>(type: "int", nullable: true),
PreparedById = table.Column<string>(type: "nvarchar(450)", nullable: true),
ProspectCompanyName = table.Column<string>(type: "nvarchar(max)", nullable: true),
ProspectContactName = table.Column<string>(type: "nvarchar(max)", nullable: true),
ProspectEmail = table.Column<string>(type: "nvarchar(max)", nullable: true),
ProspectPhone = table.Column<string>(type: "nvarchar(max)", nullable: true),
ProspectAddress = table.Column<string>(type: "nvarchar(max)", nullable: true),
ProspectCity = table.Column<string>(type: "nvarchar(max)", nullable: true),
ProspectState = table.Column<string>(type: "nvarchar(max)", nullable: true),
ProspectZipCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
ProspectSmsConsent = table.Column<bool>(type: "bit", nullable: false),
ProspectSmsConsentedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
QuoteStatusId = table.Column<int>(type: "int", nullable: false),
OvenCostId = table.Column<int>(type: "int", nullable: true),
OvenBatches = table.Column<int>(type: "int", nullable: false),
OvenCycleMinutes = table.Column<int>(type: "int", nullable: true),
IsCommercial = table.Column<bool>(type: "bit", nullable: false),
IsRushJob = table.Column<bool>(type: "bit", nullable: false),
QuoteDate = table.Column<DateTime>(type: "datetime2", nullable: false),
ExpirationDate = table.Column<DateTime>(type: "datetime2", nullable: true),
SentDate = table.Column<DateTime>(type: "datetime2", nullable: true),
ApprovedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
MaterialCosts = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
LaborCosts = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
EquipmentCosts = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ItemsSubtotal = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
OvenBatchCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
FacilityOverheadCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
FacilityOverheadRatePerHour = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ShopSuppliesAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ShopSuppliesPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
OverheadAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
OverheadPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ProfitMargin = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ProfitPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
SubTotal = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DiscountType = table.Column<int>(type: "int", nullable: false),
DiscountValue = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PricingTierDiscountAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PricingTierDiscountPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
QuoteDiscountAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
QuoteDiscountPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DiscountPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DiscountAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DiscountReason = table.Column<string>(type: "nvarchar(max)", nullable: true),
HideDiscountFromCustomer = table.Column<bool>(type: "bit", nullable: false),
SubtotalAfterDiscount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TaxPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TaxAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
RushFee = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Total = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
RequiresDeposit = table.Column<bool>(type: "bit", nullable: false),
DepositPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DepositPaymentLinkToken = table.Column<string>(type: "nvarchar(max)", nullable: true),
DepositPaymentLinkExpiresAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DepositAmountPaid = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DepositPaymentIntentId = table.Column<string>(type: "nvarchar(max)", nullable: true),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
Terms = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CustomerPO = table.Column<string>(type: "nvarchar(max)", nullable: true),
Tags = table.Column<string>(type: "nvarchar(max)", nullable: true),
ConvertedToJobId = table.Column<int>(type: "int", nullable: true),
ConvertedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
ApprovalToken = table.Column<string>(type: "nvarchar(450)", nullable: true),
ApprovalTokenExpiresAt = table.Column<DateTime>(type: "datetime2", nullable: true),
ApprovalTokenUsedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeclineReason = table.Column<string>(type: "nvarchar(max)", nullable: true),
DeclinedByIp = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
PaymentNumber = table.Column<string>(type: "nvarchar(max)", nullable: false),
BillId = table.Column<int>(type: "int", nullable: false),
VendorId = table.Column<int>(type: "int", nullable: false),
BankAccountId = table.Column<int>(type: "int", nullable: false),
PaymentDate = table.Column<DateTime>(type: "datetime2", nullable: false),
Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PaymentMethod = table.Column<int>(type: "int", nullable: false),
CheckNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
Memo = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsCleared = table.Column<bool>(type: "bit", nullable: false),
ClearedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
PoNumber = table.Column<string>(type: "nvarchar(max)", nullable: false),
VendorId = table.Column<int>(type: "int", nullable: false),
Status = table.Column<int>(type: "int", nullable: false),
OrderDate = table.Column<DateTime>(type: "datetime2", nullable: false),
ExpectedDeliveryDate = table.Column<DateTime>(type: "datetime2", nullable: true),
ReceivedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
ShippingCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
SubTotal = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TotalAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
InternalNotes = table.Column<string>(type: "nvarchar(max)", nullable: true),
BillId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
SKU = table.Column<string>(type: "nvarchar(max)", nullable: true),
CategoryId = table.Column<int>(type: "int", nullable: false),
DefaultPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DefaultRequiresSandblasting = table.Column<bool>(type: "bit", nullable: false),
DefaultRequiresMasking = table.Column<bool>(type: "bit", nullable: false),
DefaultEstimatedMinutes = table.Column<int>(type: "int", nullable: true),
ApproximateArea = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false),
IsMerchandise = table.Column<bool>(type: "bit", nullable: false),
InventoryItemId = table.Column<int>(type: "int", nullable: true),
RevenueAccountId = table.Column<int>(type: "int", nullable: true),
CogsAccountId = table.Column<int>(type: "int", nullable: true),
ImagePath = table.Column<string>(type: "nvarchar(max)", nullable: true),
ThumbnailPath = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
VendorCreditId = table.Column<int>(type: "int", nullable: false),
BillId = table.Column<int>(type: "int", nullable: false),
Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
AppliedDate = table.Column<DateTime>(type: "datetime2", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
VendorCreditId = table.Column<int>(type: "int", nullable: false),
AccountId = table.Column<int>(type: "int", nullable: true),
Description = table.Column<string>(type: "nvarchar(max)", nullable: false),
Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobNumber = table.Column<string>(type: "nvarchar(450)", nullable: false),
CustomerId = table.Column<int>(type: "int", nullable: false),
QuoteId = table.Column<int>(type: "int", nullable: true),
AssignedUserId = table.Column<string>(type: "nvarchar(450)", nullable: true),
Description = table.Column<string>(type: "nvarchar(max)", nullable: false),
JobStatusId = table.Column<int>(type: "int", nullable: false),
JobPriorityId = table.Column<int>(type: "int", nullable: false),
ScheduledDate = table.Column<DateTime>(type: "datetime2", nullable: true),
StartedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
CompletedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
DueDate = table.Column<DateTime>(type: "datetime2", nullable: true),
OvenCostId = table.Column<int>(type: "int", nullable: true),
OvenBatches = table.Column<int>(type: "int", nullable: false),
OvenCycleMinutes = table.Column<int>(type: "int", nullable: true),
QuotedPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
FinalPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
OvenBatchCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ShopSuppliesAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ShopSuppliesPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
IsRushJob = table.Column<bool>(type: "bit", nullable: false),
DiscountType = table.Column<int>(type: "int", nullable: false),
DiscountValue = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DiscountReason = table.Column<string>(type: "nvarchar(max)", nullable: true),
ActualTimeSpentHours = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
CustomerPO = table.Column<string>(type: "nvarchar(max)", nullable: true),
SpecialInstructions = table.Column<string>(type: "nvarchar(max)", nullable: true),
InternalNotes = table.Column<string>(type: "nvarchar(max)", nullable: true),
Tags = table.Column<string>(type: "nvarchar(max)", nullable: true),
RequiresCustomerApproval = table.Column<bool>(type: "bit", nullable: false),
IsCustomerApproved = table.Column<bool>(type: "bit", nullable: false),
ShopAccessCode = table.Column<Guid>(type: "uniqueidentifier", nullable: false, defaultValueSql: "NEWID()"),
IntakeDate = table.Column<DateTime>(type: "datetime2", nullable: true),
IntakeConditionNotes = table.Column<string>(type: "nvarchar(max)", nullable: true),
IntakePartCount = table.Column<int>(type: "int", nullable: true),
IntakeCheckedByUserId = table.Column<string>(type: "nvarchar(450)", nullable: true),
QuoteSnapshotUpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
PricingBreakdownJson = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsReworkJob = table.Column<bool>(type: "bit", nullable: false),
OriginalJobId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
QuoteId = table.Column<int>(type: "int", nullable: false),
ChangedByUserId = table.Column<string>(type: "nvarchar(450)", nullable: true),
ChangedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
FieldName = table.Column<string>(type: "nvarchar(max)", nullable: false),
OldValue = table.Column<string>(type: "nvarchar(max)", nullable: true),
NewValue = table.Column<string>(type: "nvarchar(max)", nullable: true),
ChangeDescription = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
QuoteId = table.Column<int>(type: "int", nullable: true),
TempId = table.Column<string>(type: "nvarchar(max)", nullable: false),
FilePath = table.Column<string>(type: "nvarchar(max)", nullable: false),
FileName = table.Column<string>(type: "nvarchar(max)", nullable: false),
FileSize = table.Column<long>(type: "bigint", nullable: false),
ContentType = table.Column<string>(type: "nvarchar(max)", nullable: false),
Caption = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsAiAnalysisPhoto = table.Column<bool>(type: "bit", nullable: false),
UploadedById = table.Column<string>(type: "nvarchar(450)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
QuoteId = table.Column<int>(type: "int", nullable: false),
PrepServiceId = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
PurchaseOrderId = table.Column<int>(type: "int", nullable: false),
InventoryItemId = table.Column<int>(type: "int", nullable: true),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
UnitOfMeasure = table.Column<string>(type: "nvarchar(max)", nullable: true),
QuantityOrdered = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
QuantityReceived = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
UnitCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
LineTotal = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobTemplateId = table.Column<int>(type: "int", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: false),
Quantity = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
SurfaceAreaSqFt = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CatalogItemId = table.Column<int>(type: "int", nullable: true),
IsGenericItem = table.Column<bool>(type: "bit", nullable: false),
IsLaborItem = table.Column<bool>(type: "bit", nullable: false),
IsSalesItem = table.Column<bool>(type: "bit", nullable: false),
Sku = table.Column<string>(type: "nvarchar(max)", nullable: true),
ManualUnitPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
RequiresSandblasting = table.Column<bool>(type: "bit", nullable: false),
RequiresMasking = table.Column<bool>(type: "bit", nullable: false),
IncludePrepCost = table.Column<bool>(type: "bit", nullable: false),
EstimatedMinutes = table.Column<int>(type: "int", nullable: false),
Complexity = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
QuoteId = table.Column<int>(type: "int", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: false),
Quantity = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
SurfaceArea = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
SurfaceAreaSqFt = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CatalogItemId = table.Column<int>(type: "int", nullable: true),
UnitPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TotalPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ItemMaterialCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ItemLaborCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ItemEquipmentCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
IsGenericItem = table.Column<bool>(type: "bit", nullable: false),
ManualUnitPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
PowderCostOverride = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
IsLaborItem = table.Column<bool>(type: "bit", nullable: false),
IsSalesItem = table.Column<bool>(type: "bit", nullable: false),
Sku = table.Column<string>(type: "nvarchar(max)", nullable: true),
RequiresSandblasting = table.Column<bool>(type: "bit", nullable: false),
RequiresMasking = table.Column<bool>(type: "bit", nullable: false),
EstimatedMinutes = table.Column<int>(type: "int", nullable: false),
IncludePrepCost = table.Column<bool>(type: "bit", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
Complexity = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsAiItem = table.Column<bool>(type: "bit", nullable: false),
AiTags = table.Column<string>(type: "nvarchar(max)", nullable: true),
AiPredictionId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
AppointmentNumber = table.Column<string>(type: "nvarchar(max)", nullable: false),
Title = table.Column<string>(type: "nvarchar(max)", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
CustomerId = table.Column<int>(type: "int", nullable: true),
JobId = table.Column<int>(type: "int", nullable: true),
AppointmentStatusId = table.Column<int>(type: "int", nullable: false),
AppointmentTypeId = table.Column<int>(type: "int", nullable: false),
AssignedUserId = table.Column<string>(type: "nvarchar(450)", nullable: true),
ScheduledStartTime = table.Column<DateTime>(type: "datetime2", nullable: false),
ScheduledEndTime = table.Column<DateTime>(type: "datetime2", nullable: false),
IsAllDay = table.Column<bool>(type: "bit", nullable: false),
ActualStartTime = table.Column<DateTime>(type: "datetime2", nullable: true),
ActualEndTime = table.Column<DateTime>(type: "datetime2", nullable: true),
Location = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsReminderEnabled = table.Column<bool>(type: "bit", nullable: false),
ReminderMinutesBefore = table.Column<int>(type: "int", nullable: false),
ReminderSentAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
BillId = table.Column<int>(type: "int", nullable: false),
AccountId = table.Column<int>(type: "int", nullable: true),
JobId = table.Column<int>(type: "int", nullable: true),
Description = table.Column<string>(type: "nvarchar(max)", nullable: false),
Quantity = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
UnitPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ExpenseNumber = table.Column<string>(type: "nvarchar(max)", nullable: false),
Date = table.Column<DateTime>(type: "datetime2", nullable: false),
VendorId = table.Column<int>(type: "int", nullable: true),
ExpenseAccountId = table.Column<int>(type: "int", nullable: false),
PaymentAccountId = table.Column<int>(type: "int", nullable: false),
JobId = table.Column<int>(type: "int", nullable: true),
PaymentMethod = table.Column<int>(type: "int", nullable: false),
Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Memo = table.Column<string>(type: "nvarchar(max)", nullable: true),
ReceiptFilePath = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsCleared = table.Column<bool>(type: "bit", nullable: false),
ClearedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
InventoryItemId = table.Column<int>(type: "int", nullable: false),
TransactionType = table.Column<int>(type: "int", nullable: false),
Quantity = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
UnitCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TotalCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TransactionDate = table.Column<DateTime>(type: "datetime2", nullable: false),
Reference = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
BalanceAfter = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PurchaseOrderId = table.Column<int>(type: "int", nullable: true),
JobId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
InvoiceNumber = table.Column<string>(type: "nvarchar(450)", nullable: false),
JobId = table.Column<int>(type: "int", nullable: true),
CustomerId = table.Column<int>(type: "int", nullable: false),
PreparedById = table.Column<string>(type: "nvarchar(450)", nullable: true),
Status = table.Column<int>(type: "int", nullable: false),
InvoiceDate = table.Column<DateTime>(type: "datetime2", nullable: false),
DueDate = table.Column<DateTime>(type: "datetime2", nullable: true),
SentDate = table.Column<DateTime>(type: "datetime2", nullable: true),
PaidDate = table.Column<DateTime>(type: "datetime2", nullable: true),
SubTotal = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TaxPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TaxAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
DiscountAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Total = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
AmountPaid = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CreditApplied = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
GiftCertificateRedeemed = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PublicViewToken = table.Column<string>(type: "nvarchar(max)", nullable: true),
OnlinePaymentStatus = table.Column<int>(type: "int", nullable: false),
PaymentLinkToken = table.Column<string>(type: "nvarchar(max)", nullable: true),
PaymentLinkExpiresAt = table.Column<DateTime>(type: "datetime2", nullable: true),
StripePaymentIntentId = table.Column<string>(type: "nvarchar(max)", nullable: true),
OnlineAmountPaid = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
OnlineSurchargeCollected = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
InternalNotes = table.Column<string>(type: "nvarchar(max)", nullable: true),
Terms = table.Column<string>(type: "nvarchar(max)", nullable: true),
CustomerPO = table.Column<string>(type: "nvarchar(max)", nullable: true),
EarlyPaymentDiscountPercent = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
EarlyPaymentDiscountDays = table.Column<int>(type: "int", nullable: false),
ExternalReference = table.Column<string>(type: "nvarchar(450)", nullable: true),
SalesTaxAccountId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
ChangedByUserId = table.Column<string>(type: "nvarchar(450)", nullable: true),
ChangedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
FieldName = table.Column<string>(type: "nvarchar(max)", nullable: false),
OldValue = table.Column<string>(type: "nvarchar(max)", nullable: true),
NewValue = table.Column<string>(type: "nvarchar(max)", nullable: true),
ChangeDescription = table.Column<string>(type: "nvarchar(max)", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
ScheduledDate = table.Column<DateTime>(type: "datetime2", nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
Description = table.Column<string>(type: "nvarchar(max)", nullable: false),
Quantity = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ColorName = table.Column<string>(type: "nvarchar(max)", nullable: true),
ColorCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
Finish = table.Column<string>(type: "nvarchar(max)", nullable: true),
SurfaceArea = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
SurfaceAreaSqFt = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CatalogItemId = table.Column<int>(type: "int", nullable: true),
UnitPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TotalPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
LaborCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
IsGenericItem = table.Column<bool>(type: "bit", nullable: false),
ManualUnitPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
PowderCostOverride = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
IsLaborItem = table.Column<bool>(type: "bit", nullable: false),
IsSalesItem = table.Column<bool>(type: "bit", nullable: false),
Sku = table.Column<string>(type: "nvarchar(max)", nullable: true),
IncludePrepCost = table.Column<bool>(type: "bit", nullable: false),
RequiresSandblasting = table.Column<bool>(type: "bit", nullable: false),
RequiresMasking = table.Column<bool>(type: "bit", nullable: false),
EstimatedMinutes = table.Column<int>(type: "int", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
Complexity = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsAiItem = table.Column<bool>(type: "bit", nullable: false),
AiTags = table.Column<string>(type: "nvarchar(max)", nullable: true),
AiPredictionId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
Note = table.Column<string>(type: "nvarchar(max)", nullable: false),
IsImportant = table.Column<bool>(type: "bit", nullable: false),
IsInternal = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
FilePath = table.Column<string>(type: "nvarchar(max)", nullable: false),
FileName = table.Column<string>(type: "nvarchar(max)", nullable: false),
FileSize = table.Column<long>(type: "bigint", nullable: false),
ContentType = table.Column<string>(type: "nvarchar(max)", nullable: false),
Caption = table.Column<string>(type: "nvarchar(max)", nullable: true),
PhotoType = table.Column<int>(type: "int", nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
UploadedById = table.Column<string>(type: "nvarchar(450)", nullable: false),
UploadedDate = table.Column<DateTime>(type: "datetime2", nullable: false),
Tags = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsAiAnalysisPhoto = table.Column<bool>(type: "bit", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
PrepServiceId = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
FromStatusId = table.Column<int>(type: "int", nullable: false),
ToStatusId = table.Column<int>(type: "int", nullable: false),
ChangedDate = table.Column<DateTime>(type: "datetime2", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
UserId = table.Column<string>(type: "nvarchar(max)", nullable: true),
UserDisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true),
WorkDate = table.Column<DateTime>(type: "datetime2", nullable: false),
HoursWorked = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Stage = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
SessionToken = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
SessionType = table.Column<int>(type: "int", nullable: false),
Status = table.Column<int>(type: "int", nullable: false),
CustomerFirstName = table.Column<string>(type: "nvarchar(max)", nullable: false),
CustomerLastName = table.Column<string>(type: "nvarchar(max)", nullable: false),
CustomerPhone = table.Column<string>(type: "nvarchar(max)", nullable: false),
CustomerEmail = table.Column<string>(type: "nvarchar(max)", nullable: false),
IsReturningCustomer = table.Column<bool>(type: "bit", nullable: false),
JobDescription = table.Column<string>(type: "nvarchar(max)", nullable: false),
HowDidYouHearAboutUs = table.Column<string>(type: "nvarchar(max)", nullable: true),
AgreedToTerms = table.Column<bool>(type: "bit", nullable: false),
AgreedToTermsAt = table.Column<DateTime>(type: "datetime2", nullable: true),
SmsOptIn = table.Column<bool>(type: "bit", nullable: false),
SignatureDataBase64 = table.Column<string>(type: "nvarchar(max)", nullable: true),
LinkedCustomerId = table.Column<int>(type: "int", nullable: true),
LinkedJobId = table.Column<int>(type: "int", nullable: true),
LinkedQuoteId = table.Column<int>(type: "int", nullable: true),
SubmittedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
ExpiresAt = table.Column<DateTime>(type: "datetime2", nullable: false),
RemoteLinkEmail = table.Column<string>(type: "nvarchar(max)", nullable: true),
RemoteLinkSentAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobTemplateItemId = table.Column<int>(type: "int", nullable: false),
CoatName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Sequence = table.Column<int>(type: "int", nullable: false),
InventoryItemId = table.Column<int>(type: "int", nullable: true),
ColorName = table.Column<string>(type: "nvarchar(max)", nullable: true),
VendorId = table.Column<int>(type: "int", nullable: true),
ColorCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
Finish = table.Column<string>(type: "nvarchar(max)", nullable: true),
CoverageSqFtPerLb = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TransferEfficiency = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PowderCostPerLb = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobTemplateItemId = table.Column<int>(type: "int", nullable: false),
PrepServiceId = table.Column<int>(type: "int", nullable: false),
EstimatedMinutes = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
QuoteItemId = table.Column<int>(type: "int", nullable: false),
CoatName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Sequence = table.Column<int>(type: "int", nullable: false),
InventoryItemId = table.Column<int>(type: "int", nullable: true),
ColorName = table.Column<string>(type: "nvarchar(max)", nullable: true),
VendorId = table.Column<int>(type: "int", nullable: true),
ColorCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
Finish = table.Column<string>(type: "nvarchar(max)", nullable: true),
CoverageSqFtPerLb = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TransferEfficiency = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PowderCostPerLb = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
PowderToOrder = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
CoatMaterialCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CoatLaborCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CoatTotalCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
QuoteItemId = table.Column<int>(type: "int", nullable: false),
PrepServiceId = table.Column<int>(type: "int", nullable: false),
EstimatedMinutes = table.Column<int>(type: "int", nullable: false),
BlastSetupId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ReceiptNumber = table.Column<string>(type: "nvarchar(max)", nullable: false),
CustomerId = table.Column<int>(type: "int", nullable: false),
JobId = table.Column<int>(type: "int", nullable: true),
QuoteId = table.Column<int>(type: "int", nullable: true),
Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PaymentMethod = table.Column<int>(type: "int", nullable: false),
ReceivedDate = table.Column<DateTime>(type: "datetime2", nullable: false),
Reference = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
RecordedById = table.Column<string>(type: "nvarchar(450)", nullable: true),
DepositAccountId = table.Column<int>(type: "int", nullable: true),
AppliedToInvoiceId = table.Column<int>(type: "int", nullable: true),
AppliedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
GiftCertificateId = table.Column<int>(type: "int", nullable: false),
InvoiceId = table.Column<int>(type: "int", nullable: false),
AmountRedeemed = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
RedeemedDate = table.Column<DateTime>(type: "datetime2", nullable: false),
RedeemedById = table.Column<string>(type: "nvarchar(450)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Title = table.Column<string>(type: "nvarchar(max)", nullable: false),
Message = table.Column<string>(type: "nvarchar(max)", nullable: false),
Link = table.Column<string>(type: "nvarchar(max)", nullable: true),
NotificationType = table.Column<string>(type: "nvarchar(max)", nullable: false),
IsRead = table.Column<bool>(type: "bit", nullable: false),
ReadAt = table.Column<DateTime>(type: "datetime2", nullable: true),
QuoteId = table.Column<int>(type: "int", nullable: true),
InvoiceId = table.Column<int>(type: "int", nullable: true),
CustomerId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Channel = table.Column<int>(type: "int", nullable: false),
NotificationType = table.Column<int>(type: "int", nullable: false),
Status = table.Column<int>(type: "int", nullable: false),
RecipientName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Recipient = table.Column<string>(type: "nvarchar(max)", nullable: false),
Subject = table.Column<string>(type: "nvarchar(max)", nullable: true),
Message = table.Column<string>(type: "nvarchar(max)", nullable: false),
ErrorMessage = table.Column<string>(type: "nvarchar(max)", nullable: true),
SentAt = table.Column<DateTime>(type: "datetime2", nullable: false),
CustomerId = table.Column<int>(type: "int", nullable: true),
JobId = table.Column<int>(type: "int", nullable: true),
QuoteId = table.Column<int>(type: "int", nullable: true),
InvoiceId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
InvoiceId = table.Column<int>(type: "int", nullable: false),
Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PaymentDate = table.Column<DateTime>(type: "datetime2", nullable: false),
PaymentMethod = table.Column<int>(type: "int", nullable: false),
Reference = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
RecordedById = table.Column<string>(type: "nvarchar(450)", nullable: true),
DepositAccountId = table.Column<int>(type: "int", nullable: true),
IsCleared = table.Column<bool>(type: "bit", nullable: false),
ClearedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
InvoiceId = table.Column<int>(type: "int", nullable: false),
SourceJobItemId = table.Column<int>(type: "int", nullable: true),
CatalogItemId = table.Column<int>(type: "int", nullable: true),
Description = table.Column<string>(type: "nvarchar(max)", nullable: false),
Quantity = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
UnitPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TotalPrice = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ColorName = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
DisplayOrder = table.Column<int>(type: "int", nullable: false),
RevenueAccountId = table.Column<int>(type: "int", nullable: true),
IsGiftCertificate = table.Column<bool>(type: "bit", nullable: false),
GcRecipientName = table.Column<string>(type: "nvarchar(max)", nullable: true),
GcRecipientEmail = table.Column<string>(type: "nvarchar(max)", nullable: true),
GcExpiryDate = table.Column<DateTime>(type: "datetime2", nullable: true),
GeneratedGiftCertificateId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobItemId = table.Column<int>(type: "int", nullable: false),
CoatName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Sequence = table.Column<int>(type: "int", nullable: false),
InventoryItemId = table.Column<int>(type: "int", nullable: true),
ColorName = table.Column<string>(type: "nvarchar(max)", nullable: true),
VendorId = table.Column<int>(type: "int", nullable: true),
ColorCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
Finish = table.Column<string>(type: "nvarchar(max)", nullable: true),
CoverageSqFtPerLb = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TransferEfficiency = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
PowderCostPerLb = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
PowderToOrder = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
ActualPowderUsedLbs = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
PowderOrdered = table.Column<bool>(type: "bit", nullable: false),
PowderOrderedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
PowderOrderedByUserId = table.Column<string>(type: "nvarchar(max)", nullable: true),
PowderReceived = table.Column<bool>(type: "bit", nullable: false),
PowderReceivedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
PowderReceivedByUserId = table.Column<string>(type: "nvarchar(max)", nullable: true),
PowderReceivedLbs = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobItemId = table.Column<int>(type: "int", nullable: false),
PrepServiceId = table.Column<int>(type: "int", nullable: false),
EstimatedMinutes = table.Column<int>(type: "int", nullable: false),
BlastSetupId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
JobItemId = table.Column<int>(type: "int", nullable: true),
ReworkJobId = table.Column<int>(type: "int", nullable: true),
ReworkType = table.Column<int>(type: "int", nullable: false),
Reason = table.Column<int>(type: "int", nullable: false),
DefectDescription = table.Column<string>(type: "nvarchar(max)", nullable: false),
DiscoveredBy = table.Column<int>(type: "int", nullable: false),
DiscoveredDate = table.Column<DateTime>(type: "datetime2", nullable: false),
ReportedByName = table.Column<string>(type: "nvarchar(max)", nullable: true),
EstimatedReworkCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
ActualReworkCost = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
IsBillableToCustomer = table.Column<bool>(type: "bit", nullable: false),
BillingNotes = table.Column<string>(type: "nvarchar(max)", nullable: true),
Status = table.Column<int>(type: "int", nullable: false),
Resolution = table.Column<int>(type: "int", nullable: true),
ResolvedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
ResolutionNotes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
OvenBatchId = table.Column<int>(type: "int", nullable: false),
JobId = table.Column<int>(type: "int", nullable: false),
JobItemId = table.Column<int>(type: "int", nullable: false),
JobItemCoatId = table.Column<int>(type: "int", nullable: false),
SurfaceAreaContribution = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CoatPassNumber = table.Column<int>(type: "int", nullable: false),
SortOrder = table.Column<int>(type: "int", nullable: false),
Status = table.Column<int>(type: "int", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
JobItemId = table.Column<int>(type: "int", nullable: false),
JobItemCoatId = table.Column<int>(type: "int", nullable: false),
InventoryItemId = table.Column<int>(type: "int", nullable: true),
InventoryTransactionId = table.Column<int>(type: "int", nullable: true),
ActualLbsUsed = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
EstimatedLbs = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
VarianceLbs = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
RecordedByUserId = table.Column<string>(type: "nvarchar(max)", nullable: false),
RecordedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
MemoNumber = table.Column<string>(type: "nvarchar(450)", nullable: false),
CustomerId = table.Column<int>(type: "int", nullable: false),
OriginalInvoiceId = table.Column<int>(type: "int", nullable: true),
ReworkRecordId = table.Column<int>(type: "int", nullable: true),
Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
AmountApplied = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
IssueDate = table.Column<DateTime>(type: "datetime2", nullable: false),
ExpiryDate = table.Column<DateTime>(type: "datetime2", nullable: true),
Reason = table.Column<string>(type: "nvarchar(max)", nullable: false),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
Status = table.Column<int>(type: "int", nullable: false),
IssuedById = table.Column<string>(type: "nvarchar(450)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CreditMemoId = table.Column<int>(type: "int", nullable: false),
InvoiceId = table.Column<int>(type: "int", nullable: false),
AmountApplied = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
AppliedDate = table.Column<DateTime>(type: "datetime2", nullable: false),
AppliedById = table.Column<string>(type: "nvarchar(450)", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
InvoiceId = table.Column<int>(type: "int", nullable: false),
PaymentId = table.Column<int>(type: "int", nullable: true),
Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
RefundDate = table.Column<DateTime>(type: "datetime2", nullable: false),
RefundMethod = table.Column<int>(type: "int", nullable: false),
Reason = table.Column<string>(type: "nvarchar(max)", nullable: false),
Reference = table.Column<string>(type: "nvarchar(max)", nullable: true),
Notes = table.Column<string>(type: "nvarchar(max)", nullable: true),
Status = table.Column<int>(type: "int", nullable: false),
IssuedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
IssuedById = table.Column<string>(type: "nvarchar(450)", nullable: true),
DepositAccountId = table.Column<int>(type: "int", nullable: true),
CreditMemoId = table.Column<int>(type: "int", nullable: true),
CompanyId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
UpdatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedBy = table.Column<string>(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]
);
");
}
/// <inheritdoc />
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");
}
}
}