From 225e64b992406b19cbf0fe453810d8725ce4179c Mon Sep 17 00:00:00 2001 From: Chris Chen Date: Thu, 25 Jun 2026 16:40:49 -0700 Subject: [PATCH] feat(1099): configure Payee1099, Form1099Box, and mapping FKs in DbContext Co-Authored-By: Claude Opus 4.8 --- API/ROLAC.API/Data/AppDbContext.cs | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/API/ROLAC.API/Data/AppDbContext.cs b/API/ROLAC.API/Data/AppDbContext.cs index 37eaddf..a23b75b 100644 --- a/API/ROLAC.API/Data/AppDbContext.cs +++ b/API/ROLAC.API/Data/AppDbContext.cs @@ -21,6 +21,8 @@ public class AppDbContext : IdentityDbContext public DbSet ExpenseCategoryGroups => Set(); public DbSet ExpenseSubCategories => Set(); public DbSet Form990ExpenseLines => Set(); + public DbSet Payee1099s => Set(); + public DbSet Form1099Boxes => Set(); public DbSet Expenses => Set(); public DbSet ExpenseLines => Set(); public DbSet ExpenseSnapshots => Set(); @@ -218,6 +220,32 @@ public class AppDbContext : IdentityDbContext entity.HasIndex(e => e.LineCode).IsUnique(); }); + // ── Form1099Box (1099 reporting box catalog) ────────────────────────── + builder.Entity(entity => + { + entity.Property(e => e.BoxCode).HasMaxLength(10).IsRequired(); + entity.Property(e => e.Name_en).HasMaxLength(200).IsRequired(); + entity.Property(e => e.Name_zh).HasMaxLength(200); + entity.Property(e => e.FormType).HasMaxLength(20).IsRequired(); + entity.HasIndex(e => e.BoxCode).IsUnique(); + }); + + // ── Payee1099 (1099 recipient master) ──────────────────────────────── + builder.Entity(entity => + { + entity.HasQueryFilter(p => !p.IsDeleted); + entity.Property(e => e.LegalName).HasMaxLength(200).IsRequired(); + entity.Property(e => e.DisplayName).HasMaxLength(200); + entity.Property(e => e.TaxClassification).HasMaxLength(40).IsRequired(); + entity.Property(e => e.TinType).HasMaxLength(10); + entity.Property(e => e.TinLast4).HasMaxLength(4); + entity.Property(e => e.State).HasMaxLength(2); + entity.Property(e => e.Zip).HasMaxLength(10); + entity.Property(e => e.W9Status).HasMaxLength(20).HasDefaultValue(Form1099.W9Status.Missing); + entity.HasOne(e => e.Member).WithMany() + .HasForeignKey(e => e.MemberId).OnDelete(DeleteBehavior.SetNull); + }); + // ── ExpenseCategoryGroup ───────────────────────────────────────────── builder.Entity(entity => { @@ -227,6 +255,8 @@ public class AppDbContext : IdentityDbContext entity.Property(e => e.UpdatedBy).HasMaxLength(450); entity.HasOne(e => e.Form990Line).WithMany() .HasForeignKey(e => e.Form990LineId).OnDelete(DeleteBehavior.SetNull); + entity.HasOne(e => e.Form1099Box).WithMany() + .HasForeignKey(e => e.Form1099BoxId).OnDelete(DeleteBehavior.SetNull); }); // ── ExpenseSubCategory ─────────────────────────────────────────────── @@ -240,6 +270,8 @@ public class AppDbContext : IdentityDbContext .HasForeignKey(e => e.GroupId).OnDelete(DeleteBehavior.Restrict); entity.HasOne(e => e.Form990Line).WithMany() .HasForeignKey(e => e.Form990LineId).OnDelete(DeleteBehavior.SetNull); + entity.HasOne(e => e.Form1099Box).WithMany() + .HasForeignKey(e => e.Form1099BoxId).OnDelete(DeleteBehavior.SetNull); }); // ── Expense ────────────────────────────────────────────────────────── @@ -270,6 +302,8 @@ public class AppDbContext : IdentityDbContext .HasForeignKey(e => e.MinistryId).OnDelete(DeleteBehavior.Restrict); entity.HasOne(e => e.Member).WithMany() .HasForeignKey(e => e.MemberId).OnDelete(DeleteBehavior.SetNull); + entity.HasOne(e => e.Payee).WithMany() + .HasForeignKey(e => e.PayeeId).OnDelete(DeleteBehavior.SetNull); }); // ── ExpenseLine (category breakdown of one Expense) ──────────────────