AssignmentStore.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. protected override void BeforeDelete(Assignment entity)
  53. {
  54. base.BeforeDelete(entity);
  55. if (entity.TimeSheetLink.ID != null)
  56. {
  57. var ts = FindSubStore<TimeSheet>().Load(new Filter<TimeSheet>(x => x.ID).IsEqualTo(entity.TimeSheetLink.ID)).FirstOrDefault();
  58. if (ts != null)
  59. FindSubStore<TimeSheet>().Delete(ts, "Cascaded Delete from Assignment");
  60. }
  61. }
  62. }
  63. }