diff --git a/DOL.WHD.Section14c.Api/Controllers/AccountController.cs b/DOL.WHD.Section14c.Api/Controllers/AccountController.cs index 30cbef28..22f4c4a9 100644 --- a/DOL.WHD.Section14c.Api/Controllers/AccountController.cs +++ b/DOL.WHD.Section14c.Api/Controllers/AccountController.cs @@ -152,8 +152,9 @@ public async Task Register(RegisterBindingModel model) } // Add User + var now = DateTime.UtcNow; var user = new ApplicationUser() { UserName = model.Email, Email = model.Email }; - user.Organizations.Add(new OrganizationMembership { EIN = model.EIN, IsAdmin = true}); + user.Organizations.Add(new OrganizationMembership { EIN = model.EIN, IsAdmin = true, CreatedAt = now, LastModifiedAt = now, CreatedBy_Id = user.Id, LastModifiedBy_Id = user.Id }); IdentityResult result = await UserManager.CreateAsync(user, model.Password); diff --git a/DOL.WHD.Section14c.DataAccess/ApplicationDbContext.cs b/DOL.WHD.Section14c.DataAccess/ApplicationDbContext.cs index 3e61d605..c5d9b2c1 100644 --- a/DOL.WHD.Section14c.DataAccess/ApplicationDbContext.cs +++ b/DOL.WHD.Section14c.DataAccess/ApplicationDbContext.cs @@ -3,6 +3,11 @@ using DOL.WHD.Section14c.Domain.Models; using DOL.WHD.Section14c.Domain.Models.Submission; using Microsoft.AspNet.Identity.EntityFramework; +using Microsoft.AspNet.Identity; +using System; +using System.Linq; +using System.Web; +using System.Security.Claims; namespace DOL.WHD.Section14c.DataAccess { @@ -46,5 +51,47 @@ protected override void OnModelCreating(DbModelBuilder modelBuilder) .Map(m => m.ToTable("WorkSiteWorkSiteType")); } + + public override int SaveChanges() + { + var addedAuditedEntities = ChangeTracker.Entries() + .Where(p => p.State == EntityState.Added) + .Select(p => p.Entity); + + var modifiedAuditedEntities = ChangeTracker.Entries() + .Where(p => p.State == EntityState.Modified) + .Select(p => p.Entity); + + var now = DateTime.UtcNow; + var zeroTime = new DateTime(); + + var userId = Guid.Empty.ToString(); + + if (HttpContext.Current != null && HttpContext.Current.User != null) + { + userId = HttpContext.Current.User.Identity.GetUserId(); + } + + foreach (var added in addedAuditedEntities) + { + if (added.CreatedAt == zeroTime) { added.CreatedAt = now; } + added.LastModifiedAt = now; + added.CreatedBy_Id = userId; + added.LastModifiedBy_Id = userId; + } + + foreach (var modified in modifiedAuditedEntities) + { + if (modified.CreatedAt == zeroTime) + { + modified.CreatedAt = now; + modified.CreatedBy_Id = userId; + } + modified.LastModifiedAt = now; + modified.LastModifiedBy_Id = userId; + } + + return base.SaveChanges(); + } } } diff --git a/DOL.WHD.Section14c.DataAccess/DOL.WHD.Section14c.DataAccess.csproj b/DOL.WHD.Section14c.DataAccess/DOL.WHD.Section14c.DataAccess.csproj index e7a748f1..ff992733 100644 --- a/DOL.WHD.Section14c.DataAccess/DOL.WHD.Section14c.DataAccess.csproj +++ b/DOL.WHD.Section14c.DataAccess/DOL.WHD.Section14c.DataAccess.csproj @@ -89,6 +89,7 @@ + @@ -166,6 +167,10 @@ 201610252128299_EmployerUpdate.cs + + + 201610261540007_AuditFields.cs + @@ -229,6 +234,9 @@ 201610252128299_EmployerUpdate.cs + + 201610261540007_AuditFields.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 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 + + + dbo + + \ No newline at end of file diff --git a/DOL.WHD.Section14c.DataAccess/Migrations/Configuration.cs b/DOL.WHD.Section14c.DataAccess/Migrations/Configuration.cs index ceb3eafe..cc2f541d 100644 --- a/DOL.WHD.Section14c.DataAccess/Migrations/Configuration.cs +++ b/DOL.WHD.Section14c.DataAccess/Migrations/Configuration.cs @@ -92,6 +92,8 @@ protected override void Seed(DOL.WHD.Section14c.DataAccess.ApplicationDbContext context.Responses.AddOrUpdate(new Response { Id = 40, QuestionKey = "WIOAWorkerVerified", Display = "No", IsActive = true }); context.Responses.AddOrUpdate(new Response { Id = 41, QuestionKey = "WIOAWorkerVerified", Display = "Not Required", IsActive = true }); + context.Users.Add(new Domain.Models.ApplicationUser { Id = System.Guid.Empty.ToString(), Email = "systemadmin@domain.com", UserName = "System Admin", LockoutEnabled = true, PasswordHash = System.Guid.NewGuid().ToString() }); + } } } diff --git a/DOL.WHD.Section14c.Domain/BaseEntity.cs b/DOL.WHD.Section14c.Domain/BaseEntity.cs new file mode 100644 index 00000000..d5a1bb84 --- /dev/null +++ b/DOL.WHD.Section14c.Domain/BaseEntity.cs @@ -0,0 +1,25 @@ +using DOL.WHD.Section14c.DataAccess; +using DOL.WHD.Section14c.Domain.Models; +using System; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations.Schema; + +namespace DOL.WHD.Section14c.Domain +{ + public class BaseEntity : IAuditedEntity + { + public string CreatedBy_Id { get; set; } + + [ForeignKey("LastModifiedBy_Id")] + public ApplicationUser CreatedBy { get; set; } + + public DateTime CreatedAt { get; set; } + + public string LastModifiedBy_Id { get; set; } + + [ForeignKey("LastModifiedBy_Id")] + public ApplicationUser LastModifiedBy { get; set; } + + public DateTime LastModifiedAt { get; set; } + } +} diff --git a/DOL.WHD.Section14c.Domain/DOL.WHD.Section14c.Domain.csproj b/DOL.WHD.Section14c.Domain/DOL.WHD.Section14c.Domain.csproj index ab9d8f95..f73ec420 100644 --- a/DOL.WHD.Section14c.Domain/DOL.WHD.Section14c.Domain.csproj +++ b/DOL.WHD.Section14c.Domain/DOL.WHD.Section14c.Domain.csproj @@ -65,6 +65,8 @@ + + diff --git a/DOL.WHD.Section14c.Domain/IAuditedEntity.cs b/DOL.WHD.Section14c.Domain/IAuditedEntity.cs new file mode 100644 index 00000000..bf2f804c --- /dev/null +++ b/DOL.WHD.Section14c.Domain/IAuditedEntity.cs @@ -0,0 +1,16 @@ +using DOL.WHD.Section14c.Domain.Models; +using System; + +namespace DOL.WHD.Section14c.DataAccess +{ + public interface IAuditedEntity + { + string CreatedBy_Id { get; set; } + ApplicationUser CreatedBy { get; set; } + DateTime CreatedAt { get; set; } + + string LastModifiedBy_Id { get; set; } + ApplicationUser LastModifiedBy { get; set; } + DateTime LastModifiedAt { get; set; } + } +} diff --git a/DOL.WHD.Section14c.Domain/Models/Address.cs b/DOL.WHD.Section14c.Domain/Models/Address.cs index e50d2a2e..20ed8ad0 100644 --- a/DOL.WHD.Section14c.Domain/Models/Address.cs +++ b/DOL.WHD.Section14c.Domain/Models/Address.cs @@ -2,7 +2,7 @@ namespace DOL.WHD.Section14c.Domain.Models { - public class Address + public class Address : BaseEntity { public int Id { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/ApplicationSave.cs b/DOL.WHD.Section14c.Domain/Models/ApplicationSave.cs index cde8a583..48749e76 100644 --- a/DOL.WHD.Section14c.Domain/Models/ApplicationSave.cs +++ b/DOL.WHD.Section14c.Domain/Models/ApplicationSave.cs @@ -1,11 +1,12 @@ using System; using System.ComponentModel.DataAnnotations; -using System.Collections.Generic; - using Attachment = DOL.WHD.Section14c.Domain.Models.Submission.Attachment; +using System.Collections.Generic; +using Attachment = DOL.WHD.Section14c.Domain.Models.Submission.Attachment; +using DOL.WHD.Section14c.DataAccess; namespace DOL.WHD.Section14c.Domain.Models { - public class ApplicationSave + public class ApplicationSave : BaseEntity { public ApplicationSave() { diff --git a/DOL.WHD.Section14c.Domain/Models/OrganizationMembership.cs b/DOL.WHD.Section14c.Domain/Models/OrganizationMembership.cs index 2dc8fa77..51e9481f 100644 --- a/DOL.WHD.Section14c.Domain/Models/OrganizationMembership.cs +++ b/DOL.WHD.Section14c.Domain/Models/OrganizationMembership.cs @@ -5,7 +5,7 @@ namespace DOL.WHD.Section14c.Domain.Models { [DataContract] - public class OrganizationMembership + public class OrganizationMembership : BaseEntity { public OrganizationMembership() { diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/AlternateWageData.cs b/DOL.WHD.Section14c.Domain/Models/Submission/AlternateWageData.cs index b09106ba..25ac9470 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/AlternateWageData.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/AlternateWageData.cs @@ -6,8 +6,10 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class AlternateWageData + public class AlternateWageData : BaseEntity { + public int Id { get; set; } + public string AlternateWorkDescription { get; set; } public string AlternateDataSourceUsed { get; set; } public double PrevailingWageProvidedBySource { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/ApplicationSubmission.cs b/DOL.WHD.Section14c.Domain/Models/Submission/ApplicationSubmission.cs index 96330cfa..c7f16e9e 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/ApplicationSubmission.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/ApplicationSubmission.cs @@ -3,7 +3,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class ApplicationSubmission + public class ApplicationSubmission : BaseEntity { public int Id { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/Attachment.cs b/DOL.WHD.Section14c.Domain/Models/Submission/Attachment.cs index 23e3422f..48e8b3b8 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/Attachment.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/Attachment.cs @@ -4,7 +4,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class Attachment + public class Attachment : BaseEntity { public Attachment() { diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/Employee.cs b/DOL.WHD.Section14c.Domain/Models/Submission/Employee.cs index 023e9a28..2e47e3dc 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/Employee.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/Employee.cs @@ -2,7 +2,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class Employee + public class Employee : BaseEntity { public int Id { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/EmployerInfo.cs b/DOL.WHD.Section14c.Domain/Models/Submission/EmployerInfo.cs index 1f50611d..514d55dd 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/EmployerInfo.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/EmployerInfo.cs @@ -4,7 +4,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class EmployerInfo + public class EmployerInfo : BaseEntity { public int Id { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/PrevailingWageSurveyInfo.cs b/DOL.WHD.Section14c.Domain/Models/Submission/PrevailingWageSurveyInfo.cs index 40c59fb4..363f8c9c 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/PrevailingWageSurveyInfo.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/PrevailingWageSurveyInfo.cs @@ -3,7 +3,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class PrevailingWageSurveyInfo + public class PrevailingWageSurveyInfo : BaseEntity { public int Id { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/Response.cs b/DOL.WHD.Section14c.Domain/Models/Submission/Response.cs index a37dee2f..2b92f0be 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/Response.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/Response.cs @@ -7,7 +7,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class Response + public class Response : BaseEntity { public int Id { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/SourceEmployer.cs b/DOL.WHD.Section14c.Domain/Models/Submission/SourceEmployer.cs index 1da8bce3..cdacf13a 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/SourceEmployer.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/SourceEmployer.cs @@ -3,7 +3,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class SourceEmployer + public class SourceEmployer : BaseEntity { public int Id { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/WIOA.cs b/DOL.WHD.Section14c.Domain/Models/Submission/WIOA.cs index 12376fc7..a026b50a 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/WIOA.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/WIOA.cs @@ -3,7 +3,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class WIOA + public class WIOA : BaseEntity { [Key] public int Id { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/WIOAWorker.cs b/DOL.WHD.Section14c.Domain/Models/Submission/WIOAWorker.cs index 72061cb8..72d0e50a 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/WIOAWorker.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/WIOAWorker.cs @@ -7,7 +7,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class WIOAWorker + public class WIOAWorker : BaseEntity { [Key] public int Id { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/WageTypeInfo.cs b/DOL.WHD.Section14c.Domain/Models/Submission/WageTypeInfo.cs index 6530ef69..b093e880 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/WageTypeInfo.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/WageTypeInfo.cs @@ -2,7 +2,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class WageTypeInfo + public class WageTypeInfo : BaseEntity { public int Id { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/WorkSite.cs b/DOL.WHD.Section14c.Domain/Models/Submission/WorkSite.cs index c1fc1e91..8b8e1fb3 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/WorkSite.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/WorkSite.cs @@ -3,7 +3,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class WorkSite + public class WorkSite : BaseEntity { public int Id { get; set; } diff --git a/DOL.WHD.Section14c.Domain/Models/Submission/WorkerCountInfo.cs b/DOL.WHD.Section14c.Domain/Models/Submission/WorkerCountInfo.cs index 9209cf31..e5154353 100644 --- a/DOL.WHD.Section14c.Domain/Models/Submission/WorkerCountInfo.cs +++ b/DOL.WHD.Section14c.Domain/Models/Submission/WorkerCountInfo.cs @@ -2,7 +2,7 @@ namespace DOL.WHD.Section14c.Domain.Models.Submission { - public class WorkerCountInfo + public class WorkerCountInfo : BaseEntity { public int Id { get; set; }