private int CreateOrUpdateFormResponse(MpFormResponse formResponse, string token)
        {
            var record = new Dictionary <string, object>
            {
                { "Form_ID", formResponse.FormId },
                { "Response_Date", DateTime.Today },
                { "Contact_ID", formResponse.ContactId },
                { "Opportunity_ID", formResponse.OpportunityId },
                { "Opportunity_Response", formResponse.OpportunityResponseId },
                { "Pledge_Campaign_ID", formResponse.PledgeCampaignId }
            };

            // This code is shared by Trips, Camps, and Volunteer Application.  For trips,
            // we want to maintain separate form responses per trip.  We can distinguish
            // trips from other callers because PledgeCampaignId is required for trips.
            //
            // TODO: Currently, Camps is sharing form responses if the contact has
            // registered for multiple camps; this will likely need to change in the
            // future.
            int responseId = (formResponse.PledgeCampaignId != null)
                ? responseId = GetFormResponseIdForFormContactAndPledgeCampaign(formResponse.FormId, formResponse.ContactId, formResponse.PledgeCampaignId.Value)
                : responseId = GetFormResponseIdForFormContact(formResponse.FormId, formResponse.ContactId);

            if (responseId == 0)
            {
                responseId = _ministryPlatformService.CreateRecord(_formResponsePageId, record, token, true);
            }
            else
            {
                record.Add("Form_Response_ID", responseId);
                _ministryPlatformService.UpdateRecord(_formResponsePageId, record, token);
            }

            return(responseId);
        }
예제 #2
0
        public void SetUp()
        {
            _ministryPlatformService = new Mock <IMinistryPlatformService>();
            _authService             = new Mock <IAuthenticationRepository>();
            _configWrapper           = new Mock <IConfigurationWrapper>();
            _dbConnection            = new Mock <IDbConnection>();
            _ministryPlatformRest    = new Mock <IMinistryPlatformRestRepository>();

            _configWrapper.Setup(m => m.GetEnvironmentVarAsString("API_USER")).Returns("uid");
            _configWrapper.Setup(m => m.GetEnvironmentVarAsString("API_PASSWORD")).Returns("pwd");
            _authService.Setup(m => m.Authenticate(It.IsAny <string>(), It.IsAny <string>())).Returns(new AuthToken
            {
                AccessToken = "ABC",
                ExpiresIn   = 123
            });

            _fixture = new FormSubmissionRepository(_ministryPlatformService.Object, _dbConnection.Object, _authService.Object, _configWrapper.Object, _ministryPlatformRest.Object);

            _mockAnswer1 = new MpFormAnswer
            {
                FieldId               = 375,
                FormResponseId        = responseId,
                OpportunityResponseId = 7329,
                Response              = "Test Last Name",
                EventParticipantId    = null
            };

            _mockAnswer2 = new MpFormAnswer
            {
                FieldId               = 376,
                FormResponseId        = responseId,
                OpportunityResponseId = 7329,
                Response              = "Test First Name",
                EventParticipantId    = null
            };

            _mockAnswer3 = new MpFormAnswer
            {
                FieldId               = 377,
                FormResponseId        = responseId,
                OpportunityResponseId = 7329,
                Response              = "Test Middle Initial",
                EventParticipantId    = null
            };

            _mockForm = new MpFormResponse
            {
                FormId                = 17,
                ContactId             = 2389887,
                OpportunityId         = 313,
                OpportunityResponseId = 7329,
                FormAnswers           = new List <MpFormAnswer>
                {
                    _mockAnswer1,
                    _mockAnswer2,
                    _mockAnswer3
                }
            };
        }
예제 #3
0
        public void SaveInvoice(CampProductDTO campProductDto, string token)
        {
            var loggedInContact = _contactRepository.GetMyProfile(token);
            var family          = _contactRepository.GetHouseholdFamilyMembers(loggedInContact.Household_ID);

            family.AddRange(_contactRepository.GetOtherHouseholdMembers(loggedInContact.Household_ID));

            if (family.Where(f => f.ContactId == campProductDto.ContactId).ToList().Count <= 0)
            {
                throw new ContactNotFoundException(campProductDto.ContactId);
            }

            // set finainacial assistance flag in form response
            var participant        = _participantRepository.GetParticipant(campProductDto.ContactId);
            var eventParticipantId = _eventRepository.GetEventParticipantRecordId(campProductDto.EventId, participant.ParticipantId);

            var answers = new List <MpFormAnswer>
            {
                new MpFormAnswer
                {
                    Response           = campProductDto.FinancialAssistance.ToString(),
                    FieldId            = _configurationWrapper.GetConfigIntValue("SummerCampForm.FinancialAssistance"),
                    EventParticipantId = eventParticipantId
                }
            };

            var formId       = _configurationWrapper.GetConfigIntValue("SummerCampFormID");
            var formResponse = new MpFormResponse
            {
                ContactId   = campProductDto.ContactId,
                FormId      = formId,
                FormAnswers = answers,
                EventId     = campProductDto.EventId
            };

            _formSubmissionRepository.SubmitFormResponse(formResponse);

            // if an invoice exists for this eventparticipant then don't create a new one
            if (_invoiceRepository.InvoiceExistsForEventParticipant(eventParticipantId))
            {
                return;
            }

            // create the invoice with product from event and best pricing for the current date
            //get the product id for this event
            var campEvent            = _eventRepository.GetEvent(campProductDto.EventId);
            var product              = _productRepository.GetProductForEvent(campProductDto.EventId);
            var optionPrices         = _productRepository.GetProductOptionPricesForProduct(product.ProductId);
            var productOptionPriceId = optionPrices.Count > 0 ?
                                       ConvertProductOptionPricetoDto(optionPrices, product.BasePrice, campEvent.EventStartDate)
                                       .Where(i => i.EndDate > DateTime.Now)
                                       .OrderBy(i => i.EndDate).FirstOrDefault()?
                                       .ProductOptionPriceId
                : (int?)null;

            _invoiceRepository.CreateInvoiceAndDetail(product.ProductId, productOptionPriceId, loggedInContact.Contact_ID, campProductDto.ContactId, eventParticipantId);
        }
예제 #4
0
        public int SaveApplication(TripApplicationDto dto)
        {
            try
            {
                UpdateChildSponsorship(dto);
                var formResponse = new MpFormResponse
                {
                    ContactId        = dto.ContactId, //contact id of the person the application is for
                    FormId           = _configurationWrapper.GetConfigIntValue("TripApplicationFormId"),
                    PledgeCampaignId = dto.PledgeCampaignId,
                    FormAnswers      = new List <MpFormAnswer>(FormatFormAnswers(dto))
                };

                var formResponseId = _formSubmissionService.SubmitFormResponse(formResponse);

                if (dto.InviteGUID != null)
                {
                    _privateInviteService.MarkAsUsed(dto.PledgeCampaignId, dto.InviteGUID);
                }

                if (HasScholarship(dto.ContactId, dto.PledgeCampaignId))
                {
                    SendTripApplicantSuccessMessage(dto.ContactId);
                }
                else
                {
                    SendTripApplicantDonationComboMessage(dto);
                }

                _logger.Info($"SaveApplication success: ContactId = {dto.ContactId}, PledgeCampaignId = {dto.PledgeCampaignId}");

                return(formResponseId);
            }
            catch (Exception ex)
            {
                // add exception to error log
                _logger.Error($"SaveApplication exception: ContactId = {dto.ContactId}, PledgeCampaignId = {dto.PledgeCampaignId}", ex);

                // include form data in error log (serialized json); ignore exceptions during serialization
                JsonSerializerSettings settings = new JsonSerializerSettings();
                settings.Error = (serializer, err) => err.ErrorContext.Handled = true;
                string json = JsonConvert.SerializeObject(dto, settings);
                _logger.Error($"SaveApplication data {json}");

                // send applicant message
                SendApplicantErrorMessage(dto.ContactId);

                // send trip admin message
                SendTripAdminErrorMessage(dto.PledgeCampaignId);

                //then re-throw or eat it?
                return(0);
            }
        }
예제 #5
0
        private int CreateOrUpdateFormResponse(MpFormResponse formResponse, string token)
        {
            var record = new Dictionary <string, object>
            {
                { "Form_ID", formResponse.FormId },
                { "Response_Date", DateTime.Now },
                { "Contact_ID", formResponse.ContactId },
                { "Opportunity_ID", formResponse.OpportunityId },
                { "Opportunity_Response", formResponse.OpportunityResponseId },
                { "Pledge_Campaign_ID", formResponse.PledgeCampaignId },
                { "Event_ID", formResponse.EventId }
            };

            var formResponseId = _configurationWrapper.GetConfigIntValue("FormResponsePageId");

            // This code is shared by Trips, Camps, and Volunteer Application.
            //
            // For trips:
            // we want to maintain separate form responses per trip.  We can distinguish
            // trips from other callers because PledgeCampaignId is required for trips.
            //
            // TODO: Currently, Camps is sharing form responses if the contact has
            // registered for multiple camps; this will likely need to change in the
            // future.
            var sb = new StringBuilder($"Contact_ID={formResponse.ContactId} AND Form_ID={formResponse.FormId}");

            if (formResponse.EventId != null)
            {
                sb.Append($" AND Event_ID={formResponse.EventId}");
            }
            if (formResponse.PledgeCampaignId != null)
            {
                sb.Append($" AND Pledge_Campaign_ID={formResponse.PledgeCampaignId}");
            }
            var          filter        = sb.ToString();
            const string selectColumns = "Form_Response_ID";
            var          response      = _ministryPlatformRestRepository.UsingAuthenticationToken(token).Search <MpFormResponse>(filter, selectColumns, null, true);
            var          responseId    = response?.FirstOrDefault()?.FormResponseId ?? 0;

            if (responseId == 0)
            {
                responseId = _ministryPlatformService.CreateRecord(formResponseId, record, token, true);
            }
            else
            {
                record.Add("Form_Response_ID", responseId);
                _ministryPlatformService.UpdateRecord(formResponseId, record, token);
            }

            return(responseId);
        }
예제 #6
0
        public void ShouldCreateAFormResponseWithAnEventId()
        {
            const int recordId     = 43;
            var       formResponse = new MpFormResponse
            {
                ContactId   = 123456,
                EventId     = 8976,
                FormAnswers = new List <MpFormAnswer>(),
                FormId      = 3333
            };

            var record = new Dictionary <string, object>
            {
                { "Form_ID", formResponse.FormId },
                { "Response_Date", DateTime.Now },
                { "Contact_ID", formResponse.ContactId },
                { "Opportunity_ID", formResponse.OpportunityId },
                { "Opportunity_Response", formResponse.OpportunityResponseId },
                { "Pledge_Campaign_ID", formResponse.PledgeCampaignId },
                { "Event_ID", formResponse.EventId }
            };

            var          searchString  = $"Contact_ID={formResponse.ContactId} AND Form_ID={formResponse.FormId} AND Event_ID={formResponse.EventId}";
            const string selectColumns = "Form_Response_ID";

            _ministryPlatformRestRepository.Setup(m => m.UsingAuthenticationToken(apiToken)).Returns(_ministryPlatformRestRepository.Object);
            _ministryPlatformRestRepository.Setup(m => m.Search <MpFormResponse>(It.IsAny <string>(), It.IsAny <string>(), null, true)).Returns((string filter, string column, string orderby, bool distinct) =>
            {
                Assert.AreEqual(searchString, filter);
                Assert.AreEqual(selectColumns, column);
                return(new List <MpFormResponse>());
            });
            _ministryPlatformService.Setup(m => m.CreateRecord(It.IsAny <int>(), It.IsAny <Dictionary <string, object> >(), apiToken, true))
            .Returns((int formRId, Dictionary <string, object> data, string token, bool quickAdd) =>
            {
                Assert.AreEqual(record["Event_ID"], data["Event_ID"]);
                return(recordId);
            });

            var result = _fixture.SubmitFormResponse(formResponse);

            _ministryPlatformService.VerifyAll();

            _authenticationRepository.VerifyAll();
            _ministryPlatformRestRepository.VerifyAll();

            Assert.AreEqual(recordId, result);
        }
        public int SubmitFormResponse(MpFormResponse form)
        {
            var token      = ApiLogin();
            var responseId = CreateOrUpdateFormResponse(form, token);

            foreach (var answer in form.FormAnswers)
            {
                if (answer.Response == null)
                {
                    continue;
                }
                answer.FormResponseId = responseId;
                CreateOrUpdateFormAnswer(answer, token);
            }
            return(responseId);
        }
예제 #8
0
        public IObservable <int> SaveReferences(GroupLeaderProfileDTO leader)
        {
            var form = new MpFormResponse
            {
                ContactId   = leader.ContactId,
                FormId      = _configWrapper.GetConfigIntValue("GroupLeaderFormId"),
                FormAnswers = new List <MpFormAnswer>
                {
                    new MpFormAnswer
                    {
                        FieldId  = _configWrapper.GetConfigIntValue("GroupLeaderReferenceFieldId"),
                        Response = leader.ReferenceContactId
                    },
                    new MpFormAnswer
                    {
                        FieldId  = _configWrapper.GetConfigIntValue("GroupLeaderReferenceNameFieldId"),
                        Response = leader.ReferenceDisplayName ?? ""
                    },
                    new MpFormAnswer
                    {
                        FieldId  = _configWrapper.GetConfigIntValue("GroupLeaderHuddleFieldId"),
                        Response = leader.HuddleResponse
                    },
                    new MpFormAnswer
                    {
                        FieldId  = _configWrapper.GetConfigIntValue("GroupLeaderStudentFieldId"),
                        Response = leader.LeadStudents
                    }
                }
            };

            return(Observable.Create <int>(observer =>
            {
                var responseId = _formSubmissionRepository.SubmitFormResponse(form);
                if (responseId == 0)
                {
                    observer.OnError(new ApplicationException("Unable to submit form response for Group Leader"));
                }
                observer.OnNext(responseId);
                observer.OnCompleted();
                return Disposable.Create(() => Console.WriteLine("Observable destroyed"));
            }));
        }
예제 #9
0
        public IObservable <int> SaveSpiritualGrowth(SpiritualGrowthDTO spiritualGrowth)
        {
            var form = new MpFormResponse()
            {
                ContactId   = spiritualGrowth.ContactId,
                FormId      = _configWrapper.GetConfigIntValue("GroupLeaderFormId"),
                FormAnswers = new List <MpFormAnswer>
                {
                    new MpFormAnswer
                    {
                        FieldId  = _configWrapper.GetConfigIntValue("GroupLeaderFormStoryFieldId"),
                        Response = spiritualGrowth.Story
                    },
                    new MpFormAnswer
                    {
                        FieldId  = _configWrapper.GetConfigIntValue("GroupLeaderFormTaughtFieldId"),
                        Response = spiritualGrowth.Taught
                    }
                }
            };

            return(Observable.Create <int>(observer =>
            {
                var responseId = _formSubmissionRepository.SubmitFormResponse(form);
                if (responseId == 0)
                {
                    observer.OnError(new ApplicationException("Unable to submit Spiritual Growth form for Group Leader"));
                }

                SendConfirmationEmail(spiritualGrowth.ContactId, spiritualGrowth.EmailAddress);

                observer.OnNext(responseId);
                observer.OnCompleted();
                return Disposable.Create(() => Console.WriteLine("Observable Destroyed"));
            }));
        }
예제 #10
0
        public bool SaveAdult(AdultApplicationDto application)
        {
            var formId = _configurationWrapper.GetConfigIntValue("KidsClubAdultApplicant");
            var opportunityResponseId = application.ResponseOpportunityId;

            _formFields = _formSubmissionService.GetFieldsForForm(formId);

            var formResponse = new MpFormResponse();

            formResponse.ContactId             = application.ContactId;     //contact id of the person the application is for
            formResponse.FormId                = formId;
            formResponse.OpportunityId         = application.OpportunityId; // we know this from CMS
            formResponse.OpportunityResponseId = opportunityResponseId;

            formResponse.FormAnswers.Add(SetCustomField(application.FirstName, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.LastName, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.MiddleInitial, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Email, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.BirthDate, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.PreviousName, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.NameForNameTag, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(TranslateGender(application.Gender), opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(TranslateMaritalStatus(application.MaritalStatus),
                                                        opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.SpouseName, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.SpouseGender, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.HowLongAttending, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.WhatServiceDoYouAttend, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.StreetAddress, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.City, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.State, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Zip, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.MobilePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.HomePhone, opportunityResponseId));

            formResponse.FormAnswers.Add(SetCustomField(application.CompanyName, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Position, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.WorkPhone, opportunityResponseId));

            formResponse.FormAnswers.Add(SetCustomField(application.Child1Name, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Child1Birthdate, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Child2Name, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Child2Birthdate, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Child3Name, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Child3Birthdate, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Child4Name, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Child4Birthdate, opportunityResponseId));

            formResponse.FormAnswers.Add(SetCustomField(application.EverBeenArrest, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AddictionConcern, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.NeglectingChild, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.PsychiatricDisorder, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.SexuallyActiveOutsideMarriage, opportunityResponseId));

            formResponse.FormAnswers.Add(SetCustomField(application.ReligionSearchingForAnswers, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ReligionReceivedJesus, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ReligionFocusingOnObedience, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ReligionReplicating, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.SpiritualOrientationExplain, opportunityResponseId));

            formResponse.FormAnswers.Add(SetCustomField(application.WhatPromptedApplication, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.SpecialTalents, opportunityResponseId));


            formResponse.FormAnswers.Add(SetCustomField(application.AvailabilityWeek, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AvailabilityWeekend, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AvailabilityWeekendSite, opportunityResponseId));

            formResponse.FormAnswers.Add(SetCustomField(application.AreaOfInterestServingInClassroom,
                                                        opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AreaOfInterestWelcomingNewFamilies,
                                                        opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AreaOfInterestHelpSpecialNeeds,
                                                        opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AreaOfInterestTech, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AreaOfInterestRoomPrep, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AreaOfInterestAdminTasks, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AreaOfInterestShoppingForSupplies,
                                                        opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AreaOfInterestCreatingWeekendExperience,
                                                        opportunityResponseId));

            formResponse.FormAnswers.Add(SetCustomField(application.WhatAgeBirthToTwo, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.WhatAgeThreeToPreK, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.WhatAgeKToFifth, opportunityResponseId));

            formResponse.FormAnswers.Add(SetCustomField(application.Reference1Name, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1TimeKnown, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1HomePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1MobilePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1WorkPhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1Email, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1Association, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1Occupation, opportunityResponseId));

            formResponse.FormAnswers.Add(SetCustomField(application.Reference2Name, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2TimeKnown, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2HomePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2MobilePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2WorkPhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2Email, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2Association, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2Occupation, opportunityResponseId));

            formResponse.FormAnswers.Add(SetCustomField(application.Reference3Name, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference3TimeKnown, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference3HomePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference3MobilePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference3WorkPhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference3Email, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference3Association, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference3Occupation, opportunityResponseId));

            formResponse.FormAnswers.Add(SetCustomField(application.Agree, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AgreeDate, opportunityResponseId));

            var response = _formSubmissionService.SubmitFormResponse(formResponse);

            return(response != 0);
        }
예제 #11
0
        public bool SaveStudent(StudentApplicationDto application)
        {
            var formId = _configurationWrapper.GetConfigIntValue("KidsClubStudentApplicant");
            var opportunityResponseId = application.ResponseOpportunityId;

            _formFields = _formSubmissionService.GetFieldsForForm(formId);

            var formResponse = new MpFormResponse();

            formResponse.ContactId             = application.ContactId;     //contact id of the person the application is for
            formResponse.FormId                = formId;
            formResponse.OpportunityId         = application.OpportunityId; // we know this from CMS
            formResponse.OpportunityResponseId = opportunityResponseId;

            formResponse.FormAnswers.Add(SetCustomField(application.FirstName, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.LastName, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.MiddleInitial, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Email, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.BirthDate, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(TranslateGender(application.Gender), opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.NameForNameTag, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.School, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.HowLongAttending, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ServiceAttend, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.StreetAddress, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.City, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.State, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Zip, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.HomePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.MobilePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Grade, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ReligionSearchingForAnswers, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ReligionReceivedJesus, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ReligionFocusingOnObedience, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ReligionReplicating, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ExplainFaith, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.WhyServe, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.SpecialTalents, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AvailabilityDuringWeek, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AvailabilityDuringWeekend, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.AvailabilityWeekendSite, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ServeAgeKids1To2, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ServeAgeKids3ToPreK, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ServeAgeKidsKto5Grade, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1Name, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1TimeKnown, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1HomePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1MobilePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1WorkPhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1Email, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1Association, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference1Occupation, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2Name, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2TimeKnown, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2HomePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2MobilePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2WorkPhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2Email, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2Association, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.Reference2Occupation, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ParentLastName, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ParentFirstName, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ParentHomePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ParentMobilePhone, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ParentEmail, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ParentSignature, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.ParentSignatureDate, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.StudentSignature, opportunityResponseId));
            formResponse.FormAnswers.Add(SetCustomField(application.StudentSignatureDate, opportunityResponseId));

            var response = _formSubmissionService.SubmitFormResponse(formResponse);

            return(response != 0);
        }
예제 #12
0
        public CampReservationDTO SaveCampReservation(CampReservationDTO campReservation, int eventId, string token)
        {
            var nickName  = string.IsNullOrWhiteSpace(campReservation.PreferredName) ? campReservation.FirstName : campReservation.PreferredName;
            var contactId = Convert.ToInt32(campReservation.ContactId);

            var minorContact = new MpContact
            {
                FirstName           = campReservation.FirstName,
                LastName            = campReservation.LastName,
                PreferredName       = $"{campReservation.LastName}, {campReservation.FirstName}",
                MiddleName          = campReservation.MiddleName,
                MobilePhone         = campReservation.MobilePhone,
                BirthDate           = Convert.ToDateTime(campReservation.BirthDate),
                Gender              = campReservation.Gender,
                Nickname            = nickName,
                SchoolAttending     = campReservation.SchoolAttending,
                HouseholdId         = (_contactRepository.GetMyProfile(token)).Household_ID,
                HouseholdPositionId = 2
            };

            MpParticipant participant;

            if (campReservation.ContactId == null || campReservation.ContactId == 0)
            {
                var newMinorContact = _contactRepository.CreateContact(minorContact);
                contactId   = newMinorContact[0].RecordId;
                participant = _participantRepository.GetParticipant(contactId);
                campReservation.ContactId = contactId;
            }
            else
            {
                var updateToDictionary = new Dictionary <String, Object>
                {
                    { "Contact_ID", Convert.ToInt32(campReservation.ContactId) },
                    { "First_Name", minorContact.FirstName },
                    { "Last_Name", minorContact.LastName },
                    { "Middle_Name", minorContact.MiddleName },
                    { "Nickname", nickName },
                    { "Mobile_Phone", minorContact.MobilePhone },
                    { "Gender_ID", campReservation.Gender },
                    { "Date_Of_Birth", minorContact.BirthDate },
                    { "Current_School", minorContact.SchoolAttending },
                    { "Congregation_Name", (_congregationRepository.GetCongregationById(campReservation.CrossroadsSite)).Name }
                };

                _contactRepository.UpdateContact(Convert.ToInt32(campReservation.ContactId), updateToDictionary);
                participant = _participantRepository.GetParticipant(Convert.ToInt32(campReservation.ContactId));
            }

            // Save shirt size if set
            var configuration = MpObjectAttributeConfigurationFactory.Contact();

            _objectAttributeService.SaveObjectAttributes(contactId, campReservation.AttributeTypes, campReservation.SingleAttributes, configuration);

            // Save students in selected grade group
            var group = _groupRepository.GetGradeGroupForContact(contactId, _apiUserRepository.GetToken());

            if (group.Status && group.Value.GroupId != campReservation.CurrentGrade)
            {
                _groupRepository.endDateGroupParticipant(group.Value.GroupParticipantId, group.Value.GroupId, DateTime.Now);
                _groupRepository.addParticipantToGroup(participant.ParticipantId,
                                                       campReservation.CurrentGrade,
                                                       _configurationWrapper.GetConfigIntValue("Group_Role_Default_ID"),
                                                       false,
                                                       DateTime.Now);
            }
            else if (!group.Status)
            {
                _groupRepository.addParticipantToGroup(participant.ParticipantId,
                                                       campReservation.CurrentGrade,
                                                       _configurationWrapper.GetConfigIntValue("Group_Role_Default_ID"),
                                                       false,
                                                       DateTime.Now);
            }

            // Check if this person is already an event participant
            var eventParticipant = _eventParticipantRepository.GetEventParticipantEligibility(eventId, contactId);
            var currentlyActive  = (eventParticipant != null && (eventParticipant.EndDate == null || eventParticipant.EndDate >= DateTime.Now));
            var rulesPass        = true;

            if (!currentlyActive)
            {
                rulesPass = _campRules.VerifyCampRules(eventId, campReservation.Gender);
            }

            // ALL OF THE BELOW CODE SHOULD ONLY HAPPEN IF THE RULES PASS
            if (rulesPass)
            {
                //Create eventParticipant
                int eventParticipantId;

                // This is a new event participant, determine their pending timeout and create their entry in the database
                if (eventParticipant == null)
                {
                    var endDate = DetermineEndDate(eventId);
                    eventParticipantId = _eventRepository.RegisterInterestedParticipantWithEndDate(participant.ParticipantId, eventId, endDate);
                }
                else
                {
                    eventParticipantId = eventParticipant.EventParticipantId;

                    // If the participant had previously started an application which expired, update its End Date now
                    if (eventParticipant.EndDate != null && eventParticipant.EndDate < DateTime.Now)
                    {
                        var endDate = DetermineEndDate(eventId);
                        _eventRepository.UpdateParticipantEndDate(eventParticipantId, endDate);
                    }
                }
                var crossroadsSite = _congregationRepository.GetCongregationById(campReservation.CrossroadsSite);

                //form response
                var answers = new List <MpFormAnswer>
                {
                    new MpFormAnswer
                    {
                        Response           = campReservation.SchoolAttendingNext,
                        FieldId            = _configurationWrapper.GetConfigIntValue("SummerCampForm.SchoolAttendingNextYear"),
                        EventParticipantId = eventParticipantId
                    },
                    new MpFormAnswer
                    {
                        Response           = campReservation.RoomMate,
                        FieldId            = _configurationWrapper.GetConfigIntValue("SummerCampForm.PreferredRoommate"),
                        EventParticipantId = eventParticipantId
                    },
                    new MpFormAnswer
                    {
                        Response           = crossroadsSite.Name,
                        FieldId            = _configurationWrapper.GetConfigIntValue("SummerCampForm.CamperCongregation"),
                        EventParticipantId = eventParticipantId
                    }
                };

                var formId       = _configurationWrapper.GetConfigIntValue("SummerCampFormID");
                var formResponse = new MpFormResponse
                {
                    ContactId   = contactId,
                    FormId      = formId,
                    FormAnswers = answers,
                    EventId     = eventId
                };

                _formSubmissionRepository.SubmitFormResponse(formResponse);
                return(campReservation);
            }
            throw new ApplicationException("Rules do not pass!");
        }
예제 #13
0
        public void SaveCamperEmergencyContactInfo(List <CampEmergencyContactDTO> emergencyContacts, int eventId, int contactId, string token)
        {
            var loggedInContact = _contactRepository.GetMyProfile(token);
            var family          = _contactRepository.GetHouseholdFamilyMembers(loggedInContact.Household_ID);

            family.AddRange(_contactRepository.GetOtherHouseholdMembers(loggedInContact.Household_ID));

            if (family.Where(f => f.ContactId == contactId).ToList().Count <= 0)
            {
                throw new ContactNotFoundException(contactId);
            }

            var participant        = _participantRepository.GetParticipant(contactId);
            var eventParticipantId = _eventRepository.SafeRegisterParticipant(eventId, participant.ParticipantId);
            var answers            = new List <MpFormAnswer>();

            if (emergencyContacts.Count == 1)
            {
                var existingEmergencyContacts = GetCamperEmergencyContactInfo(eventId, contactId, token);
                if (existingEmergencyContacts.Count > 1)
                {
                    emergencyContacts.Add(new CampEmergencyContactDTO
                    {
                        Email                   = "",
                        FirstName               = "",
                        LastName                = "",
                        MobileNumber            = "",
                        PrimaryEmergencyContact = false,
                        Relationship            = ""
                    });
                }
            }

            foreach (var emergencyContact in emergencyContacts)
            {
                answers.AddRange(new List <MpFormAnswer>
                {
                    new MpFormAnswer
                    {
                        Response           = emergencyContact.FirstName,
                        FieldId            = emergencyContact.PrimaryEmergencyContact ? _configurationWrapper.GetConfigIntValue("SummerCampForm.EmergencyContactFirstName") : _configurationWrapper.GetConfigIntValue("SummerCampForm.AdditionalEmergencyContactFirstName"),
                        EventParticipantId = eventParticipantId
                    },
                    new MpFormAnswer
                    {
                        Response           = emergencyContact.LastName,
                        FieldId            = emergencyContact.PrimaryEmergencyContact ? _configurationWrapper.GetConfigIntValue("SummerCampForm.EmergencyContactLastName") : _configurationWrapper.GetConfigIntValue("SummerCampForm.AdditionalEmergencyContactLastName"),
                        EventParticipantId = eventParticipantId
                    },
                    new MpFormAnswer
                    {
                        Response           = emergencyContact.MobileNumber,
                        FieldId            = emergencyContact.PrimaryEmergencyContact ? _configurationWrapper.GetConfigIntValue("SummerCampForm.EmergencyContactMobilePhone") : _configurationWrapper.GetConfigIntValue("SummerCampForm.AdditionalEmergencyContactMobilePhone"),
                        EventParticipantId = eventParticipantId
                    },
                    new MpFormAnswer
                    {
                        Response           = emergencyContact.Email,
                        FieldId            = emergencyContact.PrimaryEmergencyContact ? _configurationWrapper.GetConfigIntValue("SummerCampForm.EmergencyContactEmail") : _configurationWrapper.GetConfigIntValue("SummerCampForm.AdditionalEmergencyContactEmail"),
                        EventParticipantId = eventParticipantId
                    },
                    new MpFormAnswer
                    {
                        Response           = emergencyContact.Relationship,
                        FieldId            = emergencyContact.PrimaryEmergencyContact ? _configurationWrapper.GetConfigIntValue("SummerCampForm.EmergencyContactRelationship") : _configurationWrapper.GetConfigIntValue("SummerCampForm.AdditionalEmergencyContactRelationship"),
                        EventParticipantId = eventParticipantId
                    }
                });
            }

            var formId       = _configurationWrapper.GetConfigIntValue("SummerCampFormID");
            var formResponse = new MpFormResponse
            {
                ContactId   = contactId,
                FormId      = formId,
                FormAnswers = answers,
                EventId     = eventId
            };

            _formSubmissionRepository.SubmitFormResponse(formResponse);
        }
        public void SubmitFormResponse()
        {
            var expectedResponseDict = new Dictionary <string, object>
            {
                { "Form_ID", _mockForm.FormId },
                { "Response_Date", DateTime.Today },
                { "Contact_ID", _mockForm.ContactId },
                { "Opportunity_ID", _mockForm.OpportunityId },
                { "Opportunity_Response", _mockForm.OpportunityResponseId },
                { "Pledge_Campaign_ID", null }
            };

            var expectedAnswerDict1 = new Dictionary <string, object>
            {
                { "Form_Response_ID", _mockAnswer1.FormResponseId },
                { "Form_Field_ID", _mockAnswer1.FieldId },
                { "Response", _mockAnswer1.Response },
                { "Opportunity_Response", _mockAnswer1.OpportunityResponseId },
                { "Event_Participant_ID", null }
            };

            var expectedAnswerDict2 = new Dictionary <string, object>
            {
                { "Form_Response_ID", _mockAnswer2.FormResponseId },
                { "Form_Field_ID", _mockAnswer2.FieldId },
                { "Response", _mockAnswer2.Response },
                { "Opportunity_Response", _mockAnswer2.OpportunityResponseId },
                { "Event_Participant_ID", null }
            };

            var expectedAnswerDict3 = new Dictionary <string, object>
            {
                { "Form_Response_ID", _mockAnswer3.FormResponseId },
                { "Form_Field_ID", _mockAnswer3.FieldId },
                { "Response", _mockAnswer3.Response },
                { "Opportunity_Response", _mockAnswer3.OpportunityResponseId },
                { "Event_Participant_ID", null }
            };


            _ministryPlatformService.Setup(m => m.CreateRecord(formResponsePageId, expectedResponseDict, It.IsAny <string>(), true)).Returns(responseId);
            _ministryPlatformService.Setup(m => m.CreateRecord(formAnswerPageId, expectedAnswerDict1, It.IsAny <string>(), true));
            _ministryPlatformService.Setup(m => m.CreateRecord(formAnswerPageId, expectedAnswerDict2, It.IsAny <string>(), true));
            _ministryPlatformService.Setup(m => m.CreateRecord(formAnswerPageId, expectedAnswerDict3, It.IsAny <string>(), true));

            _ministryPlatformRest.Setup(m => m.UsingAuthenticationToken(It.IsAny <string>())).Returns(_ministryPlatformRest.Object);

            var formResult = new List <MpFormResponse>();
            var f          = new MpFormResponse {
                FormResponseId = 0
            };

            formResult.Add(f);
            _ministryPlatformRest.Setup(m => m.Search <MpFormResponse>(It.IsAny <string>(), It.IsAny <string>(), null, true)).Returns(formResult);

            var ansResult = new List <MpFormAnswer>();
            var a         = new MpFormAnswer {
                FormResponseAnswerId = 0
            };

            _ministryPlatformRest.Setup(m => m.Search <MpFormAnswer>(It.IsAny <string>(), It.IsAny <string>(), null, true)).Returns(ansResult);


            var result = _fixture.SubmitFormResponse(_mockForm);

            Assert.AreEqual(responseId, result);
            _ministryPlatformService.VerifyAll();
        }