public ProviderResponseScheme(Response response, ProviderPortfolio providerPortfolio, ConsumerPortfolio consumerPortfolio, ConsumerMember consumerMember = null)
        {
            this.Id = response.Id;
            this.ConsumerPortfolioId = response.ConsumerPortfolioId;
            this.ProviderPortfolioId = response.ProviderPortfolioId;

            this.Distance    = response.Distance;
            this.Quote       = response.Quote;
            this.DepositDue  = response.DepositDue;
            this.DepositPaid = response.DepositPaid;
            this.BalanceDue  = response.BalanceDue;
            this.BalancePaid = response.BalancePaid;

            this.Agreement = response.Agreement;
            this.Alternate = response.Alternate;

            this.Created = response.Created;
            this.Current = response.Current;
            this.Pending = response.Pending;

            this.Member     = GetConsumerMember(response, consumerMember);                                           // only show if winning bidder
            this.Principal  = (response.Current.IsAccepted ? consumerPortfolio.Principal : new ConsumerPrincipal()); // only show if winning bidder
            this.Preference = consumerPortfolio.Preference.Clone();
            this.Schedule   = consumerPortfolio.Schedule.Clone();
            this.Request    = consumerPortfolio.Request;

            this.CanBecomeAvailable = response.CanBecomeAvailable;
            this.CanBecomePending   = response.CanBecomePending;
            this.CanBecomeDismissed = response.CanBecomeDismissed;
        }
示例#2
0
        public ProviderPortfolioScheme(ProviderPortfolio providerPortfolio)
        {
            this.Id            = providerPortfolio.Id;
            this.AccountStatus = providerPortfolio.AccountStatus;

            this.Principal = providerPortfolio.Principal;
            this.Profile   = providerPortfolio.Profile;

            this.Members = new List <ProviderMember>();

            this.Created  = providerPortfolio.Created;
            this.Modified = providerPortfolio.Modified;
        }
        public bool HasChanged(ProviderPortfolio portfolio)
        {
            if (this.Principal.HasChanged(portfolio.Principal))
            {
                return(true);
            }

            if (this.Profile.HasChanged(portfolio.Profile))
            {
                return(true);
            }

            return(false);
        }
        public ProviderMember AddMemberPortfolio(string memberId, ProviderPortfolio portfolio)
        {
            // get the member
            var member = GetProviderMember(memberId);

            if (!member.PortfolioIds.Contains(portfolio.Id))
            {
                // add the portfolio
                member.PortfolioIds.Add(portfolio.Id);

                // set as the current portfolio
                member.PortfolioId = portfolio.Id;

                // update in the DB
                Update(member);
            }

            return(member);
        }
        public List <Response> GenerateResponses(ProviderPortfolio providerPortfolio)
        {
            var responses = new List <Response>();

            // extract the longitude and latitude
            var longitude = providerPortfolio.Principal.Address.Longitude.Value;
            var latitude  = providerPortfolio.Principal.Address.Latitude.Value;

            // find all consumers with a pending request
            var query = Query.EQ("Request.State", RequestReceiptStates.Pending);

            // get all consumers within the specified area
            var geoResults = this.ConsumerPortfolios.GeoNear(query, longitude, latitude, UNLIMITED_RESULTS, CreateGeoNearOptions(MI_MAX_DISTANCE));

            // iterate over each geo result hit
            foreach (var hit in geoResults.Hits)
            {
                // get the consumer portfolio
                var consumerPortfolio = hit.Document;

                if (!ResponseExists(consumerPortfolio, providerPortfolio) && hit.Distance <= consumerPortfolio.Preference.MaxDistance)
                {
                    // generate a response for each consumer portfolio
                    var response = new Response(providerPortfolio.Id, consumerPortfolio.Id, null);

                    // set the calculated distance
                    response.Distance = Math.Round(hit.Distance, 1);

                    // save in the DB
                    this.Responses.Save(response);

                    // add this to the list of generated responses
                    responses.Add(response);
                }
            }

            return(responses);
        }
        public ConsumerResponseScheme(Response response, ConsumerPortfolio consumerPortfolio, ProviderPortfolio providerPortfolio)
        {
            this.Id = response.Id;
            this.ConsumerPortfolioId = response.ConsumerPortfolioId;
            this.ProviderPortfolioId = response.ProviderPortfolioId;
            this.Distance            = response.Distance;
            this.Quote       = response.Quote;
            this.DepositDue  = response.DepositDue;
            this.DepositPaid = response.DepositPaid;
            this.BalanceDue  = response.BalanceDue;
            this.BalancePaid = response.BalancePaid;

            this.Agreement = response.Agreement;
            this.Alternate = response.Alternate;

            this.Principal = (response.Current.IsAccepted ? providerPortfolio.Principal : new ProviderPrincipal());
            this.Profile   = (response.Current.IsAccepted ? providerPortfolio.Profile : new ProviderProfile()
            {
                BusinessEstablished = providerPortfolio.Profile.BusinessEstablished,
                FacilityAge = providerPortfolio.Profile.FacilityAge,
                FacilityStyle = providerPortfolio.Profile.FacilityStyle,
                FuneralDirectorExperience = providerPortfolio.Profile.FuneralDirectorExperience,
                TransportationFleetAge = providerPortfolio.Profile.TransportationFleetAge
            });

            this.Preference = consumerPortfolio.Preference;
            this.Schedule   = consumerPortfolio.Schedule;

            this.Created = response.Created;
            this.Current = response.Current;
            this.Pending = response.Pending;

            this.CanAccept = (consumerPortfolio.Request.IsAcceptAllowed && response.CanBecomeAccepted);
            this.CanReject = (consumerPortfolio.Request.IsRejectAllowed && response.CanBecomeRejected);
        }
 public static IRuleBuilderOptions <T, string> IsCurrentProviderPortfolio <T>(this IRuleBuilder <T, string> rule, ProviderPortfolio instance)
 {
     return(rule.Must(id =>
     {
         using (var db = new MongoDbContext())
         {
             var portfolio = db.GetProviderPortfolio(id);
             if (portfolio != null)
             {
                 // verify the modified timestamps match
                 if (instance.Modified.On == portfolio.Modified.On)
                 {
                     return true;
                 }
             }
         }
         return false;
     }));
 }
 public void Update(ProviderPortfolio portfolio)
 {
     this.ProviderPortfolios.Save(portfolio);
 }
 private bool ResponseExists(ConsumerPortfolio consumerPortfolio, ProviderPortfolio providerPortfolio)
 {
     return(this.Responses.FindAll().Any(item => (item.ConsumerPortfolioId == consumerPortfolio.Id && item.ProviderPortfolioId == providerPortfolio.Id)));
 }
示例#10
0
 public Response FindProviderResponse(ProviderPortfolio providerGroup)
 {
     return(FindProviderResponse(providerGroup.Id));
 }