public static void MapToDB(ThisEntity input, DBEntity output) { //want output ensure fields input create are not wiped if (output.Id == 0) { output.CTID = input.CTID; } //if ( !string.IsNullOrWhiteSpace( input.CredentialRegistryId ) ) // output.CredentialRegistryId = input.CredentialRegistryId; output.Id = input.Id; //output.EntityStateId = input.EntityStateId; output.Name = GetData(input.Name); output.Description = GetData(input.Description); //output.JobsObtainedJson = input.JobsObtained; input.JsonProperties.JobsObtainedList = input.JobsObtainedList; //NOT proper. Decided to use a generic JsonProperties here. Will rename if any additional properties need to be added. output.JobsObtainedJson = JsonConvert.SerializeObject(input.JsonProperties); output.Source = GetUrlData(input.Source); if (IsValidDate(input.DateEffective)) { output.DateEffective = DateTime.Parse(input.DateEffective); } else { output.DateEffective = null; } //====================================================================== }
public static ThisEntity GetBasic(int id) { ThisEntity entity = new ThisEntity(); using (var context = new EntityContext()) { DBEntity item = context.EmploymentOutcomeProfile .SingleOrDefault(s => s.Id == id); if (item != null && item.Id > 0) { MapFromDB(item, entity, false); } } return(entity); }
public static ThisEntity GetByCtid(string ctid) { ThisEntity entity = new ThisEntity(); using (var context = new EntityContext()) { DBEntity item = context.EmploymentOutcomeProfile .FirstOrDefault(s => s.CTID.ToLower() == ctid.ToLower()); if (item != null && item.Id > 0) { MapFromDB(item, entity, false); } } return(entity); }
// public static ThisEntity GetDetails(int id) { ThisEntity entity = new ThisEntity(); using (var context = new EntityContext()) { DBEntity item = context.EmploymentOutcomeProfile .SingleOrDefault(s => s.Id == id); if (item != null && item.Id > 0) { //check for virtual deletes if (item.EntityStateId == 0) { return(entity); } MapFromDB(item, entity, true); } } return(entity); }
public bool Save(ThisEntity entity, Entity parentEntity, ref SaveStatus status) { bool isValid = true; int count = 0; try { using (var context = new EntityContext()) { if (ValidateProfile(entity, ref status) == false) { //return false; } //actually will always be an add if (entity.Id > 0) { //TODO - consider if necessary, or interferes with anything context.Configuration.LazyLoadingEnabled = false; DBEntity efEntity = context.EmploymentOutcomeProfile .FirstOrDefault(s => s.Id == entity.Id); if (efEntity != null && efEntity.Id > 0) { //fill in fields that may not be in entity entity.RowId = efEntity.RowId; MapToDB(entity, efEntity); if (efEntity.EntityStateId == 0) { var url = string.Format(UtilityManager.GetAppKeyValue("credentialFinderSite") + "EmploymentOutcomeProfile/{0}", efEntity.Id); SiteActivity sa = new SiteActivity() { ActivityType = "EmploymentOutcomeProfile", Activity = "Import", Event = "Reactivate", Comment = string.Format("EmploymentOutcomeProfile had been marked as deleted, and was reactivted by the import. CTID: {0}, SWP: {1}", entity.CTID, entity.Source), ActivityObjectId = entity.Id }; new ActivityManager().SiteActivityAdd(sa); } //assume and validate, that if we get here we have a full record if (efEntity.EntityStateId != 2) { efEntity.EntityStateId = 3; } //if ( IsValidDate( status.EnvelopeCreatedDate ) && status.LocalCreatedDate < efEntity.Created ) //{ // efEntity.Created = status.LocalCreatedDate; //} if (IsValidDate(status.EnvelopeUpdatedDate) && status.LocalUpdatedDate != efEntity.LastUpdated) { efEntity.LastUpdated = status.LocalUpdatedDate; } //has changed? if (HasStateChanged(context)) { if (IsValidDate(status.EnvelopeUpdatedDate)) { efEntity.LastUpdated = status.LocalUpdatedDate; } else { efEntity.LastUpdated = DateTime.Now; } //NOTE efEntity.EntityStateId is set to 0 in delete method ) count = context.SaveChanges(); //can be zero if no data changed if (count >= 0) { isValid = true; } else { //?no info on error isValid = false; string message = string.Format(thisClassName + ".Save Failed", "Attempted to update a EmploymentOutcomeProfile. The process appeared to not work, but was not an exception, so we have no message, or no clue. EmploymentOutcomeProfile: {0}, Id: {1}", entity.Name, entity.Id); status.AddError("Error - the update was not successful. " + message); EmailManager.NotifyAdmin(thisClassName + ".Save Failed Failed", message); } } else { //update entity.LastUpdated - assuming there has to have been some change in related data //new EntityManager().UpdateModifiedDate( entity.RowId, ref status ); } if (isValid) { if (!UpdateParts(entity, ref status)) { isValid = false; } SiteActivity sa = new SiteActivity() { ActivityType = "EmploymentOutcomeProfile", Activity = "Import", Event = "Update", Comment = string.Format("EmploymentOutcomeProfile was updated by the import. CTID: {0}, Source: {1}", entity.CTID, entity.Source), ActivityObjectId = entity.Id }; new ActivityManager().SiteActivityAdd(sa); new EntityManager().UpdateModifiedDate(entity.RowId, ref status, efEntity.LastUpdated); } } else { status.AddError("Error - update failed, as record was not found."); } } else { int newId = Add(entity, parentEntity, ref status); if (newId == 0 || status.HasErrors) { isValid = false; } } } } catch (System.Data.Entity.Validation.DbEntityValidationException dbex) { string message = HandleDBValidationError(dbex, thisClassName + string.Format(".Save. id: {0}, Name: {1}", entity.Id, entity.Name), "EmploymentOutcomeProfile"); status.AddError(thisClassName + ".Save(). Error - the save was not successful. " + message); } catch (Exception ex) { string message = FormatExceptions(ex); LoggingHelper.LogError(ex, thisClassName + string.Format(".Save. id: {0}, Name: {1}", entity.Id, entity.Name)); status.AddError(thisClassName + ".Save(). Error - the save was not successful. " + message); isValid = false; } return(isValid); }
public static void MapFromDB(DBEntity input, ThisEntity output, bool includingParts) { output.Id = input.Id; output.RowId = input.RowId; output.EntityStateId = input.EntityStateId; output.Name = input.Name == null ? "" : input.Name; output.Description = input.Description == null ? "" : input.Description; output.CTID = input.CTID; if (IsValidDate(input.DateEffective)) { output.DateEffective = (( DateTime )input.DateEffective).ToString("yyyy-MM-dd"); } else { output.DateEffective = ""; } // //output.JobsObtained = input.JobsObtained ?? 0; if (!string.IsNullOrEmpty(input.JobsObtainedJson)) { var jp = JsonConvert.DeserializeObject <EmploymentOutcomeProfileProperties>(input.JobsObtainedJson); if (jp != null) { //unpack JobsObtainedList output.JobsObtainedList = jp.JobsObtainedList; } } output.Source = GetUrlData(input.Source); if (IsValidDate(input.Created)) { output.Created = ( DateTime )input.Created; } if (IsValidDate(input.LastUpdated)) { output.LastUpdated = ( DateTime )input.LastUpdated; } if (string.IsNullOrWhiteSpace(output.CTID) || output.EntityStateId < 3) { output.IsReferenceVersion = true; return; } //===== var relatedEntity = EntityManager.GetEntity(output.RowId, false); if (relatedEntity != null && relatedEntity.Id > 0) { output.EntityLastUpdated = relatedEntity.LastUpdated; } //components if (includingParts) { // output.Jurisdiction = Entity_JurisdictionProfileManager.Jurisdiction_GetAll(output.RowId); //get datasetprofiles output.RelevantDataSet = DataSetProfileManager.GetAll(output.RowId, true); } } //
/// <summary> /// Delete profile /// </summary> /// <param name="id"></param> /// <param name="statusMessage"></param> /// <returns></returns> public bool Delete(int id, ref List <string> messages) { bool isValid = true; if (id < 1) { messages.Add(thisClassName + ".Delete() Error - a valid holders profile id must be provided."); return(false); } using (var context = new EntityContext()) { try { context.Configuration.LazyLoadingEnabled = false; DBEntity efEntity = context.EmploymentOutcomeProfile .FirstOrDefault(s => s.Id == id); if (efEntity != null && efEntity.Id > 0) { Guid rowId = efEntity.RowId; //need to remove from Entity. //need to trigger delete of relevant dataset, timeframe, and new DataSetProfileManager().DeleteAll(rowId, ref messages); //-using before delete trigger - verify won't have RI issues string msg = string.Format(" EmploymentOutcomeProfile. Id: {0}, Ctid: {1}.", efEntity.Id, efEntity.CTID); //21-03-31 mp - just removing the profile will not remove its entity and the latter's children! string statusMessage = ""; new EntityManager().Delete(rowId, string.Format("EmploymentOutcomeProfile: {0} ({1})", string.IsNullOrWhiteSpace(efEntity.Name) ? "none" : efEntity.Name, efEntity.Id), ref statusMessage); // context.EmploymentOutcomeProfile.Remove(efEntity); int count = context.SaveChanges(); if (count > 0) { new ActivityManager().SiteActivityAdd(new SiteActivity() { ActivityType = "EmploymentOutcomeProfile", Activity = "Import", Event = "Delete", Comment = msg, ActivityObjectId = efEntity.Id }); isValid = true; } } else { messages.Add(thisClassName + ".Delete() Warning No action taken, as the record was not found."); } } catch (Exception ex) { LoggingHelper.LogError(ex, thisClassName + ".Delete()"); isValid = false; var statusMessage = FormatExceptions(ex); if (statusMessage.ToLower().IndexOf("the delete statement conflicted with the reference constraint") > -1) { statusMessage = "Error: this EmploymentOutcomeProfile cannot be deleted as it is being referenced by other items, such as roles or credentials. These associations must be removed before this EmploymentOutcomeProfile can be deleted."; } messages.Add(statusMessage); } } return(isValid); }
/// <summary> /// add a EmploymentOutcomeProfile /// </summary> /// <param name="entity"></param> /// <param name="status"></param> /// <returns></returns> private int Add(ThisEntity entity, Entity parentEntity, ref SaveStatus status) { DBEntity efEntity = new DBEntity(); using (var context = new EntityContext()) { try { MapToDB(entity, efEntity); if (IsValidGuid(entity.RowId)) { efEntity.RowId = entity.RowId; } else { efEntity.RowId = Guid.NewGuid(); } efEntity.EntityStateId = 3; //the envelope date may not reflect when the earning profile was added //if ( IsValidDate( status.EnvelopeCreatedDate ) ) //{ // efEntity.Created = status.LocalCreatedDate; // efEntity.LastUpdated = status.LocalCreatedDate; //} //else { efEntity.Created = System.DateTime.Now; efEntity.LastUpdated = System.DateTime.Now; } context.EmploymentOutcomeProfile.Add(efEntity); // submit the change to database int count = context.SaveChanges(); if (count > 0) { if (efEntity.Id == 0) { List <string> messages = new List <string>(); Delete(efEntity.Id, ref messages); efEntity.RowId = Guid.NewGuid(); context.EmploymentOutcomeProfile.Add(efEntity); count = context.SaveChanges(); entity.Id = efEntity.Id; entity.RowId = efEntity.RowId; } else { entity.Id = efEntity.Id; entity.RowId = efEntity.RowId; } //add log entry SiteActivity sa = new SiteActivity() { ActivityType = "EmploymentOutcomeProfile", Activity = "Import", Event = "Add", Comment = string.Format("Full EmploymentOutcomeProfile was added by the import. CTID: {0}, Desc: {1}", entity.CTID, entity.Description), ActivityObjectId = entity.Id }; new ActivityManager().SiteActivityAdd(sa); //TODO new Entity_EmploymentOutcomeProfileManager().Add(parentEntity.EntityUid, entity.Id, ref status); if (UpdateParts(entity, ref status) == false) { } return(efEntity.Id); } else { //?no info on error string message = thisClassName + string.Format(". Add Failed", "Attempted to add a EmploymentOutcomeProfile. The process appeared to not work, but was not an exception, so we have no message, or no clue. EmploymentOutcomeProfile: {0}, ctid: {1}", entity.Name, entity.CTID); status.AddError(thisClassName + ". Error - the add was not successful. " + message); EmailManager.NotifyAdmin("EmploymentOutcomeProfileManager. Add Failed", message); } } catch (System.Data.Entity.Validation.DbEntityValidationException dbex) { string message = HandleDBValidationError(dbex, thisClassName + ".Add() ", "EmploymentOutcomeProfile"); status.AddError(thisClassName + ".Add(). Error - the save was not successful. " + message); LoggingHelper.LogError(message, true); } catch (Exception ex) { string message = FormatExceptions(ex); LoggingHelper.LogError(ex, thisClassName + string.Format(".Add(), CTID: {0}\r\n", efEntity.CTID)); status.AddError(thisClassName + ".Add(). Error - the save was not successful. \r\n" + message); } } return(efEntity.Id); }