public HttpResponseMessage CreatePortfolio(ConsumerPortfolio portfolio)
        {
            var modelValidation = portfolio.Validate(this.AccountSession, ValidationMode.Create);

            if (modelValidation.IsValid)
            {
                try
                {
                    // create the consumer portfolio for this portfolio
                    var consumerPortfolio = this.Uow.ConsumerPortfolios.CreatePortfolio(portfolio);

                    // get the updated consumer member (with new consumer portfolio)
                    var results = this.Uow.ConsumerMembers.GetScheme(this.AccountSession.MemberId);

                    return(CreateSuccessResponse(new { success = true, results = results }, HttpStatusCode.OK));
                }
                catch (Exception ex)
                {
                    // log exception
                    Logger.Error(string.Format("Exception detected attempting to create consumer principal via user {0}", this.AccountSession.MemberId), ex);

                    return(CreateErrorResponse(ex));
                }
            }

            // invalid parameters, generate response
            return(CreateInvalidResponse(modelValidation));
        }
        public HttpResponseMessage UpdatePortfolio(ConsumerPortfolio portfolio)
        {
            var modelValidation = portfolio.Validate(this.AccountSession, ValidationMode.Update);

            if (modelValidation.IsValid)
            {
                // portfolio ID
                var id = portfolio.Id;

                try
                {
                    // create the consumer group for this portfolio
                    this.Uow.ConsumerPortfolios.UpdatePortfolio(portfolio);

                    // get updated portfolio scheme
                    var results = this.Uow.ConsumerPortfolios.GetScheme(id);

                    return(CreateSuccessResponse(new { success = true, results = results }, HttpStatusCode.OK));
                }
                catch (Exception ex)
                {
                    // log exception
                    Logger.Error(string.Format("Exception detected attempting to update consumer portfolio {0} via user {1}", id, this.AccountSession.MemberId), ex);

                    return(CreateErrorResponse(ex));
                }
            }

            // invalid parameters, generate response
            return(CreateInvalidResponse(modelValidation));
        }
        public HttpResponseMessage UpdateRequestAsPending(ConsumerPortfolio portfolio)
        {
            var modelValidation = portfolio.Validate(this.AccountSession, ValidationMode.Pending);

            if (modelValidation.IsValid)
            {
                // portfolio ID
                var id = portfolio.Id;

                try
                {
                    // update request state to pending
                    var pendingPortfolio = this.Uow.ConsumerPortfolios.UpdatePortfolioAsPending(id);

                    // let the agent handle processing of the request state change
                    this.Agent.ConsumerRequestSetToPending(pendingPortfolio);

                    // get updated portfolio scheme
                    var results = this.Uow.ConsumerPortfolios.GetScheme(id);

                    return(CreateSuccessResponse(new { success = true, results = results }, HttpStatusCode.OK));
                }
                catch (Exception ex)
                {
                    // log exception
                    Logger.Error(string.Format("Exception detected attempting to update consumer portfolio request state to {0} for Id {1} via user {2}", RequestReceiptStates.Pending, id, this.AccountSession.MemberId), ex);

                    return(CreateErrorResponse(ex));
                }
            }

            // invalid parameters, generate response
            return(CreateInvalidResponse(modelValidation));
        }
Пример #4
0
        public void ResponseUpdatedAsUserRejected(Response response, ConsumerPortfolio consumerPortfolio, ProviderPortfolio providerPortfolio)
        {
            // get the recipients
            var members = this.Mongo.GetProviderPortfolioMembers(providerPortfolio.Id);

            // get the raw HTML template
            var html = MergeTemplates("Layout", "Provider/ResponseUserRejected");

            foreach (var member in members)
            {
                // replace content
                html = html.Replace("[Name]", providerPortfolio.Principal.Name);

                // deliver the message
                DeliverMessage(member.Email, "Services Quote Rejected", html);
            }
        }
Пример #5
0
        public void ResponseUpdatedAsAvailable(Response response, ConsumerPortfolio consumerPortfolio, ProviderPortfolio providerPortfolio)
        {
            // get the recipients
            var members = this.Mongo.GetProviderPortfolioMembers(providerPortfolio.Id);

            // get the raw HTML template
            var html = MergeTemplates("Layout", "Provider/ResponseAvailable");

            foreach (var member in members)
            {
                // replace content
                html = html.Replace("[Name]", providerPortfolio.Principal.Name);
                html = html.Replace("[Domain]", Domain);

                // deliver the message
                DeliverMessage(member.Email, "New Available Opportunity", html);
            }
        }
Пример #6
0
        public void ConsumerRequestSetToPending(ConsumerPortfolio consumerPortfolio)
        {
            // find all provider portfolios who can provide services for this
            var responses = this.Mongo.GenerateResponses(consumerPortfolio);

            // for each response, log a generation message and send a notification via the switchboard
            foreach (var response in responses)
            {
                // log the create message
                this.Logger.Info(string.Format("response {0} created for consumer portfolio {1} on behalf of provider portfolio {2} with the state {3}", response.Id, response.ConsumerPortfolioId, response.ProviderPortfolioId, response.State));

                // get the provider portfolio for this response
                var providerPortfolio = this.Mongo.GetProviderPortfolio(response.ProviderPortfolioId);

                // send this to the switchboard for distribution
                this.Switchboard.ResponseUpdatedAsAvailable(response, providerPortfolio, consumerPortfolio);
            }
        }
Пример #7
0
        public void ConsumerPortfolioReminded(ConsumerPortfolio consumerPortfolio)
        {
            // get consumer members for this portfolio
            var members = this.Mongo.GetConsumerPortfolioMembers(consumerPortfolio.Id);

            // get the raw HTML template
            var html = MergeTemplates("Layout", "Consumer/Reminder");

            foreach (var member in members)
            {
                // replace content
                html = html.Replace("[Member]", member.FullName);
                html = html.Replace("[Domain]", Domain);

                // deliver the message
                DeliverMessage(member.Email, "Ready to Submit?", html);
            }
        }
Пример #8
0
        public void ResponseUpdatedAsUserAccepted(Response response, ConsumerPortfolio consumerPortfolio, ProviderPortfolio providerPortfolio)
        {
            // get the recipients
            var members = this.Mongo.GetProviderPortfolioMembers(providerPortfolio.Id);

            // get the raw HTML template
            var html = MergeTemplates("Layout", "Provider/ResponseAccepted");

            foreach (var member in members)
            {
                // replace content
                html = html.Replace("[Name]", providerPortfolio.Principal.Name);
                html = html.Replace("[Domain]", Domain);

                // deliver the message
                DeliverMessage(member.Email, "Quote Accepted", html);
            }



            // get administrator members for accepted responses
            var admins = this.Mongo.GetAdministratorMembers().Where(item => item.IsNotifiedOnAcceptedResponses);

            // get the raw HTML template
            html = MergeTemplates("Layout", "Administrator/AcceptedResponse");

            // replace content
            html = html.Replace("[City]", consumerPortfolio.Preference.Proximity.City);
            html = html.Replace("[State]", consumerPortfolio.Preference.Proximity.State);
            html = html.Replace("[Quote]", Convert.ToString(response.Quote));
            html = html.Replace("[BalancePaid]", Convert.ToString(response.BalancePaid));
            html = html.Replace("[BalanceDue]", Convert.ToString(response.BalanceDue));
            html = html.Replace("[Id]", response.Id);
            html = html.Replace("[Modified]", DateTimeHelper.ToLocalTime(response.Current.On).ToString());

            foreach (var member in admins)
            {
                // replace content
                html = html.Replace("[Member]", member.FullName);

                // deliver the message
                DeliverMessage(member.Email, "Provider Response Accepted", html);
            }
        }
Пример #9
0
        public void ResponseUpdatedAsPending(Response response, ConsumerPortfolio consumerPortfolio, ProviderPortfolio providerPortfolio)
        {
            var uri = HttpContext.Current.Request.Url;
            // get the recipients
            var members = this.Mongo.GetConsumerPortfolioMembers(consumerPortfolio.Id);

            // get the raw HTML template
            var html = MergeTemplates("Layout", "Consumer/ResponsePending");

            foreach (var member in members)
            {
                // replace content
                html = html.Replace("[FirstName]", member.FirstName);
                html = html.Replace("[Domain]", Domain);

                // deliver the message
                DeliverMessage(member.Email, "Quote for Funeral Services", html);
            }
        }
Пример #10
0
        public void ResponseUpdated(Response response, ConsumerPortfolio consumerPortfolio, ProviderPortfolio providerPortfolio)
        {
            // find the identities for this consumer portfolio ID
            var identities = this.Identities.Where(item => item.PortfolioId == consumerPortfolio.Id);

            if (!identities.Any())
            {
                return;
            }

            // build a consumer response scheme to send out
            var responseScheme = new ConsumerResponseScheme(response, consumerPortfolio, providerPortfolio);

            // send this out to all client identities
            foreach (var identity in identities)
            {
                // send out the updated resoponse scheme
                this.HubContext.Clients.Client(identity.ConnectionId).ResponseUpdated(responseScheme);

                // trace the transmission of this response
                this.Logger.Trace(string.Format("updated response for Id {0} automatically transmitted to consumer portfolio {1} for user Id {2} with connection Id {3}", response.Id, identity.PortfolioId, identity.UserId, identity.ConnectionId));
            }
        }
Пример #11
0
        public void ConsumerRequestSetToPending(ConsumerPortfolio consumerPortfolio)
        {
            // get administrator members for consumer registrations
            var members = this.Mongo.GetAdministratorMembers().Where(item => item.IsNotifiedOnConsumerRegistrations);

            // get the raw HTML template
            var html = MergeTemplates("Layout", "Administrator/ConsumerRegistration");

            // replace content
            html = html.Replace("[City]", consumerPortfolio.Preference.Proximity.City);
            html = html.Replace("[State]", consumerPortfolio.Preference.Proximity.State);
            html = html.Replace("[Id]", consumerPortfolio.Id);
            html = html.Replace("[Modified]", DateTimeHelper.ToLocalTime(consumerPortfolio.Modified.On).ToString());

            foreach (var member in members)
            {
                // replace content
                html = html.Replace("[Member]", member.FullName);
                html = html.Replace("[Domain]", Domain);

                // deliver the message
                DeliverMessage(member.Email, "Consumer Account Registered", html);
            }
        }
Пример #12
0
 public void ConsumerRequestSetToDraft(ConsumerPortfolio portfolio)
 {
     throw new NotImplementedException("Please update WebAgent.ConsumerRequestSetToDraft method");
 }
Пример #13
0
 public void ConsumerRequestSetToPending(ConsumerPortfolio consumerPortfolio)
 {
     // send out mail notifications
     this.Mailer.ConsumerRequestSetToPending(consumerPortfolio);
 }
Пример #14
0
 public void ConsumerPortfolioReminded(ConsumerPortfolio consumerPortfolio)
 {
     // send reminder email to consumer member
     Mailer.ConsumerPortfolioReminded(consumerPortfolio);
 }
Пример #15
0
 public void ConsumerPortfolioCreated(ConsumerMember member, ConsumerPortfolio consumerPortfolio)
 {
     // update the consumer hub identity
     this.ConsumerHub.UpdateIdentity(member);
 }
Пример #16
0
        private void SendUpdatedReponse(Response response, ProviderPortfolio providerPortfolio, ConsumerPortfolio consumerPortfolio, ConsumerMember consumerMember = null)
        {
            // notify all interested consumers that the response has been updated
            this.ConsumerHub.ResponseUpdated(response, consumerPortfolio, providerPortfolio);

            // notify all interested providers that the response has been updated
            this.ProviderHub.ResponseUpdated(response, consumerPortfolio, providerPortfolio);
        }
Пример #17
0
        public void ResponseUpdatedAsUserRejected(Response response, ProviderPortfolio providerPortfolio, ConsumerPortfolio consumerPortfolio)
        {
            // notify all interested parties that the response has been set to rejected
            SendUpdatedReponse(response, providerPortfolio, consumerPortfolio);

            // send out mail notifications
            this.Mailer.ResponseUpdatedAsUserRejected(response, consumerPortfolio, providerPortfolio);
        }