public HttpResponseMessage PutPerson(PersonViewModel viewModel)
        {
            UpdatePersonResponse response = contactService.UpdatePerson(new UpdatePersonRequest()
            {
                PersonViewModel = viewModel,
                AccountId       = this.AccountId,
                RequestedBy     = this.UserId,
                RoleId          = this.RoleId
            });

            return(Request.BuildResponse(response));
        }
Exemple #2
0
        /// <summary>
        /// Обновляет данные персоны асинхронно
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <UpdatePersonResponse> UpdateAsync(UpdatePersonRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("Person model UpdatePersonRequest  is invalid");
            }
            var resp = new UpdatePersonResponse();

            try
            {
                var unit = factory.CreateUnitOfWork();
                var item = mapper.Map <Entities.Person>(request.Person);
                unit.Persons.Update(item);
                await unit.SaveAsync();
            }
            catch (Exception e) { resp.AddMessage(new Contracts.Message(e.Message)); }
            return(resp);
        }
        protected override void ExecuteInternal(IJobExecutionContext context)
        {
            Log.Informational("Entering into APILeadSubmission processor");
            try
            {
                GetAPILeadSubmissionDataResponse response = new GetAPILeadSubmissionDataResponse();
                response = _contactService.GetAPILeadSubMissionData();
                string spamRemarks = string.Empty;
                while (response != null && response.APILeadSubmissionViewModel != null)
                {
                    try
                    {
                        int             contactID = 0;
                        short           roleId    = _userRepository.GettingRoleIDByUserID(response.APILeadSubmissionViewModel.OwnerID);
                        PersonViewModel viewModel = JsonConvert.DeserializeObject <PersonViewModel>(response.APILeadSubmissionViewModel.SubmittedData);
                        viewModel.AccountID     = response.APILeadSubmissionViewModel.AccountID;
                        viewModel.OwnerId       = response.APILeadSubmissionViewModel.OwnerID;
                        viewModel.LastUpdatedBy = response.APILeadSubmissionViewModel.OwnerID;
                        viewModel.FirstName     = !string.IsNullOrEmpty(viewModel.FirstName) ? viewModel.FirstName.Trim() : viewModel.FirstName;
                        viewModel.LastName      = !string.IsNullOrEmpty(viewModel.LastName) ? viewModel.LastName.Trim() : viewModel.LastName;

                        if (viewModel.Phones.IsAny())
                        {
                            viewModel.Phones.Each(pn =>
                            {
                                pn.Number = !string.IsNullOrEmpty(pn.Number) ? pn.Number.Trim() : pn.Number;
                            });
                        }

                        if (viewModel.CustomFields.IsAny())
                        {
                            viewModel.CustomFields.Each(cm =>
                            {
                                cm.Value = !string.IsNullOrEmpty(cm.Value) ? cm.Value.Trim() : cm.Value;
                            });
                        }

                        Dictionary <string, string> fields = GetContactFields(viewModel);
                        bool isSpam = _spamService.SpamCheck(fields, viewModel.AccountID, response.APILeadSubmissionViewModel.IPAddress, 0, false, out spamRemarks);

                        if (!isSpam)
                        {
                            #region NotSpam
                            var dropdownValues = _dropdownRepository.FindAll("", 10, 1, viewModel.AccountID);
                            IEnumerable <DropdownViewModel> dropdownViewModel = Mapper.Map <IEnumerable <Dropdown>, IEnumerable <DropdownViewModel> >(dropdownValues);

                            string primaryEmail = viewModel.Emails.IsAny() ? viewModel.Emails.Where(e => e.IsPrimary).Select(s => s.EmailId).FirstOrDefault() : "";

                            if (string.IsNullOrEmpty(viewModel.FirstName) && string.IsNullOrEmpty(viewModel.LastName) && !string.IsNullOrEmpty(primaryEmail) && !IsValidEmail(primaryEmail))
                            {
                                _contactRepository.UpdateAPILeadSubmissionData(null, (byte)SubmittedFormStatus.Fail, "Bad Email", response.APILeadSubmissionViewModel.APILeadSubmissionID);
                                return;
                            }

                            var duplicatesResponse = _contactService.CheckIfDuplicate(new CheckContactDuplicateRequest()
                            {
                                PersonVM = viewModel
                            });

                            var leadSourceField         = viewModel.SelectedLeadSource.IsAny() ? viewModel.SelectedLeadSource.FirstOrDefault() : null;
                            var communityField          = viewModel.Communities.IsAny() ? viewModel.Communities.FirstOrDefault() : null;
                            var leadSourceDropDown      = dropdownViewModel.Where(c => c.DropdownID == (byte)DropdownFieldTypes.LeadSources).FirstOrDefault().DropdownValuesList;
                            var leadSourceDropDownValue = new DropdownValueViewModel();
                            if (leadSourceField != null)
                            {
                                Log.Verbose("Attempting to fetch Lead Source drop down value submitted");
                                leadSourceDropDownValue = leadSourceDropDown.Where(e => e.DropdownValueID == leadSourceField.DropdownValueID).FirstOrDefault();
                            }

                            if (leadSourceDropDownValue == null || leadSourceField == null)
                            {
                                Log.Verbose("Attempting to fetch Next Gen account default Lead Source drop down value");
                                leadSourceDropDownValue = leadSourceDropDown.Where(e => e.IsDefault).FirstOrDefault();
                                if (leadSourceDropDownValue == null)
                                {
                                    Log.Verbose("Attempting to fetch First Lead Source drop down value");
                                    leadSourceDropDownValue = leadSourceDropDown.FirstOrDefault();
                                    if (leadSourceDropDownValue == null)
                                    {
                                        throw new UnsupportedOperationException("[|The accound do not have the specified or any lead source configured. Please contact administrator|]");
                                    }
                                }
                            }

                            DropdownValueViewModel leadSourceDropdownViewModel = new DropdownValueViewModel()
                            {
                                AccountID       = viewModel.AccountID,
                                DropdownID      = (byte)ContactFields.LeadSource,
                                DropdownValue   = leadSourceDropDownValue.DropdownValue,
                                DropdownValueID = leadSourceDropDownValue.DropdownValueID
                            };

                            var communityDropdownViewModel = new DropdownValueViewModel();
                            if (communityField != null)
                            {
                                IEnumerable <DropdownValueViewModel> communities = dropdownViewModel.Where(c => c.DropdownID == (byte)DropdownFieldTypes.Community).FirstOrDefault().DropdownValuesList;
                                DropdownValueViewModel selectedcommunity         = communities.Where(x => x.DropdownValueID == communityField.DropdownValueID).FirstOrDefault();
                                if (selectedcommunity != null)
                                {
                                    communityDropdownViewModel = new DropdownValueViewModel()
                                    {
                                        AccountID       = viewModel.AccountID,
                                        DropdownID      = (byte)ContactFields.Community,
                                        DropdownValue   = selectedcommunity.DropdownValue,
                                        DropdownValueID = selectedcommunity.DropdownValueID
                                    };
                                }
                            }

                            if (duplicatesResponse != null && duplicatesResponse.Contacts.IsAny())
                            {
                                Log.Informational("Entering into APILeadSubmission Updation");
                                viewModel.ContactID     = duplicatesResponse.Contacts.FirstOrDefault().Id;
                                viewModel.ContactSource = Entities.ContactSource.API;
                                var existingContact = duplicatesResponse.Contacts.FirstOrDefault() as Person;

                                var leadSource = existingContact.LeadSources != null?existingContact.LeadSources.Select(e => e.Id).ToList() : new List <short>();

                                PersonViewModel existingContactViewModel = Mapper.Map <Person, PersonViewModel>(existingContact);
                                if (leadSource.IndexOf(leadSourceDropdownViewModel.DropdownValueID) == -1)
                                {
                                    existingContactViewModel.SelectedLeadSource = existingContactViewModel.SelectedLeadSource ?? new List <DropdownValueViewModel>();
                                    existingContactViewModel.SelectedLeadSource = existingContactViewModel.SelectedLeadSource.Append(leadSourceDropdownViewModel);
                                }

                                var community = existingContact.Communities != null?existingContact.Communities.Select(e => e.Id).ToList() : new List <short>();

                                if (communityDropdownViewModel != null && community.IndexOf(communityDropdownViewModel.DropdownValueID) == -1)
                                {
                                    existingContactViewModel.Communities = existingContactViewModel.Communities ?? new List <DropdownValueViewModel>();
                                    existingContactViewModel.Communities = existingContactViewModel.Communities.Append(communityDropdownViewModel);
                                }

                                PersonViewModel updateViewModel = GetUpdatedPersonData(existingContactViewModel, viewModel);
                                updateViewModel.IncludeInReports = true;
                                UpdatePersonResponse updatePersonResult = _contactService.UpdatePerson(new UpdatePersonRequest()
                                {
                                    PersonViewModel = updateViewModel,
                                    AccountId       = response.APILeadSubmissionViewModel.AccountID,
                                    RequestedBy     = response.APILeadSubmissionViewModel.OwnerID,
                                    RoleId          = roleId,
                                    RequestedFrom   = RequestOrigin.API
                                });

                                if (updatePersonResult.PersonViewModel.ContactID > 0)
                                {
                                    contactID = updatePersonResult.PersonViewModel.ContactID;
                                    _contactRepository.UpdateAPILeadSubmissionData(updatePersonResult.PersonViewModel.ContactID, (byte)SubmittedFormStatus.Completed, "Completed", response.APILeadSubmissionViewModel.APILeadSubmissionID);
                                }
                            }
                            else
                            {
                                Log.Informational("Entering into APILeadSubmission Insertion");
                                viewModel.FirstContactSource = Entities.ContactSource.API;
                                viewModel.CreatedBy          = response.APILeadSubmissionViewModel.OwnerID;
                                viewModel.CreatedOn          = DateTime.Now.ToUniversalTime();
                                viewModel.SelectedLeadSource = new List <DropdownValueViewModel>();
                                viewModel.SelectedLeadSource = viewModel.SelectedLeadSource.Append(leadSourceDropdownViewModel);
                                viewModel.LastUpdatedOn      = DateTime.Now.ToUniversalTime();
                                if (communityField != null && communityDropdownViewModel.DropdownValueID > 0)
                                {
                                    viewModel.Communities = new List <DropdownValueViewModel>();
                                    viewModel.Communities = viewModel.Communities.Append(communityDropdownViewModel);
                                }

                                //if (viewModel.LifecycleStage > 0)
                                //{
                                IEnumerable <DropdownValueViewModel> lifecycles = dropdownViewModel.Where(c => c.DropdownID == (byte)DropdownFieldTypes.LifeCycle).FirstOrDefault().DropdownValuesList;
                                if (!lifecycles.Where(l => l.DropdownValueID == viewModel.LifecycleStage).IsAny())
                                {
                                    viewModel.LifecycleStage = lifecycles.Where(l => l.IsDefault).Select(s => s.DropdownValueID).FirstOrDefault();
                                }
                                //}
                                if (viewModel.Phones.IsAny())
                                {
                                    IEnumerable <DropdownValueViewModel> phones = dropdownViewModel.Where(c => c.DropdownID == (byte)DropdownFieldTypes.PhoneNumberType).FirstOrDefault().DropdownValuesList;
                                    viewModel.Phones.Each(p =>
                                    {
                                        if (!phones.Where(t => t.DropdownValueID == p.PhoneType).IsAny())
                                        {
                                            p.PhoneType = phones.Where(t => t.IsDefault).Select(s => s.DropdownValueID).FirstOrDefault();
                                        }
                                        if (!string.IsNullOrEmpty(p.Number) && (p.Number.Length < 10 || p.Number.Length > 15))
                                        {
                                            p.IsDeleted = true;
                                        }
                                    });

                                    viewModel.Phones = viewModel.Phones.Where(p => p.IsDeleted == false).ToList();
                                }

                                viewModel.IncludeInReports = true;
                                InsertPersonResponse personResult = _contactService.InsertPerson(new InsertPersonRequest()
                                {
                                    PersonViewModel = viewModel,
                                    AccountId       = response.APILeadSubmissionViewModel.AccountID,
                                    RequestedBy     = response.APILeadSubmissionViewModel.OwnerID,
                                    RoleId          = roleId,
                                    RequestedFrom   = RequestOrigin.API
                                });

                                if (personResult.PersonViewModel.ContactID > 0)
                                {
                                    contactID = personResult.PersonViewModel.ContactID;
                                    _contactRepository.UpdateAPILeadSubmissionData(personResult.PersonViewModel.ContactID, (byte)SubmittedFormStatus.Completed, "Completed", response.APILeadSubmissionViewModel.APILeadSubmissionID);
                                }
                            }
                            if (contactID > 0 && viewModel.SelectedLeadSource.IsAny())
                            {
                                //for Indexing Contact.
                                _formRepository.ScheduleIndexing(contactID, IndexType.Contacts, true);

                                if (response.APILeadSubmissionViewModel.FormID != 0)
                                {
                                    _formService.InsertFormSubmissionEntry(contactID,
                                                                           new SubmittedFormViewModel()
                                    {
                                        FormId = response.APILeadSubmissionViewModel.FormID, SubmittedOn = DateTime.UtcNow, SubmittedData = response.APILeadSubmissionViewModel.SubmittedData, AccountId = response.APILeadSubmissionViewModel.AccountID
                                    },
                                                                           viewModel.SelectedLeadSource.FirstOrDefault().DropdownValueID);
                                }
                            }
                            #endregion
                        }
                        else
                        {
                            _contactRepository.UpdateAPILeadSubmissionData(null, (byte)SubmittedFormStatus.Spam, spamRemarks, response.APILeadSubmissionViewModel.APILeadSubmissionID);
                        }
                    }
                    catch (Exception ex)
                    {
                        ex.Data.Clear();
                        ex.Data.Add("APILeadSubmissinID", response.APILeadSubmissionViewModel.APILeadSubmissionID);
                        Log.Error("Error While Processing APILeadSubmission", ex);
                        _contactRepository.UpdateAPILeadSubmissionData(null, (byte)SubmittedFormStatus.Fail, ex.Message, response.APILeadSubmissionViewModel.APILeadSubmissionID);
                    }
                    finally
                    {
                        response = _contactService.GetAPILeadSubMissionData();
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error("Error while APILeadSubmission", ex);
            }
        }