private byte[] BuildComposerRequest(IDnsRequestContext request, ConditionsModel m)
        {
            request_builder requestBuilder = LoadReportHeader(request);

            requestBuilder.request.criteria = new criteria();

            IList <variablesType> IncludeList = new List <variablesType>();
            IList <variablesType> ExcludeList = new List <variablesType>();

            foreach (var criteriaGroup in m.CriteriaGroups)
            {
                if (criteriaGroup.ExcludeCriteriaGroup == true)
                {
                    ExcludeList.Add(BuildTerms(criteriaGroup));
                }
                else
                {
                    IncludeList.Add(BuildTerms(criteriaGroup));
                }
            }

            if (IncludeList.Count > 0)
            {
                requestBuilder.request.criteria.inclusion_criteria = IncludeList.ToArray();
            }

            if (ExcludeList.Count > 0)
            {
                requestBuilder.request.criteria.exclusion_criteria = ExcludeList.ToArray();
            }

            LoadReportSelector(m, requestBuilder);

            return(SerializeRequest(requestBuilder));
        }
        /// <summary>
        /// Helper function to serialize the request builder into a byte array
        /// </summary>
        /// <param name="requestBuilder"></param>
        /// <returns></returns>
        private byte[] SerializeRequest(request_builder requestBuilder)
        {
            byte[]        requestBuilderBytes;
            XmlSerializer serializer = new XmlSerializer(typeof(request_builder));

            using (StringWriter sw = new StringWriter())
            {
                using (XmlWriter xw = XmlWriter.Create(sw, new XmlWriterSettings {
                    OmitXmlDeclaration = true
                }))
                {
                    serializer.Serialize(xw, requestBuilder, null);
                    requestBuilderBytes = Encoding.UTF8.GetBytes(sw.ToString());
                }
            }

            return(requestBuilderBytes);
        }
        private byte[] BuildRequest(IDnsRequestContext request, ModularProgramModel m)
        {
            request_builder requestBuilder = new request_builder();

            requestBuilder.header = new header();
            requestBuilder.header.request_type        = request.RequestType.Name;
            requestBuilder.header.request_name        = request.Header.Name;
            requestBuilder.header.request_description = request.Header.Description;
            if (request.Header.DueDate != null)
            {
                requestBuilder.header.due_date = (DateTime)request.Header.DueDate;
            }
            requestBuilder.header.activity             = request.Header.Activity != null ? request.Header.Activity.Name : null;
            requestBuilder.header.activity_description = request.Header.ActivityDescription;
            requestBuilder.header.submitter_email      = request.Header.AuthorEmail;

            requestBuilder.request = new request();
            // Build package manifest
            IList <Lpp.Dns.HealthCare.ModularProgram.Data.Serializer.ModularProgramItem> list = new List <Lpp.Dns.HealthCare.ModularProgram.Data.Serializer.ModularProgramItem>();

            m.PackageManifest.ForEach(s => list.Add(new Data.Serializer.ModularProgramItem()
            {
                ProgramName = s.ProgramName, Description = s.Description, TypeCode = s.TypeCode, Scenarios = s.Scenarios
            }));
            requestBuilder.request.PackageManifest = list.ToArray();
            requestBuilder.request.Files           = m.Files.ToArray();

            byte[]        requestBuilderBytes;
            XmlSerializer serializer = new XmlSerializer(typeof(request_builder));

            using (StringWriter sw = new StringWriter())
            {
                using (XmlWriter xw = XmlWriter.Create(sw, new XmlWriterSettings {
                    OmitXmlDeclaration = true
                }))
                {
                    serializer.Serialize(xw, requestBuilder, null);
                    requestBuilderBytes = Encoding.UTF8.GetBytes(sw.ToString());
                }
            }

            return(requestBuilderBytes);
        }
        /// <summary>
        /// Helper function to load up the report header from the request
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private request_builder LoadReportHeader(IDnsRequestContext request)
        {
            request_builder requestBuilder = new request_builder();

            requestBuilder.header = new header();
            requestBuilder.header.request_type        = request.RequestType.Name;
            requestBuilder.header.request_name        = request.Header.Name;
            requestBuilder.header.request_description = request.Header.Description;
            if (request.Header.DueDate != null)
            {
                requestBuilder.header.due_date = (DateTime)request.Header.DueDate;
            }
            requestBuilder.header.activity             = request.Header.Activity != null ? request.Header.Activity.Name : null;
            requestBuilder.header.activity_description = request.Header.ActivityDescription;

            requestBuilder.request = new request();

            return(requestBuilder);
        }
        /// <summary>
        /// Helper function to load up the report selector
        /// </summary>
        /// <param name="m"></param>
        /// <param name="requestBuilder"></param>
        private void LoadReportSelector(ConditionsModel m, request_builder requestBuilder)
        {
            string[] reportSelections = m.Report.Split(',');

            if (reportSelections.Length > 0 && !string.IsNullOrEmpty(reportSelections[0]))
            {
                requestBuilder.response                = new response();
                requestBuilder.response.report         = new report();
                requestBuilder.response.report.name    = "Default";
                requestBuilder.response.report.options = new option[reportSelections.Length];
                int i = 0;
                ReportSelectionCode repSel;

                foreach (string reportSelection in reportSelections)
                {
                    requestBuilder.response.report.options[i] = new option();

                    if (Enum.TryParse <ReportSelectionCode>(reportSelection, out repSel))
                    {
                        switch (repSel)
                        {
                        case ReportSelectionCode.Age:
                            requestBuilder.response.report.options[i].name  = "Age";
                            requestBuilder.response.report.options[i].value = m.AgeStratification.ToString();
                            break;

                        case ReportSelectionCode.Sex:
                            requestBuilder.response.report.options[i].name = "Sex";
                            break;

                        case ReportSelectionCode.Period:
                            requestBuilder.response.report.options[i].name  = "Observation_Period";
                            requestBuilder.response.report.options[i].value = m.PeriodStratification.ToString();
                            break;

                        case ReportSelectionCode.Race:
                            requestBuilder.response.report.options[i].name = "Race";
                            break;

                        case ReportSelectionCode.Ethnicity:
                            requestBuilder.response.report.options[i].name = "Ethnicity";
                            break;

                        case ReportSelectionCode.Center:
                            requestBuilder.response.report.options[i].name = "CenterId";
                            break;

                        case ReportSelectionCode.ICD9:
                            requestBuilder.response.report.options[i].name  = "ICD9";
                            requestBuilder.response.report.options[i].value = m.ICD9Stratification.ToString();
                            break;

                        case ReportSelectionCode.Disease:
                            requestBuilder.response.report.options[i].name = "Disease";
                            break;

                        case ReportSelectionCode.Zip:
                            requestBuilder.response.report.options[i].name = "Zip";
                            break;

                        case ReportSelectionCode.TobaccoUse:
                            requestBuilder.response.report.options[i].name = "TobaccoUse";
                            break;
                        }
                    }

                    i++;
                }
            }
        }
        private byte[] BuildRequest(IDnsRequestContext request, ConditionsModel m)
        {
            request_builder requestBuilder = LoadReportHeader(request);

            requestBuilder.request.variables                     = new variablesType();
            requestBuilder.request.variables.operation           = new operation();
            requestBuilder.request.variables.operation.@operator = "And";

            IList <variable> variables = new List <variable>();

            // Observation Period Range
            DateTime sasZeroDate    = DateTime.Parse("1960-01-01");
            var      sasStartPeriod = m.StartPeriodDate == null ? 0 : (m.StartPeriodDate.Value.Subtract(sasZeroDate)).Days;
            var      sasEndPeriod   = m.EndPeriodDate == null ? 0 : (m.EndPeriodDate.Value.Subtract(sasZeroDate)).Days;

            variables.Add(new variable {
                name = "Observation_Period", value = sasStartPeriod.ToString(), @operator = ">="
            });
            variables.Add(new variable {
                name = "Observation_Period", value = sasEndPeriod.ToString(), @operator = "<="
            });

            IList <operation> operations = new List <operation>();

            variables.Add(new variable {
                name = "Disease", value = m.Disease.ToString()
            });

            // Age Range
            variables.Add(new variable {
                name = "Age", value = m.MaxAge.ToString(), @operator = "<="
            });
            variables.Add(new variable {
                name = "Age", value = m.MinAge.ToString(), @operator = ">="
            });

            // Sex Selector
            if (m.Sex == SexSelectionList.Male.Code || m.Sex == SexSelectionList.Female.Code)
            {
                variables.Add(new variable {
                    name = "Sex", value = SexSelectionList.GetName(m.Sex).Substring(0, 1)
                });
            }
            else
            {
                operation sexOperation = new operation();
                operations.Add(sexOperation);
                sexOperation.@operator = "Or";
                IList <variable> sexVariables = new List <variable>();
                sexVariables.Add(new variable {
                    name = "Sex", value = SexSelectionList.Male.Name.Substring(0, 1)
                });
                sexVariables.Add(new variable {
                    name = "Sex", value = SexSelectionList.Female.Name.Substring(0, 1)
                });
                sexOperation.variable = sexVariables.ToArray <variable>();
            }

            // Race Selector
            string[] races = m.Race.Split(',');
            if (races.Length > 0 && !string.IsNullOrEmpty(races[0]))
            {
                operation raceOperation = new operation();
                operations.Add(raceOperation);
                raceOperation.@operator = "Or";
                IList <variable> raceVariables = new List <variable>();
                foreach (string race in races)
                {
                    if (race.NullOrEmpty())
                    {
                        continue;
                    }
                    raceVariables.Add(new variable {
                        name = "Race", value = RaceConvert(race)
                    });
                }
                raceOperation.variable = raceVariables.ToArray <variable>();
            }

            if (variables.Count > 0)
            {
                requestBuilder.request.variables.operation.variable = variables.ToArray <variable>();
            }

            if (operations.Count > 0)
            {
                requestBuilder.request.variables.operation.operation1 = operations.ToArray <operation>();
            }

            LoadReportSelector(m, requestBuilder);

            return(SerializeRequest(requestBuilder));
        }