//
        // GET: /SalesLead/
        public async Task <ActionResult> Index()
        {
            LeadContactViewModel vm = new LeadContactViewModel();

            var client = await GetExchangeClient();

            var messageResults = await(from i in client.Me.Inbox.Messages
                                       where i.Subject.Contains("[SKU:")
                                       orderby i.DateTimeSent descending
                                       select i).ExecuteAsync();

            foreach (var message in messageResults.CurrentPage)
            {
                LeadInfo newContact = new LeadInfo();

                newContact.ID           = message.Id;
                newContact.email        = message.From.Address;
                newContact.message      = message.BodyPreview;
                newContact.dateReceived = message.DateTimeReceived.Value.DateTime;

                //look up product from SKU
                var    beginPos = message.Subject.IndexOf("[", 0) + 1;
                var    endPos   = message.Subject.IndexOf("]", beginPos);
                string skuLine  = message.Subject.Substring(beginPos, endPos - beginPos);

                List <Product> products = await GetProducts();

                var product = products.Where(p => p.Title.Contains(skuLine.Split(':')[1])).SingleOrDefault();

                newContact.productRequest = product.Title;

                vm.leads.Add(newContact);
            }

            //get the sales staff from outlook
            var contactsResults = await(from i in client.Me.Contacts
                                        orderby i.DisplayName
                                        select i).ExecuteAsync();

            foreach (var contact in contactsResults.CurrentPage)
            {
                SalesPerson person = new SalesPerson();

                person.ID    = contact.Id;
                person.name  = contact.DisplayName;
                person.email = contact.EmailAddress1;

                vm.salesStaff.Add(person);
            }

            return(View(vm));
        }
Exemplo n.º 2
0
 public IActionResult LeadContact(LeadContactViewModel leadContact)
 {
     if (leadContact is null)
     {
         throw new ArgumentNullException(nameof(leadContact));
     }
     if (!ModelState.IsValid)
     {
         return(RedirectToAction("FreelanceAdmin"));
     }
     _db.LeadContacts.Add(leadContact);
     _db.SaveChanges();
     return(View());
 }
        public async Task <ActionResult> Index(LeadContactViewModel vm)
        {
            var client = await GetExchangeClient();

            var contactResults = await(from i in client.Me.Contacts
                                       select i).ExecuteAsync();

            var contact = contactResults.CurrentPage.Where(c => c.Id == vm.selectedSalesStaffID).SingleOrDefault();

            //USE HTTPCLIENT
            //get authorization token
            Authenticator authenticator = new Authenticator();
            var           authInfo      = await authenticator.AuthenticateAsync(ExchangeResourceId);

            //send request through HttpClient
            HttpClient httpClient = new HttpClient();

            httpClient.BaseAddress = new Uri(ExchangeResourceId);

            //add authorization header
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", await authInfo.GetAccessToken());

            //prepare POST content for forward request
            ForwardMessage forwardContent = new Models.ForwardMessage();

            forwardContent.Comment = "This lead has been reassigned to you";
            forwardContent.ToRecipients.Add(new Recipient()
            {
                Address = contact.EmailAddress1, Name = contact.DisplayName
            });

            //convert POST content to JSON
            StringContent postContent = new StringContent(JsonConvert.SerializeObject(forwardContent));

            postContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            //send forward request
            var forwardResponse = httpClient.PostAsync("/ews/odata/Me/Inbox/Messages('" + vm.selectedLeadID + "')/Forward", postContent).Result;

            //delete message to remove from INBOX/Lead List
            //send delete request
            var deleteResponse = httpClient.DeleteAsync("/ews/odata/Me/Inbox/Messages('" + vm.selectedLeadID + "')").Result;

            //refresh leads
            vm.leads.Clear();
            var messageResults = await(from i in client.Me.Inbox.Messages
                                       where i.Subject.Contains("[SKU:")
                                       orderby i.DateTimeSent descending
                                       select i).ExecuteAsync();

            foreach (var message in messageResults.CurrentPage)
            {
                LeadInfo newContact = new LeadInfo();

                newContact.ID           = message.Id;
                newContact.email        = message.From.Address;
                newContact.message      = message.BodyPreview;
                newContact.dateReceived = message.DateTimeReceived.Value.DateTime;

                vm.leads.Add(newContact);
            }

            return(View(vm));
        }