コード例 #1
0
        private static SurveyCollectorData FindCollectorData(SurveyMaint graph, SurveyCollector collector, int?pageNbr)
        {
            SurveyCollectorData collData = PXSelect <SurveyCollectorData,
                                                     Where <SurveyCollectorData.token, Equal <Required <SurveyCollectorData.token> >,
                                                            And <SurveyCollectorData.pageNbr, Equal <Required <SurveyCollectorData.pageNbr> > > > > .Select(graph, collector.Token, pageNbr);

            return(collData);
        }
コード例 #2
0
        private static void SaveSurveySubmission(string token, string payload, Uri uri, IDictionary <string, object> props, int?pageNbr)
        {
            var graph = PXGraph.CreateInstance <SurveyMaint>();

            var(survey, _, answerCollector, userCollector) = GetSurveyAndUser(graph, token);
            if (survey.Status == SurveyStatus.Preparing && answerCollector.IsTest != true)
            {
                throw new Exception($"The survey is not opened yet, come back later.");
            }
            if (survey.Status == SurveyStatus.Closed && answerCollector.IsTest != true)
            {
                throw new Exception($"The survey is closed, you cannot answer anymore.");
            }
            if (survey.AllowAnonymous != true && answerCollector.Anonymous == true && answerCollector == userCollector)
            {
                throw new Exception($"The survey does not allow anonymous answers");
            }
            if (answerCollector.Status == CollectorStatus.Processed)
            {
                throw new Exception($"Your answers were processed, you cannot change them anymore");
            }
            var data = FindCollectorData(graph, answerCollector, pageNbr);

            if (data == null)
            {
                data = new SurveyCollectorData {
                    Token       = token,
                    Uri         = uri.ToString(),
                    Payload     = payload,
                    SurveyID    = survey?.SurveyID,
                    CollectorID = answerCollector.CollectorID,
                    PageNbr     = pageNbr
                };
                data = graph.CollectorDataRecords.Insert(data);
            }
            else
            {
                data.Payload = payload;
                data.Status  = CollectorDataStatus.Updated;
                data         = graph.CollectorDataRecords.Update(data);
            }
            if (answerCollector.Status == CollectorStatus.Deleted)
            {
                answerCollector.Status = CollectorStatus.New;
            }
            if (answerCollector.Status == CollectorStatus.New || answerCollector.Status == CollectorStatus.Sent)
            {
                answerCollector.Status = CollectorStatus.Partially;
            }
            var lastPageNbr = graph.GetLastQuestionPageNumber(survey);

            if (answerCollector.Status == CollectorStatus.Partially && pageNbr >= lastPageNbr)
            {
                answerCollector.Status = CollectorStatus.Completed;
            }
            graph.Collectors.Update(answerCollector);
            if (userCollector.CollectorID != answerCollector.CollectorID)
            {
                userCollector.Status = answerCollector.Status;
                graph.Collectors.Update(userCollector);
            }
            if (survey.Status == SurveyStatus.Started)
            {
                survey.Status = SurveyStatus.InProgress;
                graph.Survey.Update(survey);
            }
            graph.Actions.PressSave();
        }