AssignmentStore.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Comal.Classes;
  5. using InABox.Core;
  6. namespace Comal.Stores
  7. {
  8. internal class AssignmentStore : BaseStore<Assignment>
  9. {
  10. private void CheckActivityForms(Assignment assignment)
  11. {
  12. if (!assignment.ActivityLink.HasOriginalValue(x => x.ID))
  13. {
  14. return;
  15. }
  16. List<AssignmentForm> assignmentForms;
  17. if(assignment.ID != Guid.Empty)
  18. {
  19. assignmentForms = Provider.Query(
  20. new Filter<AssignmentForm>(x => x.Parent.ID).IsEqualTo(assignment.ID),
  21. new Columns<AssignmentForm>(x => x.ID, x => x.FormData)
  22. ).Rows.Select(x => x.ToObject<AssignmentForm>()).ToList();
  23. }
  24. else
  25. {
  26. assignmentForms = new();
  27. }
  28. var toDelete = assignmentForms.Where(x => string.IsNullOrWhiteSpace(x.FormData));
  29. Provider.Delete(toDelete, UserID);
  30. var activityForms = Provider.Query(
  31. new Filter<ActivityForm>(x => x.Activity.ID).IsEqualTo(assignment.ActivityLink.ID)
  32. .And(x => x.Form.AppliesTo).IsEqualTo(nameof(Assignment)));
  33. var newForms = new List<AssignmentForm>();
  34. foreach (var row in activityForms.Rows)
  35. {
  36. var formID = row.Get<ActivityForm, Guid>(x => x.Form.ID);
  37. if (!(assignmentForms.Any(x => x.Form.ID == formID) && !toDelete.Any(x => x.Form.ID == formID)))
  38. {
  39. var assignmentForm = new AssignmentForm();
  40. assignmentForm.Form.ID = formID;
  41. assignmentForm.Parent.ID = assignment.ID;
  42. newForms.Add(assignmentForm);
  43. }
  44. }
  45. Provider.Save(newForms);
  46. }
  47. protected override void AfterSave(Assignment entity)
  48. {
  49. base.AfterSave(entity);
  50. CheckActivityForms(entity);
  51. }
  52. }
  53. }