public override int SaveChanges()
        {
            var modifiedEntries = ChangeTracker.Entries().Where(x => x.Entity is IAuditEntity &&
                                                                (x.State == EntityState.Added || x.State == EntityState.Modified));

            try
            {
                foreach (var entry in modifiedEntries)
                {
                    IAuditEntity entity = entry.Entity as IAuditEntity;
                    if (entity != null)
                    {
                        DateTime now = DateTime.UtcNow;
                        if (entry.State == EntityState.Added)
                        {
                            entity.CreatedDate = now;
                            entity.Status      = true;
                        }
                        else
                        {
                            base.Entry(entity).Property(x => x.CreatedDate).IsModified = false;
                        }
                        entity.UpdatedDate = now;
                    }
                }

                return(base.SaveChanges());
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
            {
                var validationErrors = dbEx.EntityValidationErrors;
                var validationError  = validationErrors.SelectMany(x => x.ValidationErrors).ToList();
                throw dbEx;
            }
        }
Exemple #2
0
        public override int SaveChanges()
        {
            var modifiedEntries = ChangeTracker.Entries()
                                  .Where(x => x.Entity is IAuditEntity &&
                                         (x.State == System.Data.Entity.EntityState.Added || x.State == System.Data.Entity.EntityState.Modified));

            foreach (var entry in modifiedEntries)
            {
                IAuditEntity entity = entry.Entity as IAuditEntity;
                if (entity != null)
                {
                    //IUserContext currentUserContext = this._userContextProvider.GetCurrentUserContext();
                    //long num = (currentUserContext != null) ? currentUserContext.Id : 1;
                    DateTime now = DateTime.UtcNow;

                    if (entry.State == System.Data.Entity.EntityState.Added)
                    {
                        entity.CreatedBy   = 1;
                        entity.CreatedDate = now;
                    }
                    else
                    {
                        base.Entry(entity).Property(x => x.CreatedBy).IsModified   = false;
                        base.Entry(entity).Property(x => x.CreatedDate).IsModified = false;
                    }

                    entity.ModifiedBy   = 1;
                    entity.ModifiedDate = now;
                }
            }

            return(base.SaveChanges());
        }
        public override int SaveChanges()
        {
            var modifiedEntries = ChangeTracker.Entries()
                                  .Where(x => x.Entity is IAuditEntity &&
                                         (x.State == EntityState.Added || x.State == EntityState.Modified || x.State == EntityState.Deleted));

            foreach (var entry in modifiedEntries)
            {
                IAuditEntity entity = entry.Entity as IAuditEntity;
                if (entity != null)
                {
                    DateTime now = DateTime.Now;

                    if (entry.State == EntityState.Added)
                    {
                        entity.CreatedTime = now;
                        entity.CreatedBy   = _user;
                    }
                    else
                    {
                        base.Entry(entity).Property(x => x.CreatedTime).IsModified = false;
                    }

                    entity.UpdatedTime = now;
                    entity.UpdatedBy   = _user;
                }
            }
            return(base.SaveChanges());
        }
Exemple #4
0
        private void CommitMethod()
        {
            var modifiedEntries = ChangeTracker.Entries()
                                  .Where(x => x.Entity is IAuditEntity &&
                                         (x.State == EntityState.Added || x.State == EntityState.Modified));

            foreach (var entry in modifiedEntries)
            {
                IAuditEntity entity = entry.Entity as IAuditEntity;
                if (entity != null)
                {
                    DateTime now = DateTime.Now;

                    if (entry.State == EntityState.Added)
                    {
                        entity.CreatedAt = now;
                    }
                    else
                    {
                        base.Entry(entity).Property(x => x.CreatedAt).IsModified = false;
                    }

                    entity.UpdatedAt = now;
                }
            }
        }
Exemple #5
0
        public static void UpdateAuditFields(IAuditEntity audit)
        {
            var identity  = (ClaimsIdentity)Thread.CurrentPrincipal.Identity;
            var idClaim   = identity.FindFirst(ClaimTypes.NameIdentifier);
            var nameClaim = identity.FindFirst(ClaimTypes.Name);

            UpdateAuditFields(audit,
                              idClaim == null ? 0.ToString(CultureInfo.InvariantCulture) : idClaim.Value,
                              nameClaim == null ? "Unknown" : nameClaim.Value);
        }
 /// <summary>
 /// Saves the or update audit entity.
 /// </summary>
 /// <param name="auditEntity">The audit entity.</param>
 /// <param name="isCopy">if set to <c>true</c> [is copy].</param>
 public void SaveOrUpdateAuditEntity(IAuditEntity auditEntity, bool isCopy)
 {
     try
     {
         GenericGateway genericGateway = new GenericGateway();
         genericGateway.SaveOrUpdateEntity<IAudit>(AuditMapper.GetAuditEntity<IAuditEntity>(auditEntity), isCopy);
     }
     catch (Exception ex)
     {
         Logger.Error("Error at SaveOrUpdateAuditEntity", ex);
         Logger.Error("Error in SaveOrUpdateAuditEntity: Message - " + ex.Message + " StackTrace - " + ex.StackTrace);
         throw;
     }
 }
Exemple #7
0
        public static void UpdateAuditFields(IAuditEntity audit, string id, string name)
        {
            audit.Created = DateTime.UtcNow;
            audit.Updated = DateTime.UtcNow;

            audit.CreatedBy = new CreatorRef
            {
                Id         = id,
                ScreenName = name
            };
            audit.UpdatedBy = new CreatorRef
            {
                Id         = id,
                ScreenName = name
            };
        }
Exemple #8
0
        public static void SetAudit(IAuditEntity entity, AuditEntityState state, DateTime timestamp)
        {
            if (entity is null)
            {
                return;
            }
            if (state != AuditEntityState.None)
            {
                if (state == AuditEntityState.Added)
                {
                    entity.DateCreated = timestamp;
                }

                entity.DateModified = timestamp;
            }
        }
Exemple #9
0
        public IEnumerable <Audit> GetEntityHistory(IAuditEntity e)
        {
            var name = e.GetType().FullName;

            var tables = _appDbContext.Set <Table>();
            var table  = tables.FirstOrDefault(o => o.Name == name);

            if (table == null)
            {
                return(null);
            }

            var auditTable = _appDbContext.Set <Audit>();

            return(auditTable.Where(o => o.EntityId == e.Id && o.TableId == table.Id).ToList());
        }
Exemple #10
0
    // Does not append log if entity has no audit.
    // This prevents spam of entities that get retained every frame.
    // To enable log, add an audit component to the entity.
    // Likewise, to disable log, remove an audit component from the entity.
    // In visual debugging, there is a drop-down to add components.
    private static void AppendLog(IEntity entity, object owner)
    {
        IAuditEntity auditEntity = (IAuditEntity)entity;

        if (auditEntity == null)
        {
            return;
        }
        if (!auditEntity.hasAudit)
        {
            return;
        }
        List <string> logs = auditEntity.audit.logs;

        if (logs == null)
        {
            logs = new List <string>();
        }
        logs.Add(owner.ToString());
        auditEntity.ReplaceAudit(logs);
    }
        private IAuditEntity AuditEntity(DbEntityEntry entityEntry, AuditTypeInfo auditTypeInfo, DateTimeOffset auditDateTime, string user)
        {
            // Create audit entity.
            DbSet        set         = this.Set(auditTypeInfo.AuditEntityType);
            IAuditEntity auditEntity = set.Create() as IAuditEntity;

            // Check audit entity for complex types.
            var complexTypes = GetComplexTypes(auditTypeInfo, entityEntry);

            //Instantiate complex types.
            foreach (var field in complexTypes)
            {
                var property   = auditEntity.GetType().GetProperty(field);
                var entityType = property.PropertyType;
                property.SetValue(auditEntity, Activator.CreateInstance(entityType));
            }

            //Attach audit Entity to the context.
            set.Add(auditEntity);

            // Copy the properties.
            DbEntityEntry auditEntityEntry = this.Entry(auditEntity);

            foreach (string propertyName in auditTypeInfo.AuditProperties)
            {
                auditEntityEntry.Property(propertyName).CurrentValue = entityEntry.Property(propertyName).OriginalValue;
            }

            // Set the audit columns.
            auditEntityEntry.Property(AuditUpdatedColumnName).CurrentValue  = auditDateTime;
            auditEntityEntry.Property(AuditUserColumnName).CurrentValue     = user;
            auditEntityEntry.Property(AuditTypeColumnName).CurrentValue     = entityEntry.State == EntityState.Modified ? "update" : "delete";
            auditEntityEntry.Property(AuditSourceIdColumnName).CurrentValue = entityEntry.OriginalValues.GetValue <int>("Id");

            return(auditEntity);
        }
Exemple #12
0
        protected virtual AuditEntityState GetAuditEntityState(IAuditEntity entity, BulkInsertOperation operation)
        {
            if (entity is null)
            {
                return(AuditEntityState.None);
            }

            if ((operation & (BulkInsertOperation.BulkInsert | BulkInsertOperation.BulkInsertOrUpdate)) != 0)
            {
                if (entity.DateCreated == DateTime.MinValue)
                {
                    return(AuditEntityState.Added);
                }

                return(AuditEntityState.Modified);
            }

            if (operation == BulkInsertOperation.BulkUpdate)
            {
                return(AuditEntityState.Modified);
            }

            return(AuditEntityState.None);
        }
 public static void FlagForCreate(this IAuditEntity entity, string createdBy)
 {
     entity.CreatedBy  = createdBy;
     entity.CreatedUtc = DateTime.UtcNow;
 }
Exemple #14
0
 public static bool IsDeleted(this IAuditEntity e)
 {
     return(e.DeletedAt != null);
 }
Exemple #15
0
 public AuditedEntity(IAuditEntity auditEntity, IEnumerable <PropertyEntry> temporaryProperties)
 {
     this.AuditEntity         = auditEntity;
     this.TemporaryProperties = temporaryProperties;
 }
Exemple #16
0
        private IList <IAuditStep> GetEntitySteps(IAuditEntity entity, ref int stepOrder)
        {
            var steps = new List <IAuditStep>
            {
                { new AuditStep {
                      WizardPageType = WizardPageEnum.EntityInfo, StepOrder = stepOrder++
                  } },
                { new AuditStep {
                      WizardPageType = WizardPageEnum.BusinessInfo, StepOrder = stepOrder++
                  } },
                { new AuditStep {
                      WizardPageType = WizardPageEnum.Location, StepOrder = stepOrder++
                  } },
                { new AuditStep {
                      WizardPageType = WizardPageEnum.Officers, StepOrder = stepOrder++
                  } },
            };

            // Add payroll steps if audit has exposure basis of payroll
            if ((entity.ExposureBasis & ExposureBasisEnum.Payroll) == ExposureBasisEnum.Payroll)
            {
                steps.AddRange(new List <IAuditStep>
                {
                    { new AuditStep {
                          WizardPageType = WizardPageEnum.Payroll, StepOrder = stepOrder++
                      } },
                    { new AuditStep {
                          WizardPageType = WizardPageEnum.Classification, StepOrder = stepOrder++
                      } },
                    { new AuditStep {
                          WizardPageType = WizardPageEnum.Labor, StepOrder = stepOrder++
                      } },
                });
            }


            // Add sales steps if audit has exposure basis of sales
            if ((entity.ExposureBasis & ExposureBasisEnum.Sales) == ExposureBasisEnum.Sales)
            {
                steps.AddRange(new List <IAuditStep>
                {
                    { new AuditStep {
                          WizardPageType = WizardPageEnum.SalesSetup, StepOrder = stepOrder++
                      } },
                    { new AuditStep {
                          WizardPageType = WizardPageEnum.Sales, StepOrder = stepOrder++
                      } },
                    { new AuditStep {
                          WizardPageType = WizardPageEnum.SalesVerification, StepOrder = stepOrder++
                      } },
                });
            }

            // Add final steps for entity
            steps.Add(new AuditStep {
                WizardPageType = WizardPageEnum.Questions, StepOrder = stepOrder++
            });
            steps.Add(new AuditStep {
                WizardPageType = WizardPageEnum.Summary, StepOrder = stepOrder++
            });

            // Set the entity id
            foreach (var step in steps)
            {
                step.EntityId = entity.Id;
            }

            return(steps);
        }
Exemple #17
0
    // To unsubscribe from `AppendLog`, query each entity and unsubscribe.
    private static void AuditOnRetained(IContext context, IEntity entity)
    {
        IAuditEntity auditEntity = (IAuditEntity)entity;

        ((Entity)auditEntity).OnEntityRetained += AppendLog;
    }