public void LogicalCascadeDeleteChildren(FormResponseProperties formResponseProperties)
 {
     if (formResponseProperties.RecStatus != RecordStatus.Deleted)
     {
         formResponseProperties.RecStatus = RecordStatus.Deleted;
         CascadeThroughChildren(formResponseProperties, frp => frp.RecStatus = RecordStatus.Deleted);
     }
 }
示例#2
0
 public ChildResponseContext(FormResponseProperties formResponseProperties)
 {
     FormId           = formResponseProperties.FormId;
     FormName         = formResponseProperties.FormName;
     ParentFormId     = formResponseProperties.ParentFormId;
     ParentFormName   = formResponseProperties.ParentFormName;
     ParentResponseId = formResponseProperties.ParentResponseId;
     RecStatus        = formResponseProperties.RecStatus;
 }
        public void CascadeThroughChildren(FormResponseProperties formResponseProperties, Action <FormResponseProperties> action)
        {
            Dictionary <string /*ChildFormName*/, List <FormResponseProperties> > childFormResponses = null;

            if (ChildResponses.TryGetValue(formResponseProperties.ResponseId, out childFormResponses))
            {
                // interate over list child forms
                foreach (var childFormResponseList in childFormResponses.Values.ToArray())
                {
                    // iterate over list of child responses
                    foreach (var childFormResponseProperties in childFormResponseList.ToArray())
                    {
                        action(childFormResponseProperties);
                        AddOrReplaceChildResponse(childFormResponseProperties);
                        CascadeThroughChildren(childFormResponseProperties, action);
                    }
                }
            }
        }
        public FormResponseProperties AddOrReplaceChildResponse(FormResponseProperties childResponse)
        {
            var parentResponseId = childResponse.ParentResponseId;
            var childFormName    = childResponse.FormName;
            var childResponseId  = childResponse.ResponseId;

            var childResponseList = GetChildResponseList(parentResponseId, childFormName, /*addIfNoList=*/ true);
            var existingResponse  = childResponseList.SingleOrDefault(r => r.ResponseId == childResponseId);

            if (existingResponse != null)
            {
                childResponse.CopyTo(existingResponse);
            }
            else
            {
                childResponseList.Add(childResponse);
            }

            // Add the response to the response index if it doesn't alread exist.
            ChildResponseContext existingChildResponseContext = null;

            if (!ChildResponseContexts.TryGetValue(childResponse.ResponseId, out existingChildResponseContext))
            {
                ChildResponseContexts.Add(childResponse.ResponseId, new ChildResponseContext(childResponse));
            }
            else
            {
                existingChildResponseContext.RecStatus = childResponse.RecStatus;
            }

            var childResponsesByChildFormId = ChildResponses[parentResponseId];

            childResponsesByChildFormId[childFormName] = childResponseList;

            return(childResponse);
        }