using System; using System.Collections.Generic; using System.Linq; using Comal.Classes; using InABox.Core; namespace Comal.Stores { internal class AssignmentStore : BaseStore { private void CheckActivityForms(Assignment assignment) { if (!assignment.ActivityLink.HasOriginalValue(x => x.ID)) { return; } List assignmentForms; if(assignment.ID != Guid.Empty) { assignmentForms = Provider.Query( new Filter(x => x.Parent.ID).IsEqualTo(assignment.ID), new Columns(x => x.ID, x => x.FormData) ).Rows.Select(x => x.ToObject()).ToList(); } else { assignmentForms = new(); } var toDelete = assignmentForms.Where(x => string.IsNullOrWhiteSpace(x.FormData)); Provider.Delete(toDelete, UserID); var activityForms = Provider.Query( new Filter(x => x.Activity.ID).IsEqualTo(assignment.ActivityLink.ID) .And(x => x.Form.AppliesTo).IsEqualTo(nameof(Assignment))); var newForms = new List(); foreach (var row in activityForms.Rows) { var formID = row.Get(x => x.Form.ID); if (!(assignmentForms.Any(x => x.Form.ID == formID) && !toDelete.Any(x => x.Form.ID == formID))) { var assignmentForm = new AssignmentForm(); assignmentForm.Form.ID = formID; assignmentForm.Parent.ID = assignment.ID; newForms.Add(assignmentForm); } } Provider.Save(newForms); } protected override void AfterSave(Assignment entity) { base.AfterSave(entity); CheckActivityForms(entity); } } }