public void SingleRecordThatHasBeenDeleted() { DateTime createdTime = DateTime.Today.AddDays(-1); AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); record.AddColumn("CreatedDateTime", typeof(DateTime)); record.AddColumn("Deleted", typeof(bool)); record.SetValue("CreatedDateTime", Iso8601DateTimeConverter.ConvertFromLocalDateTime(createdTime)); record.SetValue("Deleted", "True"); auditRecord.Changes.Add ( AddSession("User", DateTime.Today, "IsDeleted", "False", "True") ); AmplaRecordHistory <ProductionModel> amplaRecordHistory = new AmplaRecordHistory <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = amplaRecordHistory.Reconstruct(); Assert.That(changes, Is.Not.Empty); Assert.That(changes.Count, Is.EqualTo(2)); Assert.That(changes[0].Operation, Is.EqualTo("Create Record")); Assert.That(changes[0].User, Is.EqualTo("System")); Assert.That(changes[0].Changes, Is.Empty); Assert.That(changes[1].Operation, Is.EqualTo("Delete Record")); Assert.That(changes[1].User, Is.EqualTo("User")); Assert.That(changes[1].Changes, Is.Not.Empty); AmplaAuditField deleted = changes[1].Changes[0]; Assert.That(deleted.Name, Is.EqualTo("IsDeleted")); }
public AmplaAddDataBinding(List <TModel> models, List <SubmitDataRecord> records, IAmplaViewProperties <TModel> amplaViewProperties, IModelProperties <TModel> modelProperties) { this.models = models; this.records = records; this.amplaViewProperties = amplaViewProperties; this.modelProperties = modelProperties; }
/// <summary> /// Updates the specified model. /// </summary> /// <param name="model">The model.</param> public void Update(TModel model) { IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(model); amplaViewProperties.Enforce.CanModify(); List <int> identifiers = new List <int>(); TModel existing = null; IAmplaBinding modelBinding = new ModelIdentifierBinding <TModel>(model, identifiers, ModelProperties); if (modelBinding.Validate() && modelBinding.Bind()) { existing = FindById(identifiers[0]); } SubmitDataRequest request = new SubmitDataRequest { Credentials = CreateCredentials() }; List <SubmitDataRecord> records = new List <SubmitDataRecord>(); IAmplaBinding binding = new AmplaUpdateDataBinding <TModel>(existing, model, records, amplaViewProperties, ModelProperties); if (binding.Validate() && binding.Bind()) { request.SubmitDataRecords = records.ToArray(); WebServiceClient.SubmitData(request); } }
/// <summary> /// Adds the specified model. /// </summary> /// <param name="model">The model.</param> public void Add(TModel model) { IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(model); amplaViewProperties.Enforce.CanAdd(); SubmitDataRequest request = new SubmitDataRequest { Credentials = CreateCredentials() }; List <SubmitDataRecord> records = new List <SubmitDataRecord>(); List <TModel> models = new List <TModel> { model }; IAmplaBinding binding = new AmplaAddDataBinding <TModel>(models, records, amplaViewProperties, ModelProperties); if (binding.Validate() && binding.Bind()) { request.SubmitDataRecords = records.ToArray(); SubmitDataResponse response = WebServiceClient.SubmitData(request); IAmplaBinding resultBinding = new AmplaDataSubmissionResultBinding <TModel>(response.DataSubmissionResults, models, ModelProperties); if (resultBinding.Validate()) { resultBinding.Bind(); } } }
public void DetectChangesWithAuditTrailWithNoChangesInValues() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); auditRecord.Changes = new List <AmplaAuditSession> { AddSession("User", DateTime.Today, "Value", "100", "100"), AddSession("Admin", DateTime.Today.AddHours(1), new[] { "One", "Two" }, new[] { "11", "222" }, new[] { "111", "222" }) }; ModifyRecordEventDectection <ProductionModel> recordEventDectection = new ModifyRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Not.Empty); Assert.That(changes.Count, Is.EqualTo(1)); Assert.That(changes[0].User, Is.EqualTo("Admin")); Assert.That(changes[0].VersionDateTime, Is.EqualTo(DateTime.Today.AddHours(1))); Assert.That(changes[0].Operation, Is.EqualTo("Modify Record")); Assert.That(changes[0].Changes, Is.Not.Empty); Assert.That(changes[0].Changes.Length, Is.EqualTo(1)); Assert.That(changes[0].Changes[0].Name, Is.EqualTo("One")); Assert.That(changes[0].Changes[0].OriginalValue, Is.EqualTo("11")); Assert.That(changes[0].Changes[0].EditedValue, Is.EqualTo("111")); }
/// <summary> /// Validates the Ampla Field Mapping. /// </summary> /// <returns></returns> public IList <string> ValidateMapping(TModel model) { List <string> messages = new List <string>(); IAmplaViewProperties <TModel> viewProperties = GetViewProperties(model); messages.AddRange(viewProperties.ValidateViewPermissions()); IEnumerable <FieldMapping> fieldMappings = viewProperties.GetFieldMappings(); List <string> missingFields = new List <string>(modelProperties.GetProperties()); foreach (FieldMapping fieldMapping in fieldMappings) { string field = fieldMapping.Name; string message; if (!ModelProperties.CanMapField(fieldMapping, out message)) { messages.Add(message ?? "Error message"); } if (missingFields.Contains(field)) { missingFields.Remove(field); } } if (missingFields.Count > 0) { messages.AddRange(missingFields.Select(modelField => string.Format("The property '{0}' is not mapped to an Ampla Field.", modelField))); } return(messages); }
/// <summary> /// Gets the versions of the model /// </summary> /// <param name="id">The unique identifier.</param> /// <returns></returns> public ModelVersions GetVersions(int id) { IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(null); amplaViewProperties.Enforce.CanView(); FilterValue idFilter = new FilterValue("Id", Convert.ToString(id)); FilterValue deletedFilter = new FilterValue("Deleted", ""); GetDataRequest dataRequest = GetDataRequest(false, idFilter, deletedFilter); GetDataResponse dataResponse = webServiceClient.GetData(dataRequest); TModel model; AmplaRecord amplaRecord = FindAmplaRecord(dataResponse, ModelProperties, amplaViewProperties, out model); if (amplaRecord != null) { var request = GetAuditDataRequest(amplaRecord); GetAuditDataResponse response = webServiceClient.GetAuditData(request); List <AmplaAuditRecord> auditRecords = new List <AmplaAuditRecord>(); IAmplaBinding binding = new AmplaGetAuditDataRecordBinding <TModel>(response, amplaRecord, auditRecords, modelProperties); if (binding.Validate() && binding.Bind()) { AmplaAuditRecord auditRecord = auditRecords.Count > 0 ? auditRecords[0] : null; ModelVersions modelVersions = new ModelVersions(amplaRecord); IAmplaBinding historyBinding = new AmplaGetDataVersionsBinding <TModel>(amplaRecord, auditRecord, model, modelVersions, modelProperties, amplaViewProperties); if (historyBinding.Validate() && historyBinding.Bind()) { return(modelVersions); } } } return(null); }
public void DetectChangesWithOneFieldAuditTrail() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); auditRecord.Changes = new List <AmplaAuditSession> { AddSession("User", DateTime.Today, "Value", "100", "200") }; ModifyRecordEventDectection <ProductionModel> recordEventDectection = new ModifyRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Not.Empty); Assert.That(changes.Count, Is.EqualTo(1)); Assert.That(changes[0].User, Is.EqualTo("User")); Assert.That(changes[0].VersionDateTime, Is.EqualTo(DateTime.Today)); Assert.That(changes[0].Operation, Is.EqualTo("Modify Record")); Assert.That(changes[0].Changes, Is.Not.Empty); Assert.That(changes[0].Changes[0].Name, Is.EqualTo("Value")); Assert.That(changes[0].Changes[0].OriginalValue, Is.EqualTo("100")); Assert.That(changes[0].Changes[0].EditedValue, Is.EqualTo("200")); }
public ModifyRecordEventDectection(AmplaRecord amplaRecord, AmplaAuditRecord amplaAuditRecord, IAmplaViewProperties <TModel> viewProperties) : base("Modify Record") { this.amplaRecord = amplaRecord; this.amplaAuditRecord = amplaAuditRecord; this.viewProperties = viewProperties; }
public AmplaGetDataRecordBinding(GetDataResponse response, List <AmplaRecord> records, IModelProperties <TModel> modelProperties, IAmplaViewProperties <TModel> amplaViewProperties) { this.response = response; this.records = records; this.modelProperties = modelProperties; this.amplaViewProperties = amplaViewProperties; }
public AmplaUpdateDataBinding(TModel existing, TModel update, List <SubmitDataRecord> records, IAmplaViewProperties <TModel> amplaViewProperties, IModelProperties <TModel> modelProperties) { this.existing = existing; this.update = update; this.records = records; this.amplaViewProperties = amplaViewProperties; this.modelProperties = modelProperties; }
public AmplaGetDataVersionsBinding(AmplaRecord amplaRecord, AmplaAuditRecord auditRecord, TModel currentModel, ModelVersions versions, IModelProperties <TModel> modelProperties, IAmplaViewProperties <TModel> viewProperties) { this.amplaRecord = amplaRecord; this.auditRecord = auditRecord; this.currentModel = currentModel; this.versions = versions; this.modelProperties = modelProperties; this.viewProperties = viewProperties; }
public void DetectChangesWithNoAuditTrail() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); ModifyRecordEventDectection <ProductionModel> recordEventDectection = new ModifyRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Empty); }
/// <summary> /// Finds the record. /// </summary> /// <param name="id"></param> /// <returns></returns> public AmplaRecord FindRecord(int id) { IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(null); amplaViewProperties.Enforce.CanView(); FilterValue idFilter = new FilterValue("Id", Convert.ToString(id)); FilterValue deletedFilter = new FilterValue("Deleted", ""); var request = GetDataRequest(true, idFilter, deletedFilter); GetDataResponse response = webServiceClient.GetData(request); TModel model; return(FindAmplaRecord(response, ModelProperties, amplaViewProperties, out model)); }
public void DetectChangesWithAuditTrailWithNoChangeInValue() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); auditRecord.Changes = new List <AmplaAuditSession> { AddSession("User", DateTime.Today, "Value", "100", "100") }; ModifyRecordEventDectection <ProductionModel> recordEventDectection = new ModifyRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Empty); }
public void SingleRecordWithNoHistory() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); AmplaRecordHistory <ProductionModel> amplaRecordHistory = new AmplaRecordHistory <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = amplaRecordHistory.Reconstruct(); Assert.That(changes, Is.Not.Empty); Assert.That(changes, Is.Not.Empty); Assert.That(changes.Count, Is.EqualTo(1)); Assert.That(changes[0].Operation, Is.EqualTo("Create Record")); Assert.That(changes[0].User, Is.EqualTo("System")); Assert.That(changes[0].Changes, Is.Empty); }
public void DetectChangesWithDeletedRecords() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); record.AddColumn("Sample Period", typeof(DateTime)); record.SetValue("Sample Period", Iso8601DateTimeConverter.ConvertFromLocalDateTime(DateTime.Today.AddDays(-1))); auditRecord.Changes = new List <AmplaAuditSession> { AddSession("User", DateTime.Today, "IsDeleted", "False", "True") }; ModifyRecordEventDectection <ProductionModel> recordEventDectection = new ModifyRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Empty); }
/// <summary> /// Gets all the models /// </summary> /// <returns></returns> public IList <TModel> GetAll() { IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(null); amplaViewProperties.Enforce.CanView(); var request = GetDataRequest(true); GetDataResponse response = webServiceClient.GetData(request); List <TModel> records = new List <TModel>(); IAmplaBinding binding = new AmplaGetDataBinding <TModel>(response, records, ModelProperties); if (binding.Validate() && binding.Bind()) { return(records); } return(null); }
/// <summary> /// Finds the model using the id. /// </summary> /// <param name="id">The unique identifier.</param> /// <returns></returns> public TModel FindById(int id) { IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(null); amplaViewProperties.Enforce.CanView(); FilterValue filter = new FilterValue("Id", Convert.ToString(id)); var request = GetDataRequest(true, filter); GetDataResponse response = webServiceClient.GetData(request); List <TModel> records = new List <TModel>(); IAmplaBinding binding = new AmplaGetDataBinding <TModel>(response, records, ModelProperties); if (binding.Validate() && binding.Bind()) { return(records.Count == 1 ? records[0] : null); } return(null); }
/// <summary> /// Deletes the specified model. /// </summary> /// <param name="model">The model.</param> public void Delete(TModel model) { IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(model); amplaViewProperties.Enforce.CanDelete(); DeleteRecordsRequest request = new DeleteRecordsRequest { Credentials = CreateCredentials() }; List <DeleteRecord> records = new List <DeleteRecord>(); List <TModel> models = new List <TModel> { model }; IAmplaBinding binding = new AmplaDeleteDataBinding <TModel>(models, records, ModelProperties); if (binding.Validate() && binding.Bind()) { request.DeleteRecords = records.ToArray(); WebServiceClient.DeleteRecords(request); } }
/// <summary> /// Unconfirms the specified model. /// </summary> /// <param name="model">The model.</param> public void Unconfirm(TModel model) { IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(model); amplaViewProperties.Enforce.CanUnconfirm(); UpdateRecordStatusRequest request = new UpdateRecordStatusRequest { Credentials = CreateCredentials() }; List <UpdateRecordStatus> records = new List <UpdateRecordStatus>(); List <TModel> models = new List <TModel> { model }; IAmplaBinding binding = new AmplaUnconfirmDataBinding <TModel>(models, records, ModelProperties); if (binding.Validate() && binding.Bind()) { request.UpdateRecords = records.ToArray(); WebServiceClient.UpdateRecordStatus(request); } }
public void ShowSimpleUsersName() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); record.AddColumn("CreatedDateTime", typeof(DateTime)); record.AddColumn("CreatedBy", typeof(string)); record.SetValue("CreatedBy", "System Configuration.Users.User"); DateTime created = DateTime.Today.AddHours(1); record.SetValue("CreatedDateTime", Iso8601DateTimeConverter.ConvertFromLocalDateTime(created)); CreateRecordEventDectection <ProductionModel> recordEventDectection = new CreateRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Not.Empty); Assert.That(changes[0].Operation, Is.EqualTo("Create Record")); Assert.That(changes[0].User, Is.EqualTo("User")); Assert.That(changes[0].VersionDateTime, Is.EqualTo(created)); Assert.That(changes[0].Changes, Is.Empty); Assert.That(changes[0].Display, Is.EqualTo("User created record")); }
public void SingleRecordWithCreateHistory() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); record.AddColumn("CreatedDateTime", typeof(DateTime)); record.AddColumn("CreatedBy", typeof(string)); record.SetValue("CreatedBy", "Admin"); DateTime created = DateTime.Today.AddHours(1); record.SetValue("CreatedDateTime", Iso8601DateTimeConverter.ConvertFromLocalDateTime(created)); AmplaRecordHistory <ProductionModel> amplaRecordHistory = new AmplaRecordHistory <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = amplaRecordHistory.Reconstruct(); Assert.That(changes, Is.Not.Empty); Assert.That(changes.Count, Is.EqualTo(1)); Assert.That(changes[0].Operation, Is.EqualTo("Create Record")); Assert.That(changes[0].User, Is.EqualTo("Admin")); Assert.That(changes[0].VersionDateTime, Is.EqualTo(created)); Assert.That(changes[0].Changes, Is.Empty); }
private AmplaRecord FindAmplaRecord(GetDataResponse response, IModelProperties <TModel> iModelProperties, IAmplaViewProperties <TModel> amplaViewProperties, out TModel model) { List <AmplaRecord> records = new List <AmplaRecord>(); model = null; IAmplaBinding amplaBinding = new AmplaGetDataRecordBinding <TModel>(response, records, modelProperties, amplaViewProperties); if (amplaBinding.Validate() && amplaBinding.Bind()) { List <TModel> models = new List <TModel>(); IAmplaBinding modelBinding = new AmplaGetDataBinding <TModel>(response, models, iModelProperties); if (modelBinding.Validate() && modelBinding.Bind()) { model = models.Count > 0 ? models[0] : null; } return(records.Count > 0 ? records[0] : null); } return(null); }
protected override void OnFixtureSetUp() { base.OnFixtureSetUp(); modelProperties = new ModelProperties <ProductionModel>(); amplaViewProperties = new AmplaViewProperties <ProductionModel>(modelProperties); }
public AmplaRecordHistory(AmplaRecord amplaRecord, AmplaAuditRecord auditRecord, IAmplaViewProperties <TModel> viewProperties) { this.amplaRecord = amplaRecord; this.auditRecord = auditRecord; this.viewProperties = viewProperties; }