public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonAlexaForBusinessConfig config = new AmazonAlexaForBusinessConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonAlexaForBusinessClient client = new AmazonAlexaForBusinessClient(creds, config);

            SearchContactsResponse resp = new SearchContactsResponse();

            do
            {
                SearchContactsRequest req = new SearchContactsRequest
                {
                    NextToken = resp.NextToken
                    ,
                    MaxResults = maxItems
                };

                resp = client.SearchContacts(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.Contacts)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.NextToken));
        }
Example #2
0
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            SearchContactsResponse response = new SearchContactsResponse();

            context.Read();
            int targetDepth = context.CurrentDepth;

            while (context.ReadAtDepth(targetDepth))
            {
                if (context.TestExpression("Contacts", targetDepth))
                {
                    var unmarshaller = new ListUnmarshaller <ContactData, ContactDataUnmarshaller>(ContactDataUnmarshaller.Instance);
                    response.Contacts = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("NextToken", targetDepth))
                {
                    var unmarshaller = StringUnmarshaller.Instance;
                    response.NextToken = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("TotalCount", targetDepth))
                {
                    var unmarshaller = IntUnmarshaller.Instance;
                    response.TotalCount = unmarshaller.Unmarshall(context);
                    continue;
                }
            }

            return(response);
        }
Example #3
0
        public void GetAllContacts_RunTimeException_ExceptionHandled()
        {
            SearchContactsResponse <ContactListEntry> response = contactService.GetAllContacts <ContactListEntry>(new SearchContactsRequest()
            {
                Query = "Adam"
            });

            Assert.AreEqual(null, response.Exception);
        }
Example #4
0
        public async Task <ActionResult <MainResponse> > SearchNewContacts(SearchContactsRequest request)
        {
            User user = HttpContext.GetUser();

            if (user == null)
            {
                return(StatusCode(401));
            }

            string searchKey = "%" + request.SearchKey.Replace(" ", "%") + "%";

            User[]   users1   = new User[0];
            User[]   users2   = new User[0];
            string[] friends1 = new string[0];
            string[] friends2 = new string[0];

            IQueryable <Contact> contacts = _context.Contacts.Where(p => p.User1.Id == user.Id || p.User2.Id == user.Id);

            if (request.IsNewContacts)
            {
                users1 = await _context.Users.Where(p => (EF.Functions.Like(p.Login, searchKey) || EF.Functions.Like(p.FirstName, searchKey) || EF.Functions.Like(p.LastName, searchKey) || EF.Functions.Like(p.FirstName + p.LastName, searchKey) || EF.Functions.Like(p.LastName + p.FirstName, searchKey)) && p.Id != user.Id).Skip(_serverConfig.Contacts.PartsSize.SearchResultsPerPart * (request.Part - 1)).Take(_serverConfig.Contacts.PartsSize.SearchResultsPerPart).ToArrayAsync();

                string[] usersId = users1.Select(p => p.Id).ToArray();
                friends1 = contacts.Where(p => usersId.Contains(p.User1.Id)).Select(p => p.User1.Id).ToArray();
                friends2 = contacts.Where(p => usersId.Contains(p.User2.Id)).Select(p => p.User2.Id).ToArray();
            }
            else
            {
                users1 = await contacts.Where(p => p.User1.Id != user.Id).Select(p => p.User1).Where(p => (EF.Functions.Like(p.Login, searchKey) || EF.Functions.Like(p.FirstName, searchKey) || EF.Functions.Like(p.LastName, searchKey) || EF.Functions.Like(p.FirstName + p.LastName, searchKey) || EF.Functions.Like(p.LastName + p.FirstName, searchKey)) && p.Id != user.Id).Skip(_serverConfig.Contacts.PartsSize.SearchResultsPerPart * (request.Part - 1)).Take(_serverConfig.Contacts.PartsSize.SearchResultsPerPart).ToArrayAsync();

                users2 = await contacts.Where(p => p.User2.Id != user.Id).Select(p => p.User2).Where(p => (EF.Functions.Like(p.Login, searchKey) || EF.Functions.Like(p.FirstName, searchKey) || EF.Functions.Like(p.LastName, searchKey) || EF.Functions.Like(p.FirstName + p.LastName, searchKey) || EF.Functions.Like(p.LastName + p.FirstName, searchKey)) && p.Id != user.Id).Skip(_serverConfig.Contacts.PartsSize.SearchResultsPerPart * (request.Part - 1)).Take(_serverConfig.Contacts.PartsSize.SearchResultsPerPart).ToArrayAsync();
            }

            SearchContactsResponse searchContacts = new SearchContactsResponse()
            {
                Users     = new List <ExtUser>(),
                FriendsId = new List <string>()
            };

            for (int i = 0; i < users1.Length; i++)
            {
                searchContacts.Users.Add((ExtUser)users1[i]);
                searchContacts.Users[i].Img?.SetPath(_serverConfig.General.ServerPath + _serverConfig.FileRoutes.UserImages.Route);
            }

            for (int i = 0; i < users2.Length; i++)
            {
                searchContacts.Users.Add((ExtUser)users2[i]);
            }

            searchContacts.FriendsId.AddRange(friends1);
            searchContacts.FriendsId.AddRange(friends2);

            return(MainResponse.GetSuccess(searchContacts));
        }
Example #5
0
        public void GetAllContacts_ValidPersonsAndCompanies_Succeed()
        {
            var mockContacts = ContactMockData.GetMockContacts(mockRepository, 10).ToList();

            mockContactRepository.Setup(cr => cr.FindAll(It.IsAny <string>())).Returns(mockContacts);
            //mockSearchService.Setup(c => c.Search("Adam", new SearchParameters() { AutoCompleteFieldName = "Adam"})).Returns();

            SearchContactsResponse <ContactListEntry> response = contactService.GetAllContacts <ContactListEntry>(new SearchContactsRequest()
            {
                Query = ""
            });
            var contacts = response.Contacts;

            mockRepository.VerifyAll();
            Assert.AreEqual(mockContacts.Count, contacts.Count());
            Assert.AreEqual(null, response.Exception);
        }
Example #6
0
        public GetOpportunityResponse getOpportunity(GetOpportunityRequest request)
        {
            GetOpportunityResponse response = new GetOpportunityResponse();

            hasAccess(request.OpportunityID, request.RequestedBy, request.AccountId, request.RoleId);
            Opportunity opportunity = opportunityRepository.FindBy(request.OpportunityID);



            if (opportunity == null)
            {
                response.Exception = GetOpportunitiesNotFoundException();
            }
            else
            {
                SearchContactsRequest contactsRequest = new SearchContactsRequest();
                contactsRequest.ContactIDs  = opportunity.Contacts.ToArray();
                contactsRequest.AccountId   = request.AccountId;
                contactsRequest.RoleId      = request.RoleId;
                contactsRequest.RequestedBy = request.RequestedBy;
                contactsRequest.Limit       = opportunity.Contacts.Count();
                contactsRequest.PageNumber  = 1;
                SearchContactsResponse <ContactEntry> contactsResponse = contactService.GetAllContacts <ContactEntry>(contactsRequest);
                IEnumerable <int> people = opportunity.Contacts;
                var contacts             = contactsResponse.Contacts.Where(c => people.Contains(c.Id));

                IEnumerable <Tag> tags = tagRepository.FindByOpportunity(request.OpportunityID);

                OpportunityViewModel opportunityViewModel = Mapper.Map <Opportunity, OpportunityViewModel>(opportunity);
                opportunityViewModel.Contacts     = contacts;
                opportunityViewModel.ContactCount = opportunity.Contacts.Count();
                response.OpportunityViewModel     = opportunityViewModel;

                opportunityViewModel.TagsList = tags;

                if (opportunity.ImageID != null)
                {
                    Image image = opportunityRepository.GetOpportunityProfileImage(opportunity.ImageID.Value);
                    opportunityViewModel.Image = Mapper.Map <Image, ImageViewModel>(image);
                    opportunityViewModel.Image.ImageContent = urlService.GetUrl(opportunityViewModel.AccountID, ImageCategory.OpportunityProfile, opportunityViewModel.Image.StorageName);
                }
            }
            return(response);
        }
Example #7
0
        SearchOpportunityResponse search(SearchOpportunityRequest request, IEnumerable <Type> types, IList <string> fields, bool matchAll, bool autoComplete)
        {
            SearchOpportunityResponse response   = new SearchOpportunityResponse();
            SearchParameters          parameters = new SearchParameters();

            parameters.Limit      = request.Limit;
            parameters.PageNumber = request.PageNumber == 0 ? 1 : request.PageNumber;
            parameters.Types      = types;
            parameters.MatchAll   = matchAll;
            parameters.AccountId  = request.AccountId;
            parameters.Ids        = request.OpportunityIDs;
            parameters.UserID     = request.UserID;
            parameters.StartDate  = request.StartDate;
            parameters.EndDate    = request.EndDate;

            if (request.SortField != null)
            {
                List <string> sortFields = new List <string>();
                var           maps       = SmartTouch.CRM.ApplicationServices.ObjectMappers.MapperConfigurationProvider.Instance.FindTypeMapFor <OpportunityViewModel, Opportunity>();

                foreach (var propertyMap in maps.GetPropertyMaps())
                {
                    if (request.SortField.Equals(propertyMap.SourceMember.Name))
                    {
                        sortFields.Add(propertyMap.DestinationProperty.MemberInfo.Name);
                        break;
                    }
                }
                parameters.SortDirection = request.SortDirection;
                parameters.SortFields    = sortFields;
            }
            Logger.Current.Informational("Search string:" + request.Query);
            Logger.Current.Informational("Parameters:" + parameters.ToString());
            SearchResult <Opportunity> searchResult;

            bool isAccountAdmin = cachingService.IsAccountAdmin(request.RoleId, request.AccountId);
            bool isPrivate      = cachingService.IsModulePrivate(AppModules.Opportunity, request.AccountId);

            if (isPrivate && !isAccountAdmin)
            {
                int userId = (int)request.RequestedBy;
                searchResult = searchService.Search(request.Query, c => c.OwnerId == userId, parameters);
            }
            else if (request.UserID != null && request.StartDate != null && request.EndDate != null)
            {
                int userId = (int)request.UserID;
                searchResult = searchService.Search(request.Query, c => c.CreatedBy == userId, parameters);
            }
            else
            {
                searchResult = searchService.Search(request.Query, parameters);
            }

            IEnumerable <Opportunity> opportunities = searchResult.Results;

            Logger.Current.Informational("Search complete, total results:" + searchResult.Results.Count());

            if (opportunities == null)
            {
                response.Exception = GetOpportunitiesNotFoundException();
            }
            else
            {
                IEnumerable <OpportunityViewModel> list = Mapper.Map <IEnumerable <Opportunity>, IEnumerable <OpportunityViewModel> >(opportunities);

                IEnumerable <int>     contactIds      = searchResult.Results.SelectMany(o => o.Contacts).Distinct().ToList();
                SearchContactsRequest contactsRequest = new SearchContactsRequest();
                contactsRequest.ContactIDs  = contactIds.ToArray();
                contactsRequest.AccountId   = request.AccountId;
                contactsRequest.RoleId      = request.RoleId;
                contactsRequest.RequestedBy = request.RequestedBy;
                contactsRequest.Limit       = contactIds.Count();
                contactsRequest.PageNumber  = 1;
                contactsRequest.Module      = AppModules.Opportunity;
                SearchContactsResponse <ContactEntry> contactsResponse = contactService.GetAllContacts <ContactEntry>(contactsRequest);
                foreach (Opportunity opportunity in searchResult.Results)
                {
                    var opportunityViewModel = list.SingleOrDefault(o => o.OpportunityID == opportunity.Id);

                    IEnumerable <int> people = opportunity.Contacts;

                    //if (isPrivate && !isAccountAdmin)
                    //{
                    //    IList<int> owncontacts = contactRepository.GetContactByUserId((int)request.RequestedBy);

                    //    var peopleinvoled = opportunity.PeopleInvolved.Where(n => !owncontacts.Contains(n.ContactID));

                    //    foreach (var p in peopleinvoled)
                    //    {
                    //        p.IsPrivate = true;
                    //    }
                    //}

                    var contacts = contactsResponse.Contacts.Where(c => people.Contains(c.Id));
                    opportunityViewModel.Contacts = contacts;
                }


                response.Opportunities = list;
                response.TotalHits     = searchResult.TotalHits;
            }
            return(response);
        }